• Mybatis的多表操作之一对一/多查询


    目录

     Mybatis的多表操作

    1、一对一查询

    数据库中

    mapper包下orderMapper类下

    pojo包下的order类下

    pojo下user类下

    OrderMapper.xml下

     MybatisTest测试代码下

    运行结果

     OrderMap.xml中也可使用

    2、一对多查询

     UserMapper接口下

    UserMapper.xml下

    Mybatis测试下

    运行结果


     Mybatis的多表操作

    1、一对一查询

    一对一查询的模型

    用户表和订单标的关系为,一个用户有多个订单,一个订单只属于一个用户
    一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

    测试订单

    数据库中

    mapper包下orderMapper类下

    1. package com_mybatis_table.mapper;
    2. import com_mybatis_table.pojo.Order;
    3. import java.util.List;
    4. public interface OrderMapper {
    5. //查询全部的方法
    6. public List findAll();
    7. }

    pojo包下的order类下

    1. package com_mybatis_table.pojo;
    2. import java.util.Date;
    3. public class Order {
    4. private int id;
    5. private Date ordertime;
    6. private double total;
    7. //当前订单属于哪一个用户
    8. private User user;
    9. public int getId() {
    10. return id;
    11. }
    12. //对应的get和set方法
    13. @Override
    14. public String toString() {
    15. return "Order{" +
    16. "id=" + id +
    17. ", ordertime=" + ordertime +
    18. ", total=" + total +
    19. ", user=" + user +
    20. '}';
    21. }
    22. }

    pojo下user类下

    1. package com_mybatis_table.pojo;
    2. import java.util.Date;
    3. import java.util.List;
    4. public class User {
    5. private int id;
    6. private String username;
    7. private String password;
    8. private Date birthday;
    9. //描述的是当前用户存在哪些订单
    10. private List orderList;
    11. //对应的get和set方法
    12. @Override
    13. public String toString() {
    14. return "User{" +
    15. "id=" + id +
    16. ", username='" + username + '\'' +
    17. ", password='" + password + '\'' +
    18. ", birthday=" + birthday +
    19. '}';
    20. }
    21. }

    OrderMapper.xml下

    1. "1.0" encoding="UTF-8" ?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com_mybatis_table.mapper.OrderMapper">
    4. <resultMap id="orderMap" type="order">
    5. <id column="oid" property="id">id>
    6. <result column="ordertime" property="ordertime">result>
    7. <result column="total" property="total">result>
    8. result column="uid" property="user.id">result>
    9. <result column="username" property="user.username">result>
    10. <result column="password" property="user.password">result>
    11. <result column="birthday" property="user.birthday">result>
    12. resultMap>
    13. <select id="findAll" resultMap="orderMap">
    14. SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id
    15. select>
    16. mapper>

    sqlMapConfig.xml还是一样的配置,多出了引入OrderMapper.xml

    1. <mappers>
    2. <mapper resource="com_mybatis/mapper/UserMapper_config.xml">mapper>
    3. <mapper resource="com_mybatis/mapper/OrderMapper.xml">mapper>
    4. mappers>

     MybatisTest测试代码下

    1. public class MybatisTest {
    2. @Test
    3. public void test1() throws IOException {
    4. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    5. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    6. SqlSession sqlSession = sqlSessionFactory.openSession();
    7. OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
    8. List orderList = mapper.findAll();
    9. for (Order order : orderList) {
    10. System.out.println(order);
    11. }
    12. sqlSession.close();
    13. }
    14. }

    运行结果

    查询操作运行结果

     OrderMap.xml中也可使用

    1. <resultMap id="orderMap" type="order">
    2. <id column="oid" property="id">id>
    3. <result column="ordertime" property="ordertime">result>
    4. <result column="total" property="total">result>
    5. <association property="user" javaType="user">
    6. <id column="uid" property="id">id>
    7. <result column="username" property="username">result>
    8. <result column="password" property="password">result>
    9. <result column="birthday" property="birthday">result>
    10. association>
    11. resultMap>

    单独的分离出来,结果也是一致的。

    2、一对多查询

    一对多查询的模型

    用户表和订单表的关系为,一个用户有多个订单,一个订单只属于一个用户
    一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

     UserMapper接口下

    1. package com_mybatis_table.mapper;
    2. import com_mybatis_table.pojo.User;
    3. import java.util.List;
    4. public interface UserMapper {
    5. public List findAll();
    6. }

    UserMapper.xml下

    1. "1.0" encoding="UTF-8" ?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com_mybatis_table.mapper.UserMapper">
    4. <resultMap id="userMap" type="user">
    5. <id column="uid" property="id">id>
    6. <result column="username" property="username">result>
    7. <result column="password" property="password">result>
    8. <result column="birthday" property="birthday">result>
    9. <collection property="orderList" ofType="order">
    10. <id column="oid" property="id">id>
    11. <result column="ordertime" property="ordertime">result>
    12. <result column="total" property="total">result>
    13. collection>
    14. resultMap>
    15. <select id="findAll" resultMap="userMap">
    16. SELECT *,o.id oid FROM USER u,orders o WHERE u.id=o.uid
    17. select>
    18. mapper>

    Mybatis测试下

    1. @Test
    2. public void test2() throws IOException {
    3. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    4. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    5. SqlSession sqlSession = sqlSessionFactory.openSession();
    6. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    7. List userList = mapper.findAll();
    8. for (User user : userList) {
    9. System.out.println(user);
    10. }
    11. sqlSession.close();
    12. }

    运行结果

  • 相关阅读:
    医疗虚拟仿真和虚拟现实有什么区别?哪个更好?
    java计算机毕业设计至臻阁古董拍卖网源码+数据库+系统+部署+lw文档
    EMNLP-21-Document-level Entity-based Extraction as Template Generation
    Lumen/Laravel - 数据库读写分离原理 - 探究
    和月薪3W的聊过后,才知道自己一直在打杂...
    利用pearcmd.php文件包含拿shell(LFI)
    STM32简介
    欢迎来到对抗路——机器学习-多元线性回归模型(详解)
    【网络】详解HTTPS及探究加密过程
    文本相似度计算——HanLP分词+余弦相似度算法
  • 原文地址:https://blog.csdn.net/weixin_60719453/article/details/126481648