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属于全局变量,只要符合条件的全部处理。
        <typeHandlers>
            <typeHandler handler="com.study.mybatis.utils.FlagEnumHandler" javaType="com.study.mybatis.utils.FlagEnum" jdbcType="INTEGER"></typeHandler>
        </typeHandlers>
        注:这里的jdbcType就是setParameter方法中的第四个参数。
    
    (2)mapper中配置typeHandler中属于局部变量,只适配当前指定的变量值。
        查询语句:
        <resultMap id="getUserInfoResultMap" type="com.study.mybatis.User">
            <result property="userId" column="UserId"></result>
            <result property="userName" column="UserName"></result>
            <result property="flag" column="Flag" typeHandler="com.study.mybatis.utils.FlagEnumHandler"></result>
        </resultMap>
        插入语句:
        <insert id="insertUserInfo" parameterType="com.study.mybatis.User">
            insert into user_info (userId,userName,flag) values (#{userId},#{userName},#{flag,typeHandler=com.study.mybatis.utils.FlagEnumHandler})
        </insert>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值