MyBatis学习笔记(四)。ResultMap结果集映射。


官方文档:

https://mybatis.net.cn/getting-started.html

1. ResultMap结果集映射

我们之前的实体类UserMapper中属性的名字和数据库字段名是一致的,所以不需要映射,但是当我们实体类中属性名字和数据库中字段不一致的时候,就需要用到ResultMap结果集映射。

1.1 不一致时出现的问题

数据库字段名为id,name,pwd,我现在在实体类中将pwd写成了password,看看会出现什么情况。

User.java,这里省略get和set方法,以及构造器,自行补充完整。

public class User {
    private int id;
    private String name;
    private String password;
}

UserMapper.xml为:

<select id="getUserById" parameterType="int" resultType="user">
    select * from user where id = #{id}
</select>

通过id查询用户的时候返回值为:

User{id=4, name='李五', password='null'}

发现password返回值为null。

1.2 解决方式一(不推荐)

改造UserMapper.xml

<select id="getUserById" parameterType="int" resultType="user">
    select id,name,pwd as password from user where id = #{id}
</select>

这里使用起别名的方式将pwd转为了password。这样问题即可解决。

1.3 解决方式二(ResultMap结果集映射)

梳理:
数据库中的字段名:id,name,pwd
实体类中的属性名:id,name,password

发现pwd和password不一致,那么我们将pwd映射成password就好了。

修改我们的UserMapper.xml。

<resultMap id="userMap" type="user">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="pwd" property="password"/>
</resultMap>
<select id="getUserById" parameterType="int" resultMap="userMap">
    select * from user where id = #{id}
</select>

说明:column对应数据库中的列。property对应实体类中的属性名。

我们之前用的是resultType,返回值是一个类型,这里用的是resultMap,结果集映射。问题也能解决。

重点:这里的id和name本身和数据库一致,其实并不需要映射,我们只需要映射不一致的pwd即可。

最终UserMapper.xml如下:

<?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.xxc.dao.UserMapper">
    <resultMap id="userMap" type="user">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>
    <select id="getUserById" parameterType="int" resultMap="userMap">
        select * from user where id = #{id}
    </select>
</mapper>

在这里插入图片描述

2. ResultMap高级结果集映射

ResultMap高级结果集映射通常用于一对多和多对一的场景中。参照我写的这一片文章。
https://blog.csdn.net/weixin_45842494/article/details/122764536

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

傻啦猫@_@

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

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

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

打赏作者

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

抵扣说明:

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

余额充值