本文链接地址:mybatis关联查询基础----高级映射(一对一,一对多,多对多)

前言:
今日在工作中遇到了一个一对多分页查询的问题,主表一条记录对应关联表四条记录,关联分页查询后每页只显示三条记录,sql查询主表一条记录的时候,加上关联表后主表每一条记录都和关联表相对应,也就是说主表一条记录和关联表四条对应实际查出的是4条,怎么实现主表一条记录和关联表多条数据关联后查出后是一条信息呢?(下面一对多详解),所以想将关于mybatis多表查询的问题整理记录下来,希望大家多多补充指正。
0.首先是三个对象(为了方便理解用了三个比较简单的对象):





一、一对一(以学生和学生信息为例,通过学号关联):

1.1相对来说一对一就比较简单学生表通过学号和学生信息表关联



注意:如果主表和关联表有字段重复,则需要查询语句中起别名,将别名写入在column属性中,因为起别名是对数据库字段起的别名,所以要写在数据库所对应的的字段上,别名自动就和实体类对应了。

二、一对多(学生表和学生成绩表)

当关联查询的时候需要分成两种情况,分页和不分页


2.1一对多不分页(写法和一对一一样只是将association 标签换成了collection )

   <resultMap id="BaseResultMap" type="com.qike.coldKu.entity.Student">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="num" property="num" jdbcType="INTEGER"/>
<!--一对一-->
<association property="studentInfo" javaType="com.qike.coldKu.entity.StudentInfo">
<result column="id" property="id" jdbcType="INTEGER"/>
<result column="age" property="age" jdbcType="INTEGER"/>
<result column="phone" property="phone" jdbcType="VARCHAR"/>
<result column="stuNum" property="stuNum" jdbcType="VARCHAR"/>
</association>
<!--一对多不分页-->
<collection property="stuGradeList" ofType="com.qike.coldKu.entity.StuGrade" >
<result column="stuNum" property="stuNum" jdbcType="VARCHAR"/>
<result column="Chinese" property="Chinese" jdbcType="VARCHAR"/>
<result column="mathematics" property="mathematics" jdbcType="VARCHAR"/>
</collection>
</resultMap>

2.2一对多分页(如果关联查询涉及到分页,则需要用到myBatils的一种映射规则)

当用分页插件PageHelper.startPage(pageCurrent,pageSize);进行分页时用第一种方式发现返回的数据变少了,前言中大体提了下原因,下面写一下具体的解决方式:

 <resultMap id="BaseResultMap" type="com.qike.coldKu.entity.Student">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="num" property="num" jdbcType="INTEGER"/>
<!--一对一-->
<association property="studentInfo" javaType="com.qike.coldKu.entity.StudentInfo">
<result column="id" property="id" jdbcType="INTEGER"/>
<result column="age" property="age" jdbcType="INTEGER"/>
<result column="phone" property="phone" jdbcType="VARCHAR"/>
<result column="stuNum" property="stuNum" jdbcType="VARCHAR"/>
</association>
<!--一对多不分页-->
<collection property="stuGradeList" ofType="com.qike.coldKu.entity.StuGrade" >
<result column="stuNum" property="stuNum" jdbcType="VARCHAR"/>
<result column="Chinese" property="Chinese" jdbcType="VARCHAR"/>
<result column="mathematics" property="mathematics" jdbcType="VARCHAR"/>
</collection>
<!--一对多分页 这个地方没有属性的映射了 select指的是映射执行查询的名字 column指的是传参-->
<collection property="coldkuExpands" ofType="com.qike.coldKu.entity.ColdkuExpand" select="queryList" column="num"> </collection>
</resultMap>

sql写法

<select id="queryUserInfo"  resultMap="BaseResultMap">
select a.name as name,a.num from student as a
</select>
<select id="queryStuGrade" resultType="com.qike.coldKu.entity.StuGrade" parameterType="int">
select * from StuGrade where stuNum = #{num}
</select>

mybatis关联查询基础----高级映射的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. Mybatis关联查询之二

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

  8. mybatis入门基础----高级映射(一对一,一对多,多对多)

    阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...

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

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

随机推荐

  1. 新手指南:顶象验证码如何接入微信小程序?

    自2017年小程序发布以来,经过4年的快速发展,小程序已然成为企业互联网布局不可或缺的一环.无论是互联网企业还是拥抱互联网的传统企业,无论是服务导向型企业还是产品导向型企业,小程序都为用户提供了一种轻 ...

  2. 5、双指针技巧套路框架——Go语言版

    前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...

  3. 磁盘分区级文件系统丢失找回 testdisk

    故障修复步骤: 1. 检查磁盘分区级文件系统确实不在: 2. 云主机内部下载testdisk工具修复 yum install testdisk -y 3. 执行命令testdisk /dev/vdc进 ...

  4. Hibernate 批量update数据时,怎么样做可以回滚,

    Hibernate 批量update数据时,怎么样做可以回滚, 1.serviceManagerDaoImpl代码里对异常不进行try,catch抛出, 2.或者抛出throw new Runtime ...

  5. 可以通过外键的.id直接传值

    可以通过外键的.id直接传值 如<input type="text" name="user.department.id" value="1&qu ...

  6. 大型网站高可用架构之CAP原理

    在讨论高可用数据服务架构之前,必须先讨论的一个话题是,为了保证数据的高可用,网站通常会牺牲另一个也很重要的指标:数据一致性. CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性.数据可用 ...

  7. Visual Studio Code常用快捷键

    说明 以下快捷键适用于windows环境下, Mac请将ctrl替换为command按键: 部分快捷键或不一样. 查看VSCode快捷键定义: settings -> keymaps. 目前使用 ...

  8. 【LeetCode】Swap Nodes in Pairs 解题报告

    Swap Nodes in Pairs [LeetCode] https://leetcode.com/problems/swap-nodes-in-pairs/ Total Accepted: 95 ...

  9. 【LeetCode】9. Palindrome Number 回文数

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:回文数,回文,题解,Leetcode, 力扣,Python ...

  10. 【LeetCode】81. Search in Rotated Sorted Array II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/search-in ...