mybatis 自定义typehandler,转换特定字段 逃离我推掉我的手 2022-06-13 10:27 238阅读 0赞 自定义typehandler心得。 这里采用extends BaseTypeHandler 的方法自定义(也可以实现TypeHandler接口)。 package com.burt.dal.typehandler; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; //@MappedJdbcTypes(JdbcType.VARCHAR) public class TestTypeHandler extends BaseTypeHandler<String>{ public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException { } public String getNullableResult(ResultSet resultSet, String s) throws SQLException { String name = resultSet.getString(s); return name.replace(name.substring(1,2),"*"); } public String getNullableResult(ResultSet resultSet, int i) throws SQLException { String name = resultSet.getString(i); return name.replace(name.substring(1,2),"*"); } public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException { String name = callableStatement.getString(i); return name.replace(name.substring(1,2),"*"); } } 使用: ![使用][SouthEast] 在mybatis-config.xml中或者mybatis的javaconfig配置中添加自定义的typehandler 在javaconfig中配置如下: ![配置][SouthEast 1] 如是是按以上方式(自定义typehandler中不注释@MappedJdbcTypes(JdbcType.VARCHAR)),因为typehandler是责任链模式,所以会覆盖所有的符合类型(如上例中的JdbcType.VARCHAR)。 **重点:** 如果要指定某些字段而不是所有符合类型的字段使用自定义的typehandler的话,可以这么干: 第一种方法:自定义的typehandler不设置@MappedJdbcTypes注解,使用都是如上图中的xml中使用方法。 第二种方法:可设置@MappedJdbcTypes注解,但是不在mybatis-config.xml中或者mybatis的javaconfig配置中添加自定义typehandler。 第三种方法:去掉如column=”mobile”的jdbcType。不推荐。 暂时只想到这三种方法。 [SouthEast]: /images/20220613/6b180f65b91f45b4abbb9e3cbfd97831.png [SouthEast 1]: /images/20220613/a5e737b27ec44bc88d4c044e892f8a13.png
还没有评论,来说两句吧...