• Mybatis的多表操作之多对多查询与练习


    目录

     多对多查询

    多对多查询模型

     练习册多对多表查询

    将orders、role、user三者联系起来


     多对多查询

    多对多查询模型

    用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用
    多对多查询的需求:查询用户同时查询出该用户的所有角色

     数据库中两张新表

     UserMapper接口下

    1. public interface UserMapper {
    2. public List findUserAndRoleAll();
    3. }

     pojo下的role类

    1. package com_mybatis_table.pojo;
    2. public class Role {
    3. private int id;
    4. private String roleName;
    5. private String roleDesc;
    6. //外加get和set方法和toString方法
    7. }

    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. //描述的是当前用户具备哪些角色
    12. private List roleList;
    13. //外加getset方法和toString方法
    14. }

    UserMapper.xml文件下(配置sql的文件)

    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="userRoleMap" type="user">
    5. <id column="userId" 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="roleList" ofType="role">
    10. <id column="roleId" property="id">id>
    11. <result column="roleName" property="roleName">result>
    12. <result column="roleDesc" property="roleDesc">result>
    13. collection>
    14. resultMap>
    15. <select id="findUserAndRoleAll" resultMap="userRoleMap">
    16. select * from user u,sys_user_role sr,sys_role r
    17. where u.id=sr.roleId and sr.roleId=r.id
    18. select>
    19. mapper>

    sqlMapConfig.xml中加入别名和加载映射文件

    1. <typeAliases>
    2. <typeAlias type="com_mybatis_table.pojo.Role" alias="role">typeAlias>
    3. typeAliases>
    4. <mappers>
    5. <mapper resource="com_mybatis/mapper/UserMapper.xml">mapper>
    6. mappers>

    运行结果

     练习册多对多表查询

    将orders、role、user三者联系起来

    即一个用户,显示他们角色信息,订单信息,
    一个用户有多个角色,一个订单属于一个用户,一个用户有多个订单

    mapper包下的OrderUserRoleMapper接口下

    1. import java.util.List;
    2. public interface OrderUserRoleMapper {
    3. public List findUserAndRoleAndOderAll();
    4. }

    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. //描述的是当前用户具备哪些角色
    12. private List roleList;
    13. }

    Order_User_RoleMapper.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.OrderUserRoleMapper">
    4. <resultMap id="userRoleMap" type="user">
    5. <id column="userId" 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="roleList" ofType="role">
    10. <id column="roleId" property="id">id>
    11. <result column="roleName" property="roleName">result>
    12. <result column="roleDesc" property="roleDesc">result>
    13. collection>
    14. <collection property="orderList" ofType="order">
    15. <id column="oid" property="id">id>
    16. <result column="ordertime" property="ordertime">result>
    17. <result column="total" property="total">result>
    18. collection>
    19. resultMap>
    20. <select id="findUserAndRoleAndOderAll" resultMap="userRoleMap">
    21. select *,o.id oid from user u,sys_user_role sr,sys_role r,orders o
    22. where u.id=sr.roleId and sr.roleId=r.id and o.uid=u.id
    23. select>
    24. mapper>

    sqlMapConfig.xml下加入此mapper的Order_User_RoleMapper.xml文件

    测试类下

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

    运行结果

  • 相关阅读:
    支付宝小程序授权/获取用户信息
    初识面向对象上
    数据库——数据库备份与恢复
    arm安全指令
    Group DETR
    NLP:自然语言领域NLP模型发展(ELmo→GPT/BERT→MT-DNN→XLNet→RoBERTa→ALBERT)l历程简介、重要算法介绍之详细攻略
    spring实战笔记
    makefile 调试
    微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】
    Python——弹幕词频统计及其文本分析(绘制词云)(含源代码)
  • 原文地址:https://blog.csdn.net/weixin_60719453/article/details/126579637