MyBatis入门——day4


一 . 动态SQL

  动态SQL的意义在于,在 SQL语句的部分考虑各种参数情况后直接写死固定,用户只需要 改动 java的部分 即可 

  1 . 搭建环境

    1 . 实体类:                        

    2 . 接口:

二 . if 

  上面的 where 1=1不规范,应将 where 关键字 去掉后加入 where 标签

三 .  choose(类似于switch语句)+  when

  PS: 类似于上面这样先套一个where标签,可以解决当第一个匹配条件失效时,因为第二个条件开头是 and 而出现的语法错误

    所以若语句开头为 “and” 和 “or” 时,where 会自动去除,以保证语句没有语法错误

四 . set  +  if

  1 .   此处的逗号和上面 choose_when 中的 and一样,如果第一个条件不成立,则语句会出现错误

    set 标签可以避免这种情况,自动将开头位置的逗号删除

五 . SQL片段

  将一段通用的SQL语句作为一个片段模板,避免重复书写,直接使用

  1 . 抽取公共部分

   2 . 在别处使用 include标签 的 refid 进行引用

   PS:1 . 最好基于单表

       2 . 不要包含 where标签,否则拼接可能出错

六 . foreach

  1 . 传递一个万能的 map 进去,map中包含一个 id

 总结:最好是先将SQL写出来,再用动态SQL的思路去改写 

七 . 缓存

  1 . 什么是缓存:存在内存中的临时数据

  2 . 为什么使用缓存:减少与数据库的交互次数,减少系统开销,提高效率

  3 . 什么样的数据适合使用缓存:经常查询且不经常改变

  4 .  MyBatis系统中默认定义了两级缓存:一级缓存二级缓存

    默认情况下,只有一级缓存开启,称为本地缓存(SqlSession级别的缓存)

    二级缓存需要手动开启和配置(基于namespace级别的缓存)

    为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存

  5 . 一级缓存

    从下图可知,SQL语句只查询了一次,输出第二行时没有进入数据库查询

    True 表示使用的是同一种对象

     

  6 . 缓存失效的情况:

    1 . 查询不同的东西  

    2 . 增删改查操作会改变原来的数据,所以会刷新缓存

  7 . 二级缓存

    因为一级缓存的作用域太低,所以诞生了二级缓存

    二级缓存也叫全局缓存,基于namespace级别

    一个namespace对应一个二级缓存

     1.开启全局缓存

     2 . 使用或自定义

  总结:

    1 . 查询到对的数据默认先放在一级缓存中

    2 . 当会话提交和关闭时,一级缓存中的的数据才能转到二级缓存中

  8 . 缓存原理

                                    用户

     查找数据的顺序:

            1 . 先看二级缓存

            2 . 再看一级缓存

            3 . 如果二级一级缓存都没有,最后再走数据库

相关