JAVA(二)Mybatis_插件_动态sql_多表查询_

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中开启二级缓存标签

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值