前言

  实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容。此时,就可以使用Mybatis的关联查询还有动态SQL。前几篇文章已经介绍过了怎么调用及相关内容,因此这里只说明核心内容SQL映射文件的配置。

一对一关联

<association /> JavaType是用来指定pojo中属性的类型
此处采用两种方式进行关联查询,一种是嵌套结果,一种是嵌套查询。
<!-- 根据班级id查询班级和教师信息 -->
<select id="getClass" resultMap="ClassResultMap">
select *
from class as c
left join
teacher as t on c.teacher_id = t.t_id
where c.c_id
= #{id}
</select> <!-- 嵌套结果 -->
<resultMap type="Classes" id="ClassResultMap">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" javaType="Teacher">
<id property="id" column="t_id" />
<result property="name" column="t_name" />
</association>
</resultMap> <select id="getClass2" parameterType="int"
resultMap="ClassResultMap2">
select * from class where c_id=#{id}
</select> <!-- 嵌套查询 -->
<resultMap type="Classes" id="ClassResultMap2">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" column="teacher_id"
select="getTeacher" />
</resultMap> <select id="getTeacher" parameterType="int" resultType="Teacher">
SELECT
t_id id, t_name name from teacher where t_id=#{id}
</select>

一对多关联

<collection /> ofType指定的是映射到list集合属性中pojo的类型
<select id="getClass3" parameterType="int"
resultMap="ClassResultMap3">
select *
from class c
left join teacher t on c.teacher_id =
t.t_id
left join student
s on c.c_id = s.class_id
where c.c_id = #{id}
</select> <resultMap type="Classes" id="ClassResultMap3">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" column="teacher_id"
javaType="Teacher">
<id property="id" column="t_id" />
<result property="name" column="t_name" />
</association>
<collection property="students" ofType="Student">
<id property="id" column="s_id" />
<result property="name" column="s_name" />
</collection>
</resultMap>

动态SQL

  使用Mybatis的动态SQL特性可以很容易的串联SQL。if choose(when otherwise) foreach trim>。更为细致的介绍不再赘述,Mybatis3官方参考文档中以详细介绍。

    <!-- 用户的条件查询 姓名模糊查询 -->
<select id="selectUserByCondition" parameterType="UserCondition"
resultType="User">
select * from users
where age &lt;= #{maxAge} and age &gt;= #{minAge}
<if test='name!="%null%"'>
and name like #{name}
</if>
</select>

Mybatis之关联查询及动态SQL的更多相关文章

  1. MyBatis学习总结(三)——多表关联查询与动态SQL

    在上一章中我们学习了<MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射>,这一章主要是介绍一对一关联查询.一对多关联查询与动态SQL等内容. 一.多表关联查询 表与 ...

  2. MyBatis的关联映射和动态SQL

    CREATE TABLE tb_card ( id INT PRIMARY KEY AUTO_INCREMENT, CODE ) ); '); CREATE TABLE tb_person ( id ...

  3. JavaWeb_(Mybatis框架)关联查询_六

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  4. Mybatis之关联查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  5. MyBatis学习 之 三、动态SQL语句

    目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...

  6. Mybatis第三篇【动态SQL】

    动态SQL 何为动态SQL??回顾一下我们之前写的SSH项目中,有多条件查询的情况,如下图 我们当时刚开始做的时候,是需要在Controller中判断SQL是否已经有条件了,因为SQL语句需要拼接起来 ...

  7. SpringBoot+Mybatis实现关联查询

    SpringBoot+Mybatis实现关联查询 今天学习了下Mybatis的动态查询,然后接着上次的Demo改造了下实现表的关联查询. 话不多说,开始今天的小Demo 首先接着上次的项目 https ...

  8. Mybatis 系列9-强大的动态sql 语句

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  9. MyBatis的核心配置、动态sql、关联映射(快速总结)

    MyBatis的核心对象和配置 #1. SqlSessionFactory对象: 单个数据库映射关系经过编译的内存镜像: 作用:创建SQLSession对象. //读取配置文件 InputSteam ...

随机推荐

  1. 魅族首页导航效果(不兼容IE)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 轮播图3D效果--roundabout(兼容IE8)升级版

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. nginx里配置跨域

    发布于 881天前  作者 wendal  1404 次浏览  复制  上一个帖子  下一个帖子  标签: nginx 跨域 if ($request_method = OPTIONS ) { add ...

  4. 静态路由解决双外卡,PC做路由器的实现

    1,曾经医院,有两个网卡,一个内,一个外,但都有网关(192.168.1.246. 192. 168.6.1) 这样同一时候开启就会出现网络不通. 当时并没有细究原因. 这次医院信息化项目上马,我学到 ...

  5. Linux(十一) 文件目录权限 chmod umask chown

    一 文件目录权限定义 首先我们先认识一下文件目录的权限定义,请看下面ls -l的结果我们发现一个文件或者目录的前面有10位的信息,第一位表示文件类型,大概有一下几种类型:d 表示目录 - 普通文件 b ...

  6. HDU 2717 Catch That Cow(常规bfs)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2717 Catch That Cow Time Limit: 5000/2000 MS (Java/Oth ...

  7. iOS11.2-11.3.1进行越狱及问题

    设备环境:Electra.iOS11.13.1 PS:Electra最新版本进行越狱只支持11.14以下的版本.同时这是不完美越狱,每次重启手机都需要重新越狱,最后,由于Electra版本推出仓促,一 ...

  8. 简单几行代码使用百度地图API接口分页获取信息

    首发于: 万能助手扩展开发:使用百度地图API接口分页获取信息_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=426 使用 ...

  9. df du sync

    df命令用来检查linux系统的磁盘空间占用情况 df [选项] -h:以容易理解的格式输出文件系统分区占用情况,如32KB,120MB,60GB -k:以KB大小单位输出文件系统分区占用情况 -m: ...

  10. mybatis使用*号查询数据丢失问题

    使用*号的SQL语句:select * from 表名 在开发过程中可能你会发现使用mybatis框架爱作为持久层时,写的SQL语句在工具里面查询数据是可以查到想要的数据的,但是在项目中会出现数据丢失 ...