MyBatis 中 resultMap 的使用。

MyBatis 中 resultMap 的使用。



问题引入。

MyBatis 是半自动的 orm 框架,底层实现了将数据库的记录自动封装为 JavaBean。
但前提条件是 JavaBean 的属性名和数据库表的列名完全一致。
eg.

表的列名

在这里插入图片描述

public class User implements Serializable {

    private Integer id;
    private String username;
    private String address;
    private String sex;
    private Date birthday;

但如果,JavaBean 的属性名不一致,

public class User implements Serializable {

    private Integer userId;
    private String userName;
    private String userAddress;
    private String userSex;
    private Date userBirthday;

查询的结果封装到 JavaBean 就是 null。(无法成功封装)。

User{userId=null, userName='geek', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='geek_insert_test', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='update_test', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='geek_insert_test', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='李逸凡', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='李逸凡 geek', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='last_insert_id()_test', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='last_insert_id()_test', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='SELECT LAST_INSERT_ID()', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='resultMapTest', userAddress='null', userSex='null', userBirthday=null}
User{userId=null, userName='resultMapTest', userAddress='null', userSex='null', userBirthday=null}

这里如果不修改 JavaBean 属性名,并且也不修改数据库表列名。
(如果修改 JavaBean 属性名,代码将 …)

有两种解决办法。

  • Sql 语句查询结果使用别名 as
此方法效率高,因为是在 SQL 语句层面上解决问题。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.geek.dao.IUserDao"><!-- 接口全限定名。-->

    <!-- 配置查询所有。-->
    <select id="findAll" resultType="com.geek.domain.User">
--         select * from users;

        select id as userId, username as userName, birthday as userAddress, sex as userSex, address as userAdress
        from users;

    </select>
    
</mapper>
  • 使用 MyBatis 的 resultMap

先定义对应关系 mapper。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.geek.dao.IUserDao"><!-- 接口全限定名。-->

    <!-- 配置查询结果的列名和实体类属性名的对应关系。-->
    <resultMap id="userMap" type="com.geek.domain.User">
        <!-- 主键字段的对应。-->
        <id property="userId" column="id"/>
        <!-- 非主键字段的对应。-->
        <result property="userName" column="username"/>
        <result property="userAddress" column="userAddress"/>
        <result property="userSex" column="userSex"/>
        <result property="userBirthday" column="userBirthday"/>
    </resultMap>

property=“” ——> 对应 JavaBean 的属性。
Column=“” ——> 对应数据库表的列名。

使用该 mapper。
// 在 SQL 语句执行完成后,使用 userMap 进行封装。

因为要多解析一段 xml,执行效率不如前者。
但开发效率高了(<mapper></mapper> 中所有的 <select> 都可以指定 resultMap)。
    <!-- 配置查询所有。(使用 map。)-->
    <select id="findAll" resultMap="userMap">
        select * from users;
    </select>

再次运行,即使 JavaBean 的属性名和数据库表的列名不一致,MyBatis 也能成功封装。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyfGeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值