Mybatis自定义全局TypeHander
时间: 2024-01-10 15:03:06 浏览: 65
MyBatis 添加元数据自定义元素标签的实现代码
Mybatis中的TypeHandler可以用于将Java对象与数据库中的数据类型进行转换。如果Mybatis自带的TypeHandler不能满足我们的需求,我们可以自定义TypeHandler。
自定义TypeHandler需要继承BaseTypeHandler类,并实现其中的setNonNullParameter和getNullableResult方法。其中setNonNullParameter方法用于将Java对象转换成对应的数据库类型,getNullableResult方法用于将数据库类型转换成Java对象。
下面是一个例子,演示如何自定义一个TypeHandler,将Java中的LocalDateTime类型转换成数据库中的Timestamp类型:
```java
public class LocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType) throws SQLException {
ps.setTimestamp(i, Timestamp.valueOf(parameter));
}
@Override
public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
Timestamp timestamp = rs.getTimestamp(columnName);
if (timestamp != null) {
return timestamp.toLocalDateTime();
}
return null;
}
@Override
public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
Timestamp timestamp = rs.getTimestamp(columnIndex);
if (timestamp != null) {
return timestamp.toLocalDateTime();
}
return null;
}
@Override
public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
Timestamp timestamp = cs.getTimestamp(columnIndex);
if (timestamp != null) {
return timestamp.toLocalDateTime();
}
return null;
}
}
```
在Mybatis的配置文件中,我们需要将自定义的TypeHandler注册到TypeHandlerRegistry中,如下所示:
```xml
<typeHandlers>
<typeHandler handler="com.example.LocalDateTimeTypeHandler"/>
</typeHandlers>
```
注册后,我们就可以在Mapper文件中使用该TypeHandler了:
```xml
<resultMap id="resultMap" type="com.example.User">
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" typeHandler="com.example.LocalDateTimeTypeHandler"/>
</resultMap>
```
阅读全文