概述:关联查询主要在<resultMap>元素中,用<association>配置一对一、用<collection> 配置一对多

一、一对一查询

      1.使用扩展类实现一对一查询

<select id="queryById" parameter="int" resultType="User">
select * from user where userid=#{userid}
</select>

      2.使用resulutMap实现一对一查询(association)

              举例说明:将用户信息和用户权限放到不同的实体类中,每一个用户对应着相应的权限,如果要根据用户id查询他对应的属性,则需要在用户信息加入一个权限的属性,再通过SQL映          射文件中的resultMap属性,将查询的结果映射到用户类中的所有属性,包括权限信息

<select id="queryById" parameter="int" resultMap="User_privilige_map">
select * 
from user
inner join privilige on user.privilige=privilige.privilige
where userid=#{userid}
</select> <resultMap type="org.zy.pojo.user" id="User_privilige_map">
<id property="userid" column="userid"/>
<result property="userName" column="userName"/>
<result property="userAge" column="userAge"/>
...
<association property="privilige" javaType="privilige">
<id property="priviligeid" column="priviligeid"/>
<result property="priviligeidName"column="priviligeidName"/>
...
</association>
</resultMap>

二、一对多查询

        本章利用班级和学生之间的一对多举例:

(1)首先在班级类中添加学生属性     privaie  List<Student> student;

(2)在学生类中增加表示班级的外键

(3)查询语句

<select id="queryById" parameter="int" resultMap="ClassAndStudent">
select * from Student s where inner join Class c on s.classid=c.classid where
s.id=#{userid}
</select> <resultMap type="studentClass" id="ClassAndStudent">
<id property="classid" column="classid"/>
<result property="className" column="className"/>
... //省略其他属性
<collection property="students" ofType="student">
<id peoperty="stuNo" column="stuNo"/>
<result property="stuName" column="stuName" />
...//省略其他属性
</collection>
</resultMap> 参数说明:普通的类型通过id,result 映射,List属性的students 通过<collection>映射,并通过ofType指定List元素中的类型,即List类型的属性,需要通过<resultMap>中的<collection>
元素来映射到数据表中的各个列

三、多对一查询

       一个班级和多个学生之间的关系是一对多,反过来看,多个学生和班级之间的关系是多对一,本质是一样的,参照上面的内容即可

四、多对多查询

       多对多的本质上就是两个或多个一对多

五、延迟加载

             说明:在使用一对多查询时,很多时候只需要前面的信息,不需要后面的关联信息,即首次查询的是主要的班级信息,关联的学生信息在需要的时候再加载,

         以减少不必要的数据库开销从而提升程序的效率,这就称为延迟加载

              1.一对多延迟加载使用步骤

                     (1)打开Mybatis配置文件的延迟加载的开关

                        

<configuration>
<properties resource="db.properties">
<settings>
<--将延迟加载设置为ture ,可省略,默认为true-->
<setting name="LazyLoadingEnabled" value="true"/>
<--将立即加载设置为false -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
</configuration>

(2)SQL映射文件

<select id="queryStudentLazyLoad" parameter="int" resultMap="ClassAndStudent">
select * from class

</select> <resultMap type="studentClass" id="ClassAndStudent">
<id property="classid" column="classid"/>
<result property="className" column="className"/>
... //省略其他属性
<collection property="students" ofType="student"
<--通过命名空间+id指定延迟加载执行sql语句-->
select="org.zy.mapper.StudentMapper.queryStudentByClassId" column="classid"/>
</collection>
</resultMap>
StudentMapper.xml配置文件

    <mapper namespace="org.zy.mapper.StudentMapper">
//根据班级号码查询学生的信息
<select id="queryStudentByClassId" parmeterType="int" resultType="student">
select * from student where classid=#{classid}
</select>

(3)说明:即通过主查询查询班级信息,然后通过一对多元素映射关联student表,并通过select语句属性指定延迟加载的sql语句

                select * from student where classid=#{classid}
(4)修改Mybatis配置文件
<mappers>
     <mapper resource="org/zy/mapper/studentMapper.xml"/>
                <mapper resource="org/zy/mapper/studentMapper.xml"/>
         <mappers>

MyBatis框架之关联查询的更多相关文章

  1. mybatis一对多关联查询+pagehelper->分页错误

    mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: ...

  2. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  3. MyBatis:一对一关联查询

    MyBatis从入门到放弃三:一对一关联查询 前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是 ...

  4. 7.mybatis一对多关联查询

    和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...

  5. 5.mybatis一对一表关联查询

    方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集,封装联表查询的数据(去除重复的数据)  SELECT * FROM class c,teacher t WHERE c.tid = t.t ...

  6. JAVA入门[9]-mybatis多表关联查询

    概要 本节要实现的是多表关联查询的简单demo.场景是根据id查询某商品分类信息,并展示该分类下的商品列表. 一.Mysql测试数据 新建表Category(商品分类)和Product(商品),并插入 ...

  7. mybatis多表关联查询之resultMap单个对象

    resultMap的n+1方式实现多表查询(多对一) 实体类 创建班级类(Clazz)和学生类(Student),并在Student中添加一个Clazz类型的属性,用于表示学生的班级信息. mappe ...

  8. mybatis一对多关联查询——(九)

    1.需求: 查询所有订单信息及订单下的订单明细信息. 订单信息与订单明细为一对多关系. 2.      sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关 ...

  9. mybatis多对多关联查询

    多对多关系 一个学生可以选多门课程,而一门课程可以由多个学生选择,这就是一个典型的多对多关联关系.所谓多对多关系,其实是由两个互反的一对多关系组成.即多对多关系都会通过一个中间表来建立,例如选课表.学 ...

随机推荐

  1. AIX/Linux/HP-UX查看CPU/内存/磁盘/存储命令

    1.1    硬件环境验证方式 硬件环境主要包括CPU.内存.磁盘/存储.网络设备(如F5等).系统特有设备(如密押设备等)等,其中网络设备和系统特有设备由网络管理员或项目组提供为准,本节主要关注CP ...

  2. Spark学习之路(五)—— Spark运行模式与作业提交

    一.作业提交 1.1 spark-submit Spark所有模式均使用spark-submit命令提交作业,其格式如下: ./bin/spark-submit \ --class <main- ...

  3. Spark学习之路(一)—— Spark简介

    一.简介 Spark于2009年诞生于加州大学伯克利分校AMPLab,2013年被捐赠给Apache软件基金会,2014年2月成为Apache的顶级项目.相对于MapReduce的批处理计算,Spar ...

  4. Linux系统中sysctl命令详解

    sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下.sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎 ...

  5. 整理一下Apache与Tomcat的关系

    如果有对Apache与Tomcat认识比较的同学就要拿起小板凳听一下 关系一 Apache是web服务器,Tomcat是应用服务器,也就是java服务器,因为Apache只能支持静态网页,所以Apac ...

  6. Java中的关键字synchronized

    1. 介绍 在Java并发系列的文章中,这个是第二篇文章.在前面的一篇文章中,我们学习了Java中的Executor池和Excutors的各种类别. 在这篇文章中,我们会学习synchronized关 ...

  7. 谷歌地球 Google Earth v7.3.2.5495 专业版

    谷歌地球(Google Earth,GE)是一款谷歌公司开发的虚拟地球软件,它把卫星照片.航空照相和GIS布置在一个地球的三维模型上.谷歌地球于2005年向全球推出,被<PC 世界杂志>评 ...

  8. 神经大条的我-->记录我那些容易忘记的知识点

    1.springmvc中每次进来的request都是保存在ThreadLocal里的,所以不会存在线程问题.可以直接用@Autowired全局注入  参考地址:https://my.oschina.n ...

  9. MyBatis从入门到精通:第一章测试代码

    package tk.mybatis.simple.mapper; import org.apache.ibatis.io.Resources; import org.apache.ibatis.se ...

  10. 数据库系统概念:SQL的数据类型与模式、授权

    public class DataBase { public static void main() { } } /* 4.5 SQL的数据类型与模式 4.5.1 SQL的日期与时间类型 SQL标准支持 ...