• Mybatis | Mybatis标签collection一对多的使用


    一、colleciton 标签

    Mybatis的 collection 是一对多的使用的, 在 resultMap 标签内使用
    当一个Bean中有 一个list属性需要关联查询出来的使用就用collection 标签
    如下
    查询用户结果 需要关联出 角色集合


    用户

    @Data
    public class User {
        
        private Integer id;
        
        private String name;
        
        private List<Role> roles;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    角色

    @Data
    public class Role {
    
        private Integer id;
    
        private Integer userId;
    
        private String name;
    
        private String type;
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    sql

    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL COMMENT '名称',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4;
    
    
    CREATE TABLE `role` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
    	`user_id` int(11) NOT NULL COMMENT '用户id',
      `name` varchar(255) DEFAULT NULL COMMENT '角色名称',
    	`type` varchar(255) DEFAULT NULL COMMENT '角色类型',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二、collection使用方法

    1. 方法一: 嵌套结果映射

        <!-- 定义resultMap -->
        <resultMap id="UserResultMap" type="User">
            <result column="id" property="id"/>
            <result column="name" property="name"/>
            <collection ofType="role" property="roles">
                <result column="role_id" property="id"/>
                <result column="role_name" property="name"/>
                <result column="role_type" property="type"/>
            </collection>
        </resultMap>
    
        <!--查询语句-->
        <select id="selectUserById" resultMap="UserResultMap">
            select u.id ,u.name,r.id AS role_id ,r.name AS role_name ,r.type AS role_type FROM user AS u INNER JOIN role AS r ON u.id = r.user_id where u.id = #{id}
        </select>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2. 方法二: 嵌套select 查询

        <!-- 定义resultMap -->
        <resultMap id="UserResultMap" type="User">
            <result column="id" property="id"/>
            <result column="name" property="name"/>
            <collection ofType="role" property="roles" column="id" select="selectRoleByUserId"/>
        </resultMap>
    
     
    
        <!--查询语句-->
        <select id="selectUserById" resultMap="UserResultMap">
            select  id , name FROM user where id = #{id}
        </select>
    
        <!--查询语句-->
        <select id="selectRoleByUserId" resultMap="role">
            select  id , name,type FROM role where user_id = #{userId}
        </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • select=“selectRoleByUserId” 找的是第二个sql语句,如果调用别的xml文件中方法写全路径就可以找到.
    • column=“id” 参数id 传多个参数的话就是 {“属性名”=“参数”,“属性名”=“参数”} 这样的.

    三、 association 一对一

    association 一对一: https://blog.csdn.net/qq825478739/article/details/127357796

  • 相关阅读:
    我的创作纪念日,3周年总结
    hexo发生错误 Error: Spawn failed
    稳定智能的在线考试系统
    营收、利润双增长,龙湖集团找到多元增长的答案?
    java8 lambda表达式
    【Mindspore】ResizeArea涉及的infershape问题
    Java 18 还未用上,Java 19 最新两大特性曝光
    Pyinstaller编译python项目为exe遇到的问题,flask服务无法启动
    数据分析入门
    DHCP服务
  • 原文地址:https://blog.csdn.net/qq825478739/article/details/127357819