JSP-MyBatis(三)高级查询+分页+注解+延时+缓存+多对一

目录

一、高级查询+分页:

二、#和$的区别

三、使用注解的方式

1.配置映射 

2.使用@Param的注解:

四、many2One 

 五、延时加载

六、N+1问题

七、一级缓存


一、高级查询+分页:

核心代码示意图

Notes:

1.动态SQL语句中<WHERE>可以使用<trim>标签表示,要配置好前缀和后缀

 2.采用include可以外部引入资源标签

3.limit #{start}通过类接口中的getStart()赋值

分页 start: (page-1)*row

还需要额外定义一个服务类服务接口

二、#和$的区别

#通过占位符的方式.

 $直接拼接到SQL中.

三、使用注解的方式

1.配置映射 

Notes:

1.使用注解的方式写起来的确很方便,但是并不利于理解

2.采用@Options()标签可以设置自增长的字段

3.别名问题采用@Results()

2.使用@Param的注解:

mybatis中的方法都是只支持传入一个参数的. 如果想传入多个参数.

1.在方法参数定义Map集合,把需要传入的参数放入map中.

2.使用@Param注解来解决.

四、many2One 

1.目录: 

2.EmployeeMapper.xml 、test类

1.新建resultdMap来映射关联关系.

many方:

Notes:

1.在配置文件的时候,mapper namespace要正确:

否则在初始化时会报错

Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.mybatis02.EmployeeMapper.save 

2.新增加的XML文件记得注入进去<mappers>中

3.对于关联关系在mang那方配置额外一次查询

4.保存操作保存少的 在保存多的

5.注意resultType和resultMap

 五、延时加载

回顾hibernate中的延时加载.     

many方是正常的对象,one是代理代理.当调用one的非ID和非Class属性的时候采取调用session去查询出结果出来.

myBatis中的延时加载.     

1.在myBatis中默认的延时加载时禁用的.  

   在主配置文件中开启延时加载     lazyLoadingEnabled:默认为false,禁用延时加载.     

<setting name="lazyLoadingEnabled" value="true"/>     

2.many变成代理对象.

class com.day02.many2one.Employee$$EnhancerByCGLIB$$42c5091f   

 当调用many方的任意属性,都会触发one方的加载.     aggressiveLazyLoading:当启用时, 有延迟加载属性的对象在被调用时将会完全加载任意属性。否则, 每种属性将会按需要加载。   

 //配置如下属性,按需加载     

<setting name="aggressiveLazyLoading" value="false"/>     

3.在many方默认的调用equals,clone,hashCode,toString 方法都会出发one方的加载.     

//配置只有调用many方的clone方法才会触发one方加载,.   

 <setting name="lazyLoadTriggerMethods" value="clone"/>

六、N+1问题

1.在查询所有many记录,每个many对应的one都是不同,查询N个many对象,总共会发出N+1条SQL.(性能特别不友好) 使用leftJoin的方式来解决.

七、一级缓存

生命周期:
	和session一样的生命周期.
	通过session.get(1L),session.get(1L),总共两次get方法只会发一条SQL.第二次使用的是一级缓存的内容
	
	//清除一级缓存中内容
	session.clearCache();

针对数据量大的时候,使用分页+clearCache()及时清除缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忆_恒心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值