Mapper配置文件-类型转换器(TypeHandler)
功能
将数据库类型(jdbcType)和Java类型(javaType)互相转换
自动转换
基础类型MyBatis会自动识别并完成转换
常见的boolean、byte、int、Date、Timestamp及部分数组等都支持自动转换
详见 https://mybatis.org/mybatis-3/zh/configuration.html#typeHandlers
使用
转换器的底层是BaseTypeHandler<T>(继承自TypeHanlder<T>接口),默认T为参数类型
指定转换器
可通过指定Java类型或jdbc类型设置
设置java类型
设置javaType为指定对应的实体属性类型,不设置时自动判断
1 | <result column="request_url" property="requestUrl" javaType="java.lang.String"/> |
数据库列request_url(类型为jdbcType.VARCHAR),对应的实体属性为requestUrl(类型为String),将使用StringTypeHandler
或者在TypeHandler添加注解@MappedTypes(java类型),表示所有该jdbcType类型均使用该TypeHandler,需要在配置文件中通过typeHandlers引入该转换器
1 | //自定义String类型转换器 |
1 | <!--引入转换器--> |
则所有javaType="java.lang.String"的字段将使用该转换器
1 | <result column="request_url" javaType="java.lang.String" property="requestUrl"/> |
将使用MyStringTypeHandler
若javaType和MappedTypes均设置了,则以javaType为准
设置jdbc类型
同设置java类型
- 设置
jdbcType指定该字段的数据库类型 - 或者在
typeHandler添加注解@MappedJdbcTypes(JdbcTypes) - 均设置时,以
jdbcType为准
SQL参数指定转换
在参数后可跟typeHandler属性指定,详见参数映射
#{param, typeHandler=转换器}
1 | insert into user(id, name) values (#{id},#{name,typeHandler=net.nmtsoft.MyStringTypeHandler}) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AlMirai!