您的位置:首页 > 其它

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

2017-07-05 08:55 483 查看
自定义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。不推荐。

暂时只想到这三种方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis