1.6谈一下你对mybatis缓存机制的理解
Mybatis有两级缓存,一级缓存是SqlSession级别的,默认开启,无法关闭;二级缓存是Mapper级别的,二级缓存默认是没有开启的,需要手动开启
- 一级缓存:基础PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,Session中的所有Cache就将清空
- 二级缓存其存储作用域为Mapper(Namespace),使用二级缓存属性类需要实现Serializable序列化接口
- 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了C(增加)/U(更新)/D(删除)操作后,默认该作用域下所有select中的缓存将被clear.
如果你配置了二级缓存,那么查询数据的顺序应该为:二级缓存→一级缓存→数据库。
二级缓存使用步骤
1.mybatis-config.xml开启二级缓存—
2.缓存的实体类要序列化(实现Serializable接口)
3.创建UserMapper.xml,开启二级缓存,
1.8在 mapper 中如何传递多个参数?
(1).在mapper接口中给参数写上@ param
(2).在mapper.xml中给参数写上 #{arg0} , #{arg1}
(3).把多个参数放进一个实体类中传参
(4).把多个参数放入一个 map
1.9 MyBatis 实现一对一有几种方式?具体怎么操作的?
有联合查询和嵌套查询
联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成;
嵌套查询是先查一个表,根据这个表里面的结果的 外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置。
级联的实现:
(2)xml实现:
关联的实现:
(1)注解实现:@Results,@Result,@One
(2)xml实现:

1.10 MyBatis 实现一对多有几种方式,怎么操作的?
级联:查出主表后,再发送一条SQL语句去查询从表中的数据
关联:使用内连接,左连接,右连接等方式操作外键(只发送一条语句)
级联的实现:
(2)xml实现:
关联的实现:
(1)注解实现:@Results,@Result,@Many
(2)xml实现:

1.11 Mybatis 的一级、二级缓存
- 一级缓存:基础PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,Session中的所有Cache就将清空
- 二级缓存其存储作用域为Mapper(Namespace),使用二级缓存属性类需要实现Serializable序列化接口
- 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了C(增加)/U(更新)/D(删除)操作后,默认该作用域下所有select中的缓存将被clear.
如果你配置了二级缓存,那么查询数据的顺序应该为:二级缓存→一级缓存→数据库。
