MyBatis的关联查询之一对多,多对一

在关系型数据库中,我们经常要处理一对多,多对一和多对多的关系。

一对多,多对一

一、entity 实体类

public class SmbmsRole {
private long rid;
private String roleCode;
private String roleName;
   //泛型集合
private List<User> users; public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
} public long getRid() {
return rid;
} public void setRid(long rid) {
this.rid = rid;
} public String getRoleCode() {
return roleCode;
} public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
} public String getRoleName() {
return roleName;
} public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
public class User {
private Integer uid;
private String userCode;
private String userName;
//关联一的一方
private SmbmsRole role; public SmbmsRole getRole() {
return role;
} public void setRole(SmbmsRole role) {
this.role = role;
} public Integer getUid() {
return uid;
} public void setUid(Integer uid) {
this.uid = uid;
} public String getUserCode() {
return userCode;
} public void setUserCode(String userCode) {
this.userCode = userCode;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}

二、dao层

//一对多
//根据角色获取所对应的人
SmbmsRole getroleId(Integer rid); //多对一 查询所有用户信息
List<User> getUserList();

三、小配置  xml

 <!--一对多-->
<!--由于是关联查询 返回的是多张表中的结果集,必须定义resultMap映射-->
<resultMap id="SmbmsRoleMaps" type="com.marketsys.entity.SmbmsRole">
<id column="rid" property="rid"></id>
<!--此处使用的是collection节点,由于在SmbmsRole类中插入的是List集合
ofType:为集合中的泛型-->
<collection property="users" ofType="User" select="getroleIdMutilSQL" column="rid">
<!--在collection中声明Provincial中的属性与表中列的映射-->
<!-- <id column="uid" property="uid"></id>-->
</collection>
</resultMap> <!--一对多 一条select-->
<!--<select id="getroleId" parameterType="int" resultMap="SmbmsRoleMaps">
select r.rid,roleName,u.uid,userName from smbms_role r inner join smbms_user u on r.rid=u.userRole where r.rid=#{rid}
</select>-->
<!--一对多 两条select-->
<select id="getroleId" resultMap="SmbmsRoleMaps">
select * from smbms.smbms_role where rid=#{rid}
</select>
<select id="getroleIdMutilSQL" resultType="com.marketsys.entity.User">
select * from smbms.smbms_user where userRole=#{rid}
</select> <!--多对一-->
<resultMap id="SmbmsRoleMap" type="com.marketsys.entity.User">
<id column="uid" property="uid"></id> <association property="role" javaType="com.marketsys.entity.SmbmsRole" select="getRole" column="userRole">
<id column="rid" property="rid"></id>
</association>
</resultMap>
<!-- 多对一 一条select-->
<!--<select id="getUserList" resultMap="SmbmsRoleMap">
select rid,roleName,uid,userName from smbms_role,smbms_user where smbms_role.rid=smbms_user.userRole
</select>-->
<!-- 多对一 二条select-->
<select id="getUserList" resultMap="SmbmsRoleMap">
select uid,userName,userRole from smbms.smbms_user
</select>
<select id="getRole" resultType="com.marketsys.entity.SmbmsRole">
select rid,roleName from smbms.smbms_role where rid=#{userRole}
</select>

四、test测试类

   SqlSession sqlSession= MybatisUtil.getSqlSession();
URoleTestDao mapper=sqlSession.getMapper(URoleTestDao.class); //一对多
@Test
public void test1(){
SmbmsRole smbmsRole=mapper.getroleId(3);
System.out.println("身份为:"+smbmsRole.getRoleName()+"\n姓名为:");
for (User item:smbmsRole.getUsers()) {
System.out.println(item.getUserName());
}
} //多对一
@Test
public void test2(){
List<User> userList = mapper.getUserList();
for (User user:userList) {
System.out.println("用户:"+user.getUserName()+"\t角色:"+user.getRole().getRoleName());
}
}

Mybatis关联查询之一的更多相关文章

  1. Mybatis关联查询和数据库不一致问题分析与解决

    Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...

  2. MyBatis基础:MyBatis关联查询(4)

    1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...

  3. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  4. mybatis 关联查询实现一对多

    场景:最近接到一个项目是查询管理人集合  同时每一个管理人还存在多个出资人   要查询一个管理人列表  每个管理人又包含了出资人列表 采用mybatis关联查询实现返回数据. 实现方式: 1 .在实体 ...

  5. MyBatis关联查询、多条件查询

    MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...

  6. Mybatis关联查询之二

    Mybatis关联查询之多对多 多对多 一.entity实体类 public class Student { private Integer stuid; private String stuname ...

  7. mybatis关联查询基础----高级映射

    本文链接地址:mybatis关联查询基础----高级映射(一对一,一对多,多对多) 前言: 今日在工作中遇到了一个一对多分页查询的问题,主表一条记录对应关联表四条记录,关联分页查询后每页只显示三条记录 ...

  8. MyBatis关联查询和懒加载错误

    MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...

  9. Mybatis关联查询(嵌套查询)

    上一篇文章介绍了基于Mybatis对数据库的增.删.改.查.这一篇介绍下关联查询(join query). 三张表:user article blog 表的存储sql文件: /* Navicat My ...

  10. MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射

    先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...

随机推荐

  1. source insight 3 常用设置

    总结了一些source insight的一些常用设置,这些设置需求因人而异,自己用的顺手的才是最好的. 1.括号配对高亮“在前括号左侧,后括号左侧”双击鼠标左键,可以选定匹配括号和其中内容(<& ...

  2. Oracle处理关于sysaux表空间爆满的问题---更新最新方法!!

    对于SYSAUX表空间而言,如果占用过大,那么一般情况下是由于AWR信息或对象统计信息没有及时清理引起的,具体原因可以通过如下的SQL语句查询: SELECT OCCUPANT_NAME ORDER ...

  3. 拷贝本地文件到docker容器内部

    #复制本地目录的xxx到镜像内部并且为xxx docker cp /home/xxx targetImage:/home/xxx

  4. Liu Junqiao:工作中用到的命令以及问题汇总

    工作中用到的命令以及问题汇总 2019-11-29 查看系统运行时间,这个问题是因为我们在阿里云上有个机器,在某一天发现这台机器上有的服务莫名奇妙的停了,然后排查时怀疑机器被重启过用如下如下命令查看了 ...

  5. picoCTF2018记录

    近期准备参加CTF 一头雾水 开始练练手 https://2018game.picoctf.com/  这个网站挺适合新手的(据说面向高中生?? 惭愧惭愧) 前面几个比较简单 就从 Resources ...

  6. PHP危险函数

    部分内容转载 https://www.jianshu.com/p/277294c1a9f8 https://www.cnblogs.com/yewooo00/p/7551083.html 信息泄露 1 ...

  7. Violet 6 杯省选模拟赛 蒲公英

    https://www.luogu.com.cn/problem/P4168 题目 给$n$个数字,有$m$次询问,问$a_l, a_{l+1} , \dots , a_r$的众数是什么, $1\le ...

  8. [考试反思]1113csp-s模拟测试114:一梦

    自闭.不废话.写一下低错. T1:觉得信心赛T1不会很恶心一遍过样例直接没对拍(其实是想写完T2之后回来对拍的) 状态也不好,基本全机房都开始码了我还没想出来(skyh已经开T2了).想了40多分钟. ...

  9. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...

  10. 使用Redis实现UA池

    前提 最近忙于业务开发.交接和游戏,加上碰上了不定时出现的犹豫期和困惑期,荒废学业了一段时间.天冷了,要重新拾起开始下阶段的学习了.之前接触到的一些数据搜索项目,涉及到请求模拟,基于反爬需要使用随机的 ...