Mybatis自定义类型转换器(TypeHander)

Mybatis自定义类型转换器

使用场景:

当我们实体类数据格式与数据库中格式不一致时,可以通过自定义类型转换器方式去转换我们想要的数据格式。

使用方法

1.实现TypeHander接口

    public class FlagEnumHandler implements TypeHandler {

        /**
         * 根据方法名称可知,这个方法是在insert、update中使用的,用来将实体类的参数转化为数据库类型的参数
         *
         * @param ps        jdbc中要执行的statement
         * @param i         statement的第i个参数
         * @param parameter 参数对象
         * @param jdbcType  jdbc允许的对象类型
         * @throws SQLException
         */
        @Override
        public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
            if (parameter == null) {
                ps.setInt(i, 0);
                return;
            }
    
            FlagEnum flag = (FlagEnum) parameter;
            if (flag.isFlag()) {
                ps.setInt(i, 1);
            } else {
                ps.setInt(i, 0);
            }
        }
    
    
        /**
         * 用于将查询结果进行转换
         *
         * @param rs         jdbc执行后的结果集
         * @param columnName 列名称
         * @return
         * @throws SQLException
         */
        @Override
        public Object getResult(ResultSet rs, String columnName) throws SQLException {
            int flag = rs.getInt(columnName);
            Boolean flagBoolean = Boolean.FALSE;
            if (flag == 1) {
                flagBoolean = Boolean.TRUE;
            }
    
            return FlagEnum.getValue(flagBoolean);
        }
    
        @Override
        public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
            return null;
        }
    
        @Override
        public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
            return null;
        }
    }
    
2.在mybatis配置文件或者mapper中配置typeHandler
    (1)mybatis配置文件中配置typeHandler属于全局变量,只要符合条件的全部处理。
        
            
        
        注:这里的jdbcType就是setParameter方法中的第四个参数。
    
    (2)mapper中配置typeHandler中属于局部变量,只适配当前指定的变量值。
        查询语句:
        
            
            
            
        
        插入语句:
        
            insert into user_info (userId,userName,flag) values (#{userId},#{userName},#{flag,typeHandler=com.study.mybatis.utils.FlagEnumHandler})
        

你可能感兴趣的:(Mybaits)