无论是mybati是向数据库中存储数据还是将数据读取出来都需要涉及类型转换器。
Mybatis再带的类型转换器:【部分】
自定义类型处理器
你可以重写类型处理器或者是新建类型转换器,处理不支持或非标准的类型,具体的实现方法是:
实现TypeHandler接口,或者是继承BaseTypeHandler,然后我们可以有选择的将它映射到JDBC的类型。
代码:
自定义转换器:
继承BaseTypeHandler类
public class DateHandler extends BaseTypeHandler<Date> {
//将Java类型转成数据库需要的类型
//PreparedStatement属性是指预编译
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
//根据Date数据类型的数据转换成时间毫秒值
long time = date.getTime();
//i表示 在Java代码中传入sql语句的参数中的第几个 time 表示转换后的类型
//java.lang.reflect.Field的setLong()方法用于将字段的值设置为指定对象上的long。当您需要设置对象字段的值时,可以使用此方法在对象上设置值。
preparedStatement.setLong(i,time);
}
//将数据中的类型转换成Java类型
//string 参数 表示数据库中要转换的字段名称
//ResultSet 参数表示查询出的结果集
@Override
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
long aLong = resultSet.getLong(s);
Date date = new Date(aLong);
return date;
}
//将数据中的类型转换成Java类型
@Override
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
long aLong = resultSet.getLong(i);
Date date = new Date(aLong);
return date;
}
//将数据中的类型转换成Java类型
@Override
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long aLong = callableStatement.getLong(i);
Date date = new Date(aLong);
return date;
}
在主配置文件中进行注册类型处理器:
<typeHandlers>
<typeHandler handler="com.itheima.zhujie.handler.DateHandler"></typeHandler>
</typeHandlers>