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