1. typeAliases
    1. 概念
      1. 类型别名。
      2. 给java类型取一个别名,方便在核心配置、映射配置中来使用这个java类型。
      3. 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余
    2. 比较(区别看resultType)
      1. 不使用别名
        1. <select id="findUserById" resultType="com.yu.model.User" parameterType="long"> select * from t_user where id = #{id} </select>
      2. 使用别名
        1. 在核心配置文件中加上配置
          1. <typeAliases> <typeAlias type="com.yu.model.User" alias="User" /> <typeAlias type="com.yu.model.Org" alias="Org"/> </typeAliases>
        2. 或者注解方式
          1. <typeAliases> <package name="com.yu.model"/> </typeAliases>
          2. @Alias("user") public class User { ... }
          3. 在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名
          4. 若有注解,则别名为其注解值
        3. 修改UserMapper.xml的配置
          1. <select id="findUserById" resultType="User" parameterType="long"> select * from t_user where id = #{id} </select>
    3. 内置类型别名
      1. 已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。
      2. 内置类型别名.png
  2. typeHandlers
    1. 概念
      1. 类型处理器
      2. 无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型
    2. 内置类处理器
      1. 内置类处理器.png
    3. 用途
      1. 1)获取数据库的值,以合适的方式转变为对应的java类型
      2. 2)将java类型,以合适的方式转化为数据库的保存类型
    4. 自定义类型处理器
      1. 实现 org.apache.ibatis.type.TypeHandler 接口
      2. 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler
      3. 然后可以选择性地将它映射到一个 JDBC 类型
      4. 例子
        1. // ExampleTypeHandler.java @MappedJdbcTypes(JdbcType.VARCHAR) public class ExampleTypeHandler extends BaseTypeHandler<String> { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { return rs.getString(columnName); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return rs.getString(columnIndex); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return cs.getString(columnIndex); } }
        2. <!-- mybatis-config.xml --> <typeHandlers> <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/> </typeHandlers>
        3. 使用这个的类型处理器将会覆盖已经存在的处理 Java 的 String 类型属性和 VARCHAR 参数及结果的类型处理器。
    5. 处理枚举类型
      1. 若想映射枚举类型 Enum,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用
      2. 默认情况下,MyBatis 会利用 EnumTypeHandler 来把 Enum 值转换成对应的名字。
      3. <!-- mybatis-config.xml --> <typeHandlers> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="java.math.RoundingMode"/> </typeHandlers>