查询当前栏目的所有子孙栏目。
子孙栏目:子栏目的子栏目就是孙栏目
实体:
这里的pid就是父节点
这个list 就是子节点又包含的子节点
这样就形成了递归。上面的sql语句一直循环到查询不到为止
延迟加载:
延迟加载的前提:sql语句要分开写
分类:
直接加载 :
有关联关系的,在查询的时候会一次性的把联接的表的内容都查出来。即使是多条查询语句,分开写,也是一次性执行。
侵入式延迟:
第一次执行,只执行第一条语句,一旦要使用查询对象的属性(无论第一次的查询结果中是否存在这个属性),就会执行其他查询。(还是会执行)
深度延迟:最推荐的延迟方式
用到这个对应的属性才会执行对应的查询,不用就不会执行。
实例:
正常执行两次查询,执行了两句sql。
注释之后,发现不用显示这个信息,但是还是会执行这个sql,会影响效率。
解决方法:settings
配置之后,加了断点,会发现执行第一句的时候 只执行了一句sql。这就是
侵入式延迟,还是会执行其他的sql
深度延迟:
关键字:AggressiveLazyLoading: (不要拼错,下图就拼错了)
默认为真 侵入式延迟。
深度延迟 改成false
缓存
缓存的优点:数据一般都储存在数据库中,用户第一次请求数据,必须要从数据库中查询。
如果有缓存,查询的数据会放在缓存里面。下次再查询的时候,若有同样的数据,会先去缓存里面找,
缓存中有就直接使用缓存数据。缓存没有最后再查数据库。
缓存数据的存储位置:内存,硬盘文件
一级缓存
MyBatis 一级缓存默认开启,不能关闭。
依赖于sqlSession, sqlSession一旦关闭,一级缓存的数据就没有了
二级缓存
http://www.woniuxy.com/playvideo/18104
缓存 的底层是个Map,Key:查询依据:Value就是依据。
清空缓存,就是将对应的value值赋值为空,没有删除Map中该条数据。
二级缓存的总开关,默认为true 若设置为false,在次配置文件里面开缓存就没用了。
次级配置,若主级关了这里开就没用了。
第三方插件:ehcahe
第三方的二级缓存插件
jar包: 核心jar包(核心基本功能) 整合jar包(MyBatis对ehcache的整合包。)
lib:核心jar包 :直接拖到项目的lib里面
红圈圈到的:依赖包
解压这个core,获取配置文件。
指定使用ehcache 来管理。
ehcache不需要序列化(实体类实现序列化接口的操作) 就可以运行。(自带的二级缓存需要序列化)
默认存放在这个位置。
注解形式:可以代替xml文件
仅作了解
逆向工程:
MyBatis 官方提供了一个开源项目,可以自动生成单表的增删改查。多表的功能没有
修改配置文件
JDBC的四大参数
实体类对应的包名
映射文件的包名
接口所在的包名
指定有哪些表
执行主方法