背景
利用MyBatis将数据库的时间类型映射成Java8的时间类型,引申对不同类型的自定义映射
实现方法
1.实现MyBatis中TypeHandler接口
@MappedTypes(value = DateTime.class)
@MappedJdbcTypes(value = {JdbcType.DATE,JdbcType.TIME,JdbcType.TIMESTAMP})
public class DateTimeTypeHandler extends BaseTypeHandler<DateTime> {
//implement all methods
}
具体内容件参考[3]
2.在MyBatis的配置文件中添加
<typeHandlers>
<typeHandler handler="your.package.LocalDateTypeHandler"/>
</typeHandlers>
或者
<typeHandlers>
<package name="org.mybatis.example"/>
</typeHandlers>
如果是在MyBatis-Spring集成的配置中
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
// ...
<property name="typeHandlersPackage" value="...."/>
// or
<property name="typeHandlers">
<array></array>
</property>
</bean>
3. 使用TypeHandler
手写可以在mapper.xml中选择TypeHandler
<result column="use_date" property="useDate" javaType="java.time.LocalDate" jdbcType="DATE" typeHandler="org.apache.ibatis.type.LocalDateTypeHandler" />
类型不是都必须的,会根据typeHandler寻找合适的类型
生成可以使用MyBatisGenerator的columnOverride元素
<table tableName="get_money_limit" domainObjectName="GetMoneyLimit">
<columnOverride column="use_date" javaType="java.time.LocalDate"/>
</table>
<table tableName="get_money_history" domainObjectName="GetMoneyHistory">
<columnOverride column="operate_date" javaType="java.time.LocalDate"/>
</table>
其他
MyBatis已经官方增加了java8的一些类型的TypeHandler,需要Mybatis升级到3.4以上,引入:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-typehandlers-jsr310</artifactId>
<version>1.0.1</version>
</dependency>
参考资料
[1]Java 8 LocalDate mapping with mybatis
[2]mybatis generator columnOverride
元素
[3]typeHandlers 文档