mybatis实现自定义typeHandler
java8以前的日期处理有多恶心,相信不少人都深有体会。与mabatis集成查询数据库中的日期字段映射为java日期类型或者字符型的时候,会多出一个".0"。当然可以自行处理。但是显得太不优雅。可以通过自定义一个数据类型转换器,来格式化。
import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; @MappedJdbcTypes(JdbcType.TIMESTAMP) @MappedTypes(String.class) public class TimeTypeHandler extends BaseTypeHandler<String>{ @Override public String getNullableResult(ResultSet arg0, String arg1) throws SQLException { Timestamp timestamp = arg0.getTimestamp(arg1); return DateFormatUtils.format(timestamp, "yyyy-MM-dd HH:mm:ss"); } @Override public String getNullableResult(ResultSet arg0, int arg1) throws SQLException { return arg0.getString(arg1); } @Override public String getNullableResult(CallableStatement arg0, int arg1) throws SQLException { return arg0.getString(arg1); } @Override public void setNonNullParameter(PreparedStatement arg0, int arg1, String arg2, JdbcType arg3) throws SQLException { arg0.setString(arg1, arg2); } }
如果是单独使用mybatis,在配置文件里加入
<typeHandlers> <typeHandler handler="your.package.TimeTypeHandler"/> </typeHandlers>
如果是和spring集成
先创建一个自定义转换器的bean
<bean id="typeHandler" class="yourpackage.TimeTypeHandler" />
然后在注入
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath*:mybatis/xxx/*Mapper.xml"/>
<property name="typeHandlers" ref="typeHandler"/>
</bean>
但是,由于java中的时间格式实在太恶心了。所以想把Date类型全部转换为LocatDate,LocalTime,LocalDateTime。对于LocalDateTime类型的数据,同样需要专门的转换器来处理。你当然可以自己实现一个。不过mybatis官方已经实现了。通过maven的方式引进项目中
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.0</version> </dependency>
如果mybatis是3.4以上的版本,就可以直接使用了。如果是3.4以下的版本,那么还需要参照刚才上面的做法,将转换器注入mybatis中。
得到转换器的bean
<bean id="typeHandler" class="org.apache.ibatis.type.LocalDateTimeTypeHandler" />
然后注入
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath*:mybatis/xxx/*Mapper.xml"/>
<property name="typeHandlers" ref="typeHandler"/>
</bean>
苍茫之天涯,乃吾辈之所爱也;浩瀚之程序,亦吾之所爱也,然则何时而爱耶?必曰:先天下之忧而忧,后天下之爱而爱也!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述