Mybatis | Mybatis标签collection一对多的使用
短信预约 -IT技能 免费直播动态提醒
Mybatis标签collection一对多的使用
Mybatis的 collection 是一对多的使用的, 在 resultMap 标签内使用
当一个Bean中有 一个list属性需要关联查询出来的使用就用collection 标签
如下
查询用户结果 需要关联出 角色集合
用户
@Datapublic class User { private Integer id; private String name; private List<Role> roles;}
角色
@Datapublic class Role { private Integer id; private Integer userId; private String name; private String type;}
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. 方法一: 嵌套结果映射
<!-- 定义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>
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>
- select=“selectRoleByUserId” 找的是第二个sql语句,如果调用别的xml文件中方法写全路径就可以找到.
- column=“id” 参数id 传多个参数的话就是 {“属性名”=“参数”,“属性名”=“参数”} 这样的.
association 一对一: https://blog.csdn.net/qq825478739/article/details/127357796
来源地址:https://blog.csdn.net/qq825478739/article/details/127357819
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341