04.MyBatis别名的设置和类型转换器

别名的设置:(别名不区分大小写):

设置单个别名:

<configuration>
    <properties resource="db.properties" />
    <typeAliases>
        <!-- 设置单个别名 -->
        <typeAlias type="com.offcn.entity.Person" alias="person"/>
        <typeAlias type="com.offcn.entity.Book" alias="book"/>
    </typeAliases>

映射文件中直接写别名即可:

<select id="queryPersonById" parameterType="int" resultType="person">
    select * from person where id = #{id}
</select>

批量设置别名:

<typeAliases>
   <!-- 批量定义别名 ,别名不区分大小写,会将该包下的所有文件批量设置别名-->
    <package name="com.offcn.entity"/>
</typeAliases>

类型转换器:


1.MyBatis自带的类型转换器:

2.自定义的类型转换器:

步骤:

a.创建转换器:需要实现TypeHandler接口,实现转换器有两种方式:

  i.实现接口TypeHandler

  ii.继承BaseTypeHander

创建converter转换器,代码如下:

package com.offcn.converter;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class BooleanToIntConverter extends BaseTypeHandler<Boolean>{
    //DB ---> java
    @Override
    //根据名字拿
    public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
        // TODO Auto-generated method stub
        int sexNo = rs.getInt(columnName);
        return sexNo == 1?true:false;
    }
    //根据下标拿
    @Override
    public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        // TODO Auto-generated method stub
        int sexNo = rs.getInt(columnIndex);
        return sexNo == 1?true:false;
    }
    //根据存储过程拿
    @Override
    public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        // TODO Auto-generated method stub
        int sexNo = cs.getInt(columnIndex);
        return sexNo == 1?true:false;
    }
    //java ---> DB
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbc) throws SQLException {
        // TODO Auto-generated method stub
        if(parameter) {
            ps.setInt(i, 1);
        }else {
            ps.setInt(i, 0);
        }
    }

}

在conf.xml文件中配置类型转换器:

<typeHandlers>
        <typeHandler handler="com.offcn.converter.BooleanToIntConverter" javaType="Boolean" jdbcType="INTEGER"/>
</typeHandlers>

映射文件中查找的sql:(DB ---> JAVA)

<!-- 带类型转换器的查询 -->
   <select id="queryPersonByIdWithConverter" parameterType="int" resultMap="personResult">
    select * from person where id = #{id}
  </select>
  <resultMap type="person" id="personResult">
      <!-- 分为主键和非主键,主键用id,非主键用result -->
      <id property="id" column="id"/>
      <result property="name" column="name"/>
      <result property="bir" column="bir"/>
      <result property="address" column="address"/>
      <result property="sex" column="sex" javaType="Boolean" jdbcType="INTEGER" />
  </resultMap>

接口中定义对应的方法:

Person queryPersonByIdWithConverter(int id);

测试类进行测试:

public static void queryPersonByIdWithConverter() throws IOException {
        //读取conf.xml文件
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //创建sqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //获取sqlSession
        SqlSession session = sessionFactory.openSession();
        //通过session定位映射文件
        personMapper personMapper = session.getMapper(personMapper.class);
        //定位sql语句并执行
        Person person = personMapper.queryPersonByIdWithConverter(4);
        //提交事务
        session.commit();
        System.out.println(person);
        //关闭连接
        session.close();
    }

映射文件中增加的sql:(JAVA --> DB)

<!-- 带类型转转器的增加 -->
  <insert id="insertPersonWithConverter" parameterType="person" >
      insert into person (name,bir,address,sex) value (#{name},#{bir},#{address},#{sex,javaType=Boolean,jdbcType=INTEGER})
  </insert>

接口中定义对应的方法:

测试类进行测试:

//带转换器的增加操作
    public static void insertPersonWithConverter() throws IOException {
        //读取conf.xml文件
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //获取sqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //获取sqlSession
        SqlSession session = sessionFactory.openSession();
        //定位映射文件的位置
        personMapper personMapper = session.getMapper(personMapper.class);
        //定位sql并执行
        Person person = new Person("小孙",new Date(),"青岛",true);
        personMapper.insertPersonWithConverter(person);
        //提交事务
        session.commit();
        System.out.println("增加成功");
        //关闭连接
        session.close();
    }

最后关于:sql标签中什么时候用resultType什么时候用resultMap

1.如果表中字段和实体类中的属性的类型合理识别,则用resultType,否则用resultMap

2.如果表中字段的名字和实体类中属性名能够合理识别,则用resultType,否则用resultMap

原文地址:https://www.cnblogs.com/man-tou/p/11335402.html

时间: 2024-11-03 21:03:09

04.MyBatis别名的设置和类型转换器的相关文章

mybatis入门系列三之类型转换器

mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名,java类属性类型-数据库字段类型 前面两个都容易设置,但是第三点要求经常会出现java类型和数据库的存储类型不一样, 例如java类型是String,数据库中存储的是char.varchar.text 对于一般常见的类型对应,mybatis已经内部包含了类型转换器,使String类型的java属性

springboot之mybatis别名的设置

mybatis别名设置 在具体的mapper.xml文件中,定义很多的statement,statement需要parameterType指定输入参数的类型.需要resultType指定输出结果的映射类型. 一.mybatis默认支持别名 别名 映射的类型 _byte byte _long long _short short _int int _integer int _double double _float float _boolean boolean string String byte

Struts2之类型转换器

一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在很多领域,但是在web领域,因为在客户端到服务器端传输的只是字符串,所以这里就有一个需求收缩,我们的需求就变为完成String和复杂对象之间的互相转换.在Struts2中的类型转换则是在客户端的请求参数往Action的成员属性中设置的时候会被调用. 二.如何使用? 1.理论部分 所有的类型转换器都要

(二)Mybatis类型转换器,接口传参类型,

Mybatis类型转换器 首先明白什么时候用到它,当数据库的字段类型和java字段类型无法默认匹配时候进行转换,比如现在数据库类型是INTEGER,而java当中类型是Boolean,true表示1,false表示0,这时候你在执行sql语句插入或者查询获取结果集时,类型就会出现不匹配的情况,这时候我们只需要书写一个类型转换器,并进行配置,之后java遇到INTEGER---Boolean两个类型的时候,就会帮我们自动转换,相当于你插入数据库的值传的是true,他就会转换成1然后插入,数据库返回

mybatis类型转换器 - 自定义全局转换enum

在数据模型.接口参数等场景部分属性参数为一些常量值,比如性别:男.女.若是定义成int或String类型,于是类型本身的范围太宽,要求使用者需要了解底层的业务方可知如何传值,那整体来看增加沟通成本,对接效率也低.面对此等业务,使用枚举简便许多.枚举enum像个固定常量类,也像一个数组. public enum Sex { Male(1,"男"), FeMale(2,"女"), ; private int index; private String descripti

struts局部、全局类型转换器

第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday = null; public Date getBirthday() { System.out.println("获得-User:" + birthday); return birthday; } public void setBirthday(Date birthday) { System

笔记02 文件上传、文件下载、类型转换器、国际化的支持

Struts2的上传 1. Struts2默认采用了apache commons-fileupload  2. Struts2支持三种类型的上传组件 3. 需要引入commons-fileupload相关依赖包 * commons-io-1.3.2.jar * commons-fileupload-1.2.1.jar 4. 表单中需要采用POST提交方式,编码类型需要使用:multipart/form-data 5. Struts2的Action     取得文件名称->>规则:输入域的名称+

Spring MVC__自定义日期类型转换器

WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们.说真的,以前真没这样做过,之前都是一口气查询到数据,然后在jsp页面上格式化,最后展示给用户.但是这次不同,这次我纯属操作数据,没有页面.直接从数据库拿数据给它们返数据.它们给我传数据我持久化数据,说到这里一个小问题就默默的来了. 首先把问题还原一下吧(这是一个数据导出功能),下图中用红框圈起来的都是直接从数据库中拿到的数据,但是不幸的是它

JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置

Action接受请求参数 作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中 Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装 Struts2和MVC定义关系 StrutsPrepareAndExecuteFilter:控制器 在Struts2中action是什么?(Struts2是一个MVC框架) V:jsp M:action C:action StrutsPrepareAndExecuteFilter Struts2提供了三种数据封装