首页 > 其他分享 >Mybatis——一对多关联映射

Mybatis——一对多关联映射

时间:2024-04-03 14:32:53浏览次数:18  
标签:映射 private 关联 嵌套 user Mybatis 查询 id

一对多关联映射

一对多关联映射有两种方式,都用到了collection元素

以购物网站中用户和订单之间的一对多关系为例

collection集合的嵌套结果映射

创建两个实体类和映射接口

package org.example.demo;

import lombok.Data;

import java.util.List;

@Data
public class User {
    private Integer userId;
    private String userName;
    private String password;
    private Cart cart;
    private List<Order> orderList;
}
package org.example.demo;

import lombok.Data;

@Data
public class Order {
    private Integer orderId;
    private double price;
}

实现根据用户id查询出所有用户信息,包括该用户的所有订单信息 

package org.example.mapper;

import org.example.demo.User;

import java.util.List;

public interface UserMapper {

    User findUserAndOrderListByUserId(Integer userId);
}
方式一:与association类似,集合的嵌套结果映射就是指通过一次SQL查询得到所有的结果 
<resultMap type="com.mybatis.entity.User" 
        id="userMap">
        <id property="id" column="id"/>
    <result property="userName" column="user_name"/>
    <result property="password" column="password"/>
</resultMap>
<resultMap type="com.mybatis.entity.User" 
    id="userAndOrderListMap" extends="userMap">
    <collection property="orderList" 
        ofType="com.mybatis.entity.Order">
        <id property="id" column="order_id"/>
        <result property="price" column="price"/>
    </collection>
</resultMap>
<select id="findUserAndOrderListById" 
    resultMap="userAndOrderListMap">
    select u.id, u.user_name, u.password,
    o.order_id, o.price
    from user u
    left join orders o on u.id = o.user_id
    where u.id = #{id}
</select>

resultMap元素中的extends属性可以实现结果映射的继承

collection的ofType属性指定集合中元素的类型,必选项 

    <resultMap id="userAndOrderMap" type="org.example.demo.User">
        <id property="userId" column="user_id"/>
        <result property="userName" column="user_name"/>
        <result property="password" column="password"/>
        <collection property="orderList" ofType="org.example.demo.Order">
            <id property="orderId" column="order_id"/>
            <result property="price" column="price"/>
        </collection>
    </resultMap>
    <select id="findUserAndOrderListByUserId" resultMap="userAndOrderMap">
        select
            *
        from t_user u
        left join t_order o on u.user_id = o.user_id
        where u.user_id = #{userId};
    </select>

 

collection集合的嵌套查询

集合的嵌套查询同样会执行额外的SQL查询

<resultMap type="com.mybatis.entity.User"
    id="userAndOrderListMap" extends="userMap">
    <collection property="orderList" column="{uid=id}"
        ofType="com.mybatis.entity.Order"       select="com.mybatis.mapper.OrderMapper.findOrdersByUserId">
    </collection>
</resultMap>
<select id="findUserAndOrderListById" 
    resultMap="userAndOrderListMap">
    select * from user where id = #{id}
</select>

OrderMapper.xml

<resultMap type="com.mybatis.entity.Order"
    id="orderMap">
    <id property="id" column="order_id"/>
    <result property="price" column="price"/>
</resultMap>
<select id="findOrdersByUserId"
    resultMap="orderMap">
    select * from orders where user_id = #{uid}
</select>

对比两种方式

第一种方式属于“关联的嵌套结果映射“,即通过一次SQL查询根据表或指定的属性映射到不同的对象中

第二种方式属于“关联的嵌套查询”,利用简单的SQL语句,通过多次查询得到想要的结果,也可以实现延迟加载效果 

 

 

标签:映射,private,关联,嵌套,user,Mybatis,查询,id
From: https://blog.csdn.net/LIUCHANGSHUO/article/details/137266856

相关文章

  • 【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)
    [蓝桥杯2019国AC]轨道炮题目描述小明在玩一款战争游戏。地图上一共有NNN个敌方单位,可以看作2D平面上的点。其中第i......
  • 【洛谷 P8672】[蓝桥杯 2018 国 C] 交换次数 题解(字符串+映射+全排列)
    [蓝桥杯2018国C]交换次数题目描述IT产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称BAT)在某海滩进行招聘活动。招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:ABABTATT,这使得应聘者十分别扭。于是,管理部门要求招聘方进行必要的......
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
    [蓝桥杯2019国B]解谜游戏题目背景题目描述小明正在玩一款解谜游戏。谜题由242424根塑料棒组成,其中黄色塑料棒4......
  • 【附源码】计算机毕业设计影评网站系统(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义影评网站系统是一个专注于电影评论和评分的在线平台,旨在为观众提供一个交流观影体验、分享观点和发现新片的社区。随着电影产业的蓬勃发展,人们对于电影的需求和品......
  • 【附源码】计算机毕业设计智慧外贸平台(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义智慧外贸平台是一种基于互联网技术的智能化外贸服务平台,旨在帮助外贸企业提高业务效率、降低成本、提升竞争力。随着全球化的不断深入和国际贸易竞争的加剧,传统的......
  • springboot之MybatisPlus
    文章目录一、ORM二、mybatis实际操作三、mybatis-plus一、ORM简单来说ORM就是一个能够帮我们把java中Bean类映射到数据库中。使用mybatis-plus。配置架包<!--MyBatisPlus依赖--><dependency><groupId>com.baomidou</groupId>......
  • 0基础学习Mybatis系列数据库操作框架——增删改操作
    大纲新增Mapper配置代码Mapper接口文件应用删除简单方案Mapper配置代码高级方案Mapper配置代码Mapper接口文件应用完整代码修改Mapper配置代码Mapper接口文件应用在《0基础学习Mybatis系列数据库操作框架——目录结构》一文中,我们已经搭建了查询操作的框架。......
  • Mybatis流程分享-II 配置处理,构建environment 信息
    序言通过章节一的讨论,我们知道Mybatis内部对于xml的解析过程具体如下:可以看到,在配置文件的解析过程中其会首先调用SqlSessionFactortyBuilder中的build方法,接着再调用XMLConfigBuilder的parse()方法,并最终返回一个Configuraion对象。进一步,又会调用SqlSessionFactortyBuilde......
  • mybatis-plus使用枚举
    定义枚举类@GetterpublicenumSexEnum{MALE(1,"男"),FEMALE(2,"女");@EnumValue//表示会把这个值存入数据库privateintindex;@JsonValue//json序列化时使用这个属性privateStringname;SexEnum(inti,Stringname){this.in......
  • Mybatis 中 javaType 和 jdbcType 对应关系
      JDBCType             JavaType     CHAR                  String  VARCHAR              String  LONGVARCHAR                Str......