Mybatis的缓存机制 以及pageHelper分页

缓存: 暂时的存储一些数据;加快系统的查询速度..

mybatis的缓存机制:

Map:能保存查询的数据
一级缓存:线程级别的缓存,本地缓存,SqlSession级别的缓存(只要是之前查询过的数据,mybatis就会保存在缓存中一个map,下次获取直接从缓存中拿)
二级缓存: 全局范围内的缓存;除了当前线程sqlSession可以用以外,其他的sqlSession也可以用

一级缓存失效的几种情况:

  1. 一级缓存是sqlSession级别的缓存,若果每一次会话都创建一个新的sqlsession会话,就会使用不同的一级缓存,只有在 同一个sqlSession期间查询到的数据才会保存到sqlSession这个缓存中,下次使用这个sqlSession查询相同的数据才会在这个缓存中拿.
    2)同一个方法,不同的参数,由于之前可能没查过,所以还会发新的sql
  2. 在这个sqlSession中执行任何一次增删改操作,会清空sqlSession中的缓存
    4)手动清空缓存 openSession.clearCache();方法
  • 每次查询之前会去一级缓存中查有没有,没有的话才会去数据库查询
二级缓存
  • 二级缓存是全局作用域的缓存
  • 二级缓存默认不开启,需要手动配置
  • mybatis提供二级缓存的接口以及实现,缓存实现要求pojo实现Serializable接口
  • 二级缓存在sqlSession关闭或者提交之后才生效

pageHelper分页

导入依赖
  
            com.github.pagehelper
            pagehelper
            4.1.0
        

控制器

 @RequestMapping("/getAll")
    public String getAll(@RequestParam(value = "pn",defaultValue = "1") Integer pn, Model model){
        //紧跟他的查询就是一个分页查询
        PageHelper.startPage(pn,5);
        List teachers = teacherService.getAll();

        //将查询到的结果使用:将查询到的结果放到pageInfo中,这个pageInfo就有非常多的内容可以用
        //第二个参数是连续要显示的页码
        PageInfo pageInfo = new PageInfo<>(teachers,6);
        System.out.println("当前页码:"+pageInfo.getPageNum());
        System.out.println("总页码"+pageInfo.getPages());
        System.out.println("总记录数"+pageInfo.getPageSize());
        System.out.println("当前页有多少条记录"+pageInfo.getSize());
        System.out.println("分页每页显示多少条"+pageInfo.getPageSize());
        System.out.println("获取前一页"+pageInfo.getPrePage());
        System.out.println("获取后一页"+pageInfo.getNextPage());
        System.out.println("获取查询到的list"+pageInfo.getList());
        int[] navigatepageNums = pageInfo.getNavigatepageNums();
        model.addAttribute("pageInfo",pageInfo);
        return "index.jsp";
    }

index.jsp

   
        
            首页
            上一页
           
               ${p}
           
            下一页
            尾页
        
    

效果图


image.png

你可能感兴趣的:(Mybatis的缓存机制 以及pageHelper分页)