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。不推荐。

暂时只想到这三种方法。

猜你喜欢

转载自blog.csdn.net/lw296196709/article/details/74370355