MyBatis学习笔记04

MyBatis高级查询
一:MyBatis关联查询【联合查询、多个表之间的查询】一个对象含有另一个对应引用时候会用到关联查询
1、联合查询【多表联合查询】
*map配置文件
这里写图片描述
*测试代码
这里写图片描述
*打印信息
这里写图片描述

2、构造查询【联合查询的一个变种,就是当我们为对象当中的引用来赋值的时候采用构造函数的一种形式】
*map配置文件,这里的也是采用resultMap配置属性和列名,不同的是association标记中不是直接配的id和result,而是配置constructor标记,具体如下:
这里写图片描述
*在作者pojo类中配置所需的构造函数,注意mybatis往往会用系统默认的构造函数构建对象,所有配置自己的构造函数的同时还需要配置类的原始构造函数
这里写图片描述
*测试方法,和上一个联合查询的方法一样,因为map配置文件中select标记的id没变,还是selectAuthorJoin
这里写图片描述
*打印信息正常,和上边一样,就不写了。

3、子查询【联合查询都可以用子查询来代替,往往都说子查询效率不高,其实它有一些特殊机制,例如:懒加载机制】
(1)子查询形式的关联,例如:select * from author where userID in(select * from user)
(2)如何通过userID构建User对象,mybatis解决这个问题方案是:建立一个普通的select查询(子查询语句)如下:
select * from user这个查询已经在UserMapper.xml中建立了,如下图:
这里写图片描述
(3)建立完子查询后再建立主查询,主查询会应用到一个resultMap,这个resultMap不同的是association当中是没有主体的,只有一个select属性,这个select属性指引的是子查询中的id,也就是上图中的id=”findById”具体写法如下图:
map配置文件:
这里写图片描述
(4)测试代码【现在使用的mybatis是持久层框架,持久层框架有种机制叫懒加载机制,就是说需要的时候我就去查询,不需要就不查询】
*懒加载机制设置:懒加载默认是不开启的,开启是在基本配置文件中添加setting标记,懒加载加载在别名之前,具体如下:
懒加载机制
*具体测试代码如下
代码
懒加载机制说明:如下图所示,一开始执行的select * from author语句,在就执行懒加载应用了,第二条sql语句并没有执行,第二条sql语句执行是在用到User时调用list2.getUser().getUsername()后才执行的,所以打印用户名是在懒加载应用后面执行select * from user where id=?这条sql语句,所以设置懒加载后两条sql语句的执行点就不同了,如何没有懒加载两条sql语句是一起执行的。
打印信息

二:集合查询:一个对象含有另一个对象的引用集合
(1)为了学习集合查询,数据库首先建立一个访问记录表visit,visit表用于保存用户的登录信息,字段visitID、userID、visitDate(登录时间)、visitIP(登录ip),具体如下
这里写图片描述
(2)修改pojo类,添加Visit类,添加get、set方法,并在User中加入visitList属性
Visit类
修改User类
(3)向数据库visit表中插入数据,因为visit表中存在userID,所以当插入visit数据前,需要先插入用户具体如下:
VisitMapper.xml配置:
这里写图片描述
测试代码:
这里写图片描述
(4)集合查询用到collection标记,这个标记是在resultMap定义的,它有property、column、ofType属性,在UserMapper.xml中添加resultMap和select标记。
这里写图片描述
(5)集合查询测试代码
这里写图片描述
(6)打印信息
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值