MyBatis的关联映射(多对一,多对多)

本文详细介绍了在MyBatis中如何进行多对一和多对多的关联映射。从环境配置开始,分别展示了在嵌套查询和嵌套结果方式下,如何在OrdersMapper、UsersMapper、ProductMapper及其对应的XML文件中添加代码,以及编写OrderTest进行测试验证,最后得出查询结果。
摘要由CSDN通过智能技术生成

多对一查询

3.1 环境配置

Orders.java添加属性User

package com.biem.pojo;

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Orders {
   
    private Integer id;
    private String number;
    private Integer userId;
    private Users users;
}

3.2 解决方案

3.2.1 嵌套查询方式

3.2.1.1 UsersMapper.java 添加

public Users getUsersById(Integer id);

3.2.1.2 OrdersMapper.java 添加

public List<Orders> getOrders1(Integer userId);

3.2.1.3 UsersMappers.xml

    <select id="getUsersById" resultType="users">
        select * from tb_user where `id` = #{
   id}
    </select>

3.2.1.4 OrdersMapper.xml

    <select id="getOrders1" resultMap="ordersResult1">
        select * from tb_orders where user_id = #{
   userId}
    </select>
    <resultMap id="ordersResult1" type="orders">
        <result column="id" property="id"/>
        <result column="number" property="number"/>
        <!--复杂的属性,我们需要单独处理
            对象:使用association
            集合:collection-->
        <association column="id" property="users" javaType="users" select="com.biem.mapper.UsersMapper.getUsersById"/>
    </resultMap>

3.2.1.5 OrdersTest.java

package com.biem.test;

import com.biem.mapper.OrdersMapper;
import com.biem.pojo.Orders;
import com.biem.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;


public class OrdersTest {
   

    @Test
    public void testGetOrders1(){
   
        SqlSession session = MyBatisUtil.openSession();
        OrdersMapper mapper = session.getMapper(OrdersMapper.class);
        List<Orders> ordersList = mapper.getOrders1(1);
        System.out.println("ordersList = " + ordersList);
    }
}

3.2.1.6 测试结果

"C:\Program Files (x86)\Java\jdk1.8.0_201\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\ssm\ideal\IntelliJ IDEA Community Edition 2022.3.2\lib\idea_rt.jar=55796:D:\ssm\ideal\IntelliJ IDEA Community Edition 2022.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\ssm\ideal\IntelliJ IDEA Community Edition 2022.3.2\lib\idea_rt.jar;D:\ssm\ideal\IntelliJ IDEA Community Edition 2022.3.2\plugins\junit\lib\junit5-rt.jar;D:\ssm\ideal\IntelliJ IDEA Community Edition 2022.3.2\plugins\junit\lib\junit-rt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\ssm\ideal\mybatis_3\M2O\target\test-classes;D:\ssm\ideal\mybatis_3\M2O\target\classes;C:\Users\86185\.m2\repository\org\mybatis\mybatis\3.4.6\mybatis-3.4.6.jar;C:\Users\86185\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\86185\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\86185\.m2\repository\mysql\mysql-connector-java\8.0.18\mysql-connector-java-8.0.18.jar;C:\Users\86185\.m2\repository\com\google\protobuf\protobuf-java\3.6.1\protobuf-java-3.6.1.jar;C:\Users\86185\.m2\repository\log4j\log4j\1.2.12\log4j-1.2.12.jar;C:\Users\86185\.m2\repository\org\projectlombok\lombok\1.18.18\lombok-1.18.18.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.biem.test.OrdersTest,testGetOrders1
DEBUG 05-15 15:34:06,263 ==>  Preparing: select * from tb_orders where user_id = ?  (BaseJdbcLogger.java:159) 
DEBUG 05-15 15:34:06,287 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:159) 
DEBUG 05-15 15:34:06,302 ====>  Preparing: select * from tb_user where `id` = ?  (BaseJdbcLogger.java:159) 
DEBUG 05-15 15:34:06,303 ====> Parameters: 1(Integer) (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值