Java-MyBatis 框架之延迟加载、缓存和分页

第一节:性能优化

1.1 延迟加载

1.1.1 什么是延迟加载

  resultMap中的association和collection标签具有延迟加载的功能。

延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。这样会大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

1.1.2 设置延迟加载

  Mybatis默认是不开启延迟加载功能的,我们需要手动开启。需要在SqlMapConfig.xml文件中,在标签中开启延迟加载功能。


    
    
    
    

Java-MyBatis 框架之延迟加载、缓存和分页_第1张图片

 

1.2 MyBatis缓存

Mybatis的缓存,包括一级缓存和二级缓存:

    一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
    
    级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
    一级缓存是默认使用的。二级缓存需要手动开启。

二级缓存

使用 标签来定义是否进入缓存

二级缓存需要提交事务,才会生效。

原因:用于全局共享的数据,还是在操作数据的事务结束后再生效为好。

 

1.2.1 一级缓存

第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息。得到用户信息,将用户信息存储到一级缓存中。

如果sqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

**** 如果是执行两次service调用查询相同 的用户信息,不走一级缓存,因为session方法结束,sqlSession就关闭,一级缓存就清空。

 

第二节:分页查询

 PageHelper的使用

第一步:添加依赖

依赖信息如下:



  com.github.pagehelper
  pagehelper
  5.1.6

 

第二步:配置pageHelper插件


		
		
		
			
			
			
			

		

 

第三步:编写代码测试

@Test
public void queryAll(){
    PageHelper.startPage(1, 3);
    PageHelper.orderBy("id");
    List list = userMapper.queryAll();
    PageInfo p=new PageInfo(list);
    for (User user : list) {
    System.out.println(user.toString());
    }
    System.out.println(p.getPages());
    System.out.println(p.getPageSize());
    System.out.println(p.getPageNum());
    System.out.println(p.getOrderBy());
}

 

你可能感兴趣的:(Java-MyBatis 框架之延迟加载、缓存和分页)