- 一级缓存:一级缓存的作用域是SQlSession, Mabits默认开启一级缓存
- 在同一个SqlSession中,执行相同的SQL查询时;第一次会去查询数据库,并写在缓存中,第二次会直接从缓存中取
- 内部缓存使用一个HashMap,key为hashcode+statementId+sql语句,Value为查询出来的结果集映射成的java对象
- SqlSession执行insert、update、delete等操作commit后会清空该SQLSession缓存
- 一级缓存最多缓存1024条SQL
- 二级缓存:是mapper级别的,Mybatis默认是没有开启二级缓存的
- mapper以命名空间为单位创建缓存数据结构,结构是 map
- 通过 CacheExecutor 实现的。CacheExecutor 是 Executor 的代理对象。所有的查询操作,在 CacheExecutor 中都会先匹配缓存中是否存在
- key: MapperID+offset+limit+Sql+所有的入参
- sql注入
- 代码层防止sql注入攻击的最佳方案就是sql预编译:推荐用
#{para}
(会对传入的数据加双引号),而不是${para}
(直接拼接)
- 代码层防止sql注入攻击的最佳方案就是sql预编译:推荐用
- 多参数传递:
#{}
里面的数字代表你传入参数的顺序@Param
注解传参:#{}
里面的名称对应的是注解@Param
括号里面修饰的名称- Map传参法:不推荐
上一篇
Java面试-Spring-基础
2024-06-13
下一篇
Java面试-Redis-基础
2024-06-13