mybatis 自定义typehandler,转换特定字段
自定义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),"*");
}
}
使用:
在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。不推荐。
暂时只想到这三种方法。
还没有评论,来说两句吧...