Java面试-Mybatis-基础


  • 一级缓存:一级缓存的作用域是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} (直接拼接)
  • 多参数传递:#{} 里面的数字代表你传入参数的顺序
    • @Param注解传参:#{}里面的名称对应的是注解@Param括号里面修饰的名称
    • Map传参法:不推荐

文章作者: 钱不寒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 钱不寒 !
  目录