1.mybatis-helper-pro
2.Lombok
3.自定义模版
4.动态sql
4.1 where标签
- 可以帮助拼接where关键字
- 可以帮助自动去除与where关键字相邻的and或者or关键字
- 在where标签与if联合使用的时候,如果if标签里没有满足条件,那么where可以帮助我们智能的不拼接where关键字
4.2 if标签
- test里是一个布尔表达式的值,OGNL表达式
<if test="aaa gt 1000">可以写大于,小于,大于等于,小于等于,不等于,等于
4.3 choose when
与if相比只要有一个满足就停止选择
4.4 include
4.5 trim
去除最后的","
4.6 foreach
作用在SQL语句中进行循环
- 插入一个list
- in查询,传入一个数组
<foreach>标签
插入一个集合(批量插入)
<selectKey>标签
7.9 <useGeneratedKeys>
可以获得插入值的自增ID;
8.多表查询
连接查询
select语句直接写成连接
分次查询
把user表的id传递给第二个表的userdesc表的user_id
把员工表的部门d_id传递给部门表的id
1对多
注意:这里的引用类型是一个集合,所以我们使用的是(一对一的时候使用的是association)collection标签(班级里的成员变量学生集合)
ofType:指的是集合里面的元素
select:第二次查询的sql语句的坐标
colum:传递的字段
连接查询(collection标签)
总结:column指查询出的字段的名字
property指类里的成员属性
如果是单个成员变量做属性(<assistant>)配合javatype(可以省略)
通过成员变量是集合list<user>用(<collection>) 配合ofType
8.1多对多查询
分步:单次查询+第二次连接中间表的查询
两个表分别维护对方的一个集合成员变量;
s_c是关系维护表
连接查询(与一对多的连接查询一致)上第二张蓝色图
//只需要考虑查询出的字段在map里与类里成员变量的对应(中间表不用理会)
分次查询与连接查询的对比
- 在数据里不大的情况下,连接查询较快;
- 在数据里较大的时候,分步查询较快,因为如果A表有100W数据,那么B表有100W条,此时连接查询会较慢,因为连接查询是在笛卡尔乘积基础上做筛选.
9 缓存与懒加载
9.1懒加载
在分布查询中,全局开启懒加载(如果不用到第二次的查询结果,就不会调用第二次的查询语句)
局部查询开启懒加载
9.2缓存
Mybbatis的懒加载与缓存都是为了提升其效率的特性
9.2.1一级缓存
Mybatis自带一级缓存,无法关闭;一级缓存是一个sqlSession级别的缓存,
意思是我们使用同一个sqlsession执行相同的sql语句传入同样参数的时候会查询sqlsession一级缓存中的数据
只要是一个sqlsession是不是一个mapper没有影响
以一个sqlSession为准
- 一级缓存什么时候失效?
- 当连接关闭的时候会失效
- 当发生commit的时候会失效(因为发生了增删改)
9.2.2二级缓存
二级缓存功能比一级缓存要更加强大一些,默认是关闭的
以一个nameSpace为准
- 对象实现序列化
- xml中开启二级缓存标签