mybatis自定义类型转换器实现实体类属性和数据列之间的复杂映射关系

本文介绍如何在MyBatis中实现JSON数据类型的映射,包括自定义类型处理器的具体实现和配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis实现数据类和实体类属性之间的映射的关系方法

1.最简单的是可以通过查询的时候另取别名跟java实体类的字段一样,这样就可以实现数据映射,

2.通过resultmap设定数据库和实体类之间的映射关系

3.如果属性的命名是遵从驼峰命名法的,数据列名遵从下划线命名,则可以通过mybatis内置的映射方式实现,配置如下:

<configuration>  
     <settings>  
          <setting name="mapUnderscoreToCamelCase" value="true" />  
     </settings>  

</configuration>

以上映射的规则都是基于基本的数据类型之间的转换,但是,假如业务需求,导致实体类有一个jsonObject的数据类型需要存到数据库的库表当中,这时候就没法实现映射了,因为mybatis内置的数据映射类型不支持jsonObject这种复杂的非常规的数据类型,怎么办呢?

这是就需要自定义实体类属性和数据列之间的数据类型转换器了;

mybatis提供了自定义类型转换器的支持,因此我们可以自定义自己的类型转化器,继承baseTypeHandler,其中泛型对象为要转换的数据类型对象,如下:

public class JsonObjectTypeHandler extends BaseTypeHandler<JSONObject> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, JSONObject parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i,JSONObject.toJSONString(parameter));
    }

    @Override
    public JSONObject getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String str = rs.getString(columnName);
        if (StringUtils.isBlank(str)) return null;
        return JSONObject.parseObject(str);
    }

    @Override
    public JSONObject getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String str = rs.getString(columnIndex);
        if (StringUtils.isBlank(str)) return null;
        return JSONObject.parseObject(str);
    }

    @Override
    public JSONObject getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String str = cs.getString(columnIndex);
        if (StringUtils.isBlank(str)) return null;
        return JSONObject.parseObject(str);
    }
}

实现4个抽象方法,四个方法的作用就是数据库和实体类属性之间的转换格式;get的方法是将数据库的值转换成java的jsonObject格式,set的方法作用相反;

然后还要在mybatis的配置文件mybatis-config增加该转换器的定义,如下:

<typeHandlers>
    <typeHandler handler="priv.llf.mybatis.typeHandler.JsonObjectTypeHandler" javaType="com.alibaba.fastjson.JSONObject"/>
</typeHandlers>

然后就可以启动项目进行测试验证了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值