本文转换类型为第三方工具类Hutool,工具类中DateTime,将数据库冲datatime转成成Hutool中的DateTime
目录
实现自定义类型转换器大致需要4个步骤
1.定义TypleHandler 类,继承BaseTypeHandler
2.实现BaseTypeHandler类的4个方法,第一个方法表示java类型转换成数据库类型,2-4表示数据库类型转换成java类型(ps:从resultSet中获取对应列中的字段,再String类型转换成对应数据类型)
3.指定类型换换气作用类型@MappedType(java中的类) @MapperJdbcTypes(jdbc中的类型)
4.再mybatis配置文件中注册<typeHandler>
具体实现
@Data
public class MyData{
private DateTime dateTime=new DateTime();
public MyData(String dateTime) {
this.dateTime = new DateTime(dateTime);
}
@Override
public String toString() {
String dt = dateTime.toString();
return dt ;
}
}
步骤2-3
@MappedTypes({MyData.class}) //指定java中的类型
@MappedJdbcTypes({JdbcType.DATETIMEOFFSET}) //指定数据库中的数据类型
public class MyDateTypeHandler extends BaseTypeHandler<MyData> {
/*
当存储数据得说后转换成数据库数据,进行占位符好设置
preparedStatement 预编译statement
i表示占位符
e表示java数据类型
jdbcType表示数据库类型
*/
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, MyData myData, JdbcType jdbcType) throws SQLException {
preparedStatement.setObject(i, myData.toString());
}
/*
读取数据库值的时候,对应数据库的数据转换成java数据
rs 结果集
s 列明
*/
@Override
public MyData getNullableResult(ResultSet resultSet, String s) throws SQLException {
String md = resultSet.getString(s);
return new MyData(md);
}
@Override
public MyData getNullableResult(ResultSet resultSet, int i) throws SQLException {
return new MyData(resultSet.getString(i));
}
@Override
public MyData getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
return new MyData(callableStatement.getString(i));
}
}
步骤4
<typeHandlers>
<!-- <typeHandler handler="com.llkj.TypeHandler.MyDateTypeHandler"/>-->
<package name="com.llkj.TypeHandler"/>
</typeHandlers>