延迟加载(按需加载)
在查询时,某个对象有关联对象。如果只要主对象的值,暂不需要关联对象的值
此时我们就可开启延迟加载,如不开启延迟加载,虽然你不要关联对象的数据,但是MyBatis还是会做查询
注意:延迟加载只在分步情况下有效
开启方式一
全局开启
<setting name="lazyLoadingEnabled" value="true"/>
开启方式二
局部开启(association collection 上开启)
fetchType:lazy -- 开启延迟加载 / eager -- 关闭延迟加载
<association property="category" javaType="category" column="cid" select="getCatByCid" fetchType="lazy"></association>
MyBaits的缓存
作用
减小服务器压力
提高查询速度
一级缓存(sqlSession级别)
同个sqlSession中,若多次请求相同数据,后面数据请求可来自缓存(一级缓存默认开启)
public static void main(String[] args) throws IOException {
SqlSession session = new MyBatisUtil().getSqlSession();
GoodsDao goods = session.getMapper(GoodsDao.class);
// 首次加载
List<Goods> selgoods = goods.selGoods();
for (Goods g : selgoods) {
System.out.println(g.getPName());
}
// 清除缓存(每次调用只执行1次) -- 一级缓存(默认在关闭sqlSession时清除)
// 清除数据:将重新查询后加载数据
// 不清除缓存:直接调用相同查询缓存结果,无需重新查询数据
session.clearCache();
// 二次加载相同数据
List<Goods> selgoods2 = goods.selGood