mybatis 自定义typehandler,转换特定字段

逃离我推掉我的手 2022-06-13 10:27 368阅读 0赞

自定义typehandler心得。
这里采用extends BaseTypeHandler 的方法自定义(也可以实现TypeHandler接口)。

  1. package com.burt.dal.typehandler;
  2. import java.sql.CallableStatement;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import org.apache.ibatis.type.BaseTypeHandler;
  7. import org.apache.ibatis.type.JdbcType;
  8. import org.apache.ibatis.type.MappedJdbcTypes;
  9. //@MappedJdbcTypes(JdbcType.VARCHAR)
  10. public class TestTypeHandler extends BaseTypeHandler<String>{
  11. public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
  12. }
  13. public String getNullableResult(ResultSet resultSet, String s) throws SQLException {
  14. String name = resultSet.getString(s);
  15. return name.replace(name.substring(1,2),"*");
  16. }
  17. public String getNullableResult(ResultSet resultSet, int i) throws SQLException {
  18. String name = resultSet.getString(i);
  19. return name.replace(name.substring(1,2),"*");
  20. }
  21. public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
  22. String name = callableStatement.getString(i);
  23. return name.replace(name.substring(1,2),"*");
  24. }
  25. }

使用:
使用

在mybatis-config.xml中或者mybatis的javaconfig配置中添加自定义的typehandler
在javaconfig中配置如下:
配置

如是是按以上方式(自定义typehandler中不注释@MappedJdbcTypes(JdbcType.VARCHAR)),因为typehandler是责任链模式,所以会覆盖所有的符合类型(如上例中的JdbcType.VARCHAR)。

重点:
如果要指定某些字段而不是所有符合类型的字段使用自定义的typehandler的话,可以这么干:
第一种方法:自定义的typehandler不设置@MappedJdbcTypes注解,使用都是如上图中的xml中使用方法。
第二种方法:可设置@MappedJdbcTypes注解,但是不在mybatis-config.xml中或者mybatis的javaconfig配置中添加自定义typehandler。
第三种方法:去掉如column=”mobile”的jdbcType。不推荐。

暂时只想到这三种方法。

发表评论

表情:
评论列表 (有 0 条评论,368人围观)

还没有评论,来说两句吧...

相关阅读

    相关 定义TypeHandler

    在大部分的场景下,MyBatis 的 typeHandler 就能应付一般的场景,但是有时候不够用。比如使用枚举的时候,枚举有特殊的转化规则,这个时候需要自定义 typeHan