myBatis框架中resultMap的简单使用

发布时间:2024年01月17日

? ? ?MyBatis中的ResultMap是用来映射SQL查询结果集和Java对象之间关系的配置。通过ResultMap,我们可以定义如何将查询结果中的列映射到Java对象的属性上。

ResultMap包含了多个ResultMapping,每个ResultMapping定义了一个列与属性之间的映射关系。我们可以指定列名、属性名、Java类型等信息来完成映射。

使用ResultMap的好处是可以更灵活地处理复杂的查询结果集,包括一对一、一对多、多对一等关联关系。通过ResultMap,我们可以将多个查询结果合并到一个对象中,或者将查询结果分散到多个对象中。

在MyBatis中,我们可以通过XML配置文件或注解来定义ResultMap。

<?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="www.com.baidu.mapper.StuMapper">
    
    <resultMap id="stuMap" type="www.com.baidu.pojo.Stu" autoMapping="true">
        <collection property="motions" ofType="www.com.baidu.pojo.Motion" autoMapping="true" select="getStuMotion" column="sid">
        </collection>
    </resultMap>

    <select id="getStuMotion" resultType="www.com.baidu.pojo.Motion">
        select m.* from record r,motion m where r.mid=m.mid and r.sid= #{sid}
    </select>
    
    <select id="list" resultMap="stuMap" >
        select * from stu
    </select>

</mapper>
    

? ?以上代码是一个 MyBatis 的复杂查询示例,主要涉及到了 ResultMap 中的 collection 和 select 标签。

? ? ?首先,我们定义了一个名为 "stuMap" 的 ResultMap,它的类型是 Stu 类。在 "stuMap" 中,我们使用了 collection 标签来处理一对多关系。具体来说,我们将 Motion 对象集合映射到了 Stu 对象中的 motions 属性上。collection 标签需要设置 property 属性来指定 Java 对象中的属性名称,ofType 属性来指定集合元素的类型。

? ? ? ? 在 collection 标签内部,我们使用了 select 标签来指定获取 Motion 对象集合的 SQL 语句。select 标签需要设置 id 属性来指定 SQL 语句的唯一标识,resultType 属性来指定 SQL 查询结果的返回类型。

? ? ? ?在这个示例中,我们通过查询 record 表和 motion 表,获取了与指定学生 sid 相关的运动信息集合。最后,我们通过 list 标签指定查询 stu 表的 SQL 语句,并将查询结果映射到 "stuMap" ResultMap 中。

? ? 此外,在 "stuMap" 中,我们使用了 autoMapping 属性来开启自动映射功能。当 autoMapping 属性设置为 true 时,MyBatis 会自动将列名和属性名相同的列映射到 Java 对象对应的属性上。

? ? ?总之,以上代码展示了如何使用 ResultMap 处理一对多关系,并通过 select 标签设置 SQL 查询语句来获取关联数据。同时,我们还介绍了 autoMapping 属性的使用方法。

主要是需要理解它的执行顺序?

? ?当后端调用 StuMapper接口类的list方法后 他就会

public interface StuMapper {
    List<Stu> list();
}
  1. 执行list方法,该方法会返回一个由Movie对象组成的列表。根据resultMap="movieMap",MyBatis会将查询结果映射为Movie对象。
  2. 对于每个Movie对象,MyBatis会执行<association>标签中的SQL语句,也就是select="getPerformerList"所指定的getPerformerList方法,并传入column="number"所指定的参数值(即当前Movie对象的number属性值)。该方法会返回一个由Performer对象组成的列表。
  3. MyBatis会将Performer列表映射为List<Performer>类型,然后将此列表设置为当前Movie对象的performers属性值。

? ? ?简单来讲:先执行list方法,然后因为返回的是resultMap="stuMap" 然后他就会去resultMap找"stuMap",然后执行里面的命令,命令里面有select="getStuMotion" column="sid"> 他就去查找select方法id为getStuMotion的方法,然后传参为sid字段

这样,最终的结果就是一个由Movie对象组成的列表,每个Movie对象中都包含一个List<Performer>类型的performers属性。而这些Performer对象则是通过执行getPerformerList方法获取并映射得到的。

文章来源:https://blog.csdn.net/m0_56353506/article/details/135653680
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。