MyBatis的ORM映射

本文介绍了如何在MyBatis中处理对象关系映射(ORM)时,当属性名与数据库列名不一致的情况。方法包括使用列别名和创建自定义ResultMap进行结果映射。作者提供了示例代码以展示这两种解决方案的应用。
摘要由CSDN通过智能技术生成

1. 什么是ORM映射

ORM(Object Relational Mapping)对象关系映射,解决面向对象与关系数据库存在的互不匹配的现象的技术,将程序中的对象自动持久化到关系数据库中。MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时无法自动ORM,如下图:

2.解决属性与列名不一致

2.1 列起别名

在SQL中使用 as 为查询字段添加列别名,以匹配属性名:

public List<Role> findAll();
<select id="findAll" resultType="com.by.pojo.Role" >
        select id, role_name as roleName, role_desc as roleDesc from role
    </select>
@Test
    public void testFindAll(){
        RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
        List<Role> roleList = roleMapper.findAll();
        for (Role role : roleList) {
            System.out.println(role);
        }
    }

思考 如果我们的查询很多,都使用别名的话写起来岂不是很麻烦,有没有别的解决办法呢?

2.2 结果映射

使用ResultMap标签手动映射,解决实体字段和数据表字段不一致的问题。

List<Role> findAll2();
<!--
        结果映射
            id="findAll2ResultMap" :resultMap标签的id,,必须唯一
            type="com.by.pojo.Role":等价于resultType
    -->
    <resultMap id="findAll2ResultMap" type="com.by.pojo.Role">
        <!--主键字段和属性的映射关系-->
        <id column="id" property="id"></id>
        <!--非主键字段和属性的映射关系-->
        <result column="role_name" property="roleName"></result>
        <result column="role_desc" property="roleDesc"></result>
    </resultMap>
    <!--
        resultMap:resultMap标签的id
    -->
    <select id="findAll2" resultMap="findAll2ResultMap">
        select * from role
    </select>
@Test
    public void testFindAll2(){
        RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
        List<Role> roleList = roleMapper.findAll2();
        for (Role role : roleList) {
            System.out.println(role);
        }
    }

以上为属性与列名的不一致时具体解决办法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值