分页:

PageHelper的优点是,分页和Mapper.xml完全解耦。实现方式是以插件的形式,对Mybatis执行的流程进行了强化,添加了总数count和limit查询。属于物理分页。

一、首先注入依赖:

  1. <dependency>
  2. <groupId>com.github.pagehelper</groupId>
  3. <artifactId>pagehelper</artifactId>
  4. <version>4.2.1</version>
  5. </dependency>

二、配置xml引入插件:

  1. <!--插件 分页-->
  2. <!--<plugins>-->
  3. <!--<plugin interceptor=""></plugin>-->
  4. <!--</plugins>-->
  5. <plugins>
  6. <plugin interceptor="com.github.pagehelper.PageHelper">
  7. <property name="dialect" value="mysql"></property>
  8. </plugin>
  9. </plugins>

三、查询时调用:指定页码(pageNum)和每页的大小(pageSize)分页,pageNum - 第N页, pageSize - 每页M条数

  PageHelper.startPage([pageNum],[pageSize]);

  List<?> pagelist = queryForList( xxx.class, "queryAll" , param);

  1. PageHelper.startPage(2,2);

四、显示某些值:

PageHelper的其他API

String orderBy = PageHelper.getOrderBy();    //获取orderBy语句

Page<?> page = PageHelper.startPage(Object params);

Page<?> page = PageHelper.startPage(int pageNum, int pageSize);

Page<?> page = PageHelper.startPage(int pageNum, int pageSize, boolean isCount);

Page<?> page = PageHelper.startPage(pageNum, pageSize, orderBy);

Page<?> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable);    //isReasonable分页合理化,null时用默认配置

Page<?> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable, isPageSizeZero);    //isPageSizeZero是否支持PageSize为0,true且pageSize=0时返回全部结果,false时分页,null时用默认配置

  1. PageInfo pageInfo=new PageInfo(search);
  2. System.out.println("总条数:"+pageInfo.getTotal());
  3. System.out.println("总页数:"+pageInfo.getPages());
  4. System.out.println("当前页数:"+pageInfo.getPageNum());
  5. System.out.println("显示的条数:"+pageInfo.getPageSize());
  6. System.out.println("最后一条是第:"+pageInfo.getEndRow());
  7. System.out.println("toString:"+pageInfo.getList());

LRU算法缓存:

把数据预先加载到内存中,当真正需要数据的时候,访问速度就会加快

加快程序运行的速度

1) 一级缓存
session SqlSession 级别缓存, 默认开启,

2) 二级缓存
SqlSessionFactory 级别缓存, 可以跨session存在, 配置
对象要实现 implements Serializable ,序列化接口

一级缓存和二级缓存区别 ?
二级缓存 范围广,存在时间久
二级缓存,不建议使用, 不会变的数据,量可控, 配置相关数据,菜单

缓存策略:
如果数据量大于缓存的大小时候,如果处理?

FIFO: 先进先出
LRU: 最近最常使用

  1. <!--配置算法缓存-->
  2. <cache
  3. eviction="LRU"
  4. flushInterval="60000"
  5. size="1024"
  6. readOnly="true"
  7. />
  1. <settings>
  2. <setting name="cacheEnabled" value="true"/>
  3. </settings>

源码:

  1. HouseDAO.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.etc.dao.HouseDAO">
  4.  
  5. <!--配置算法缓存-->
  6. <cache
  7. eviction="LRU"
  8. flushInterval="60000"
  9. size="1024"
  10. readOnly="true"
  11. />
  12.  
  13. <!--查询单个条件 相当于switch=choose when=case otherwise=default-->
  14. <select id="searchSim" resultType="house">
  15. select * from t_house
  16. <where>
  17. <choose>
  18. <when test="title!=null">
  19. title like '%${title}%'
  20. </when>
  21. <when test="price!=null">
  22. price=#{price}
  23. </when>
  24. <otherwise>
  25. 1=1
  26. </otherwise>
  27. </choose>
  28. </where>
  29. </select>
  30. <!--查询多个条件 if 如果存在就拼接
  31. select * from t_house where title like '%?%' and price=?
  32. -->
  33. <select id="searchOdd" resultType="house">
  34. select * from t_house
  35. <where>
  36. <if test="title!=null">
  37. title like '%${title}%'
  38. </if>
  39. <if test="price!=null">
  40. and price=#{price}
  41. </if>
  42. </where>
  43. </select>
  44. <!--查询in collection集合名 item:参数名 open close=() separator用逗号拼接
  45. select * from t_house where id in (1,2,3)
  46. -->
  47. <select id="searchByIds" resultType="house">
  48. select * from t_house where id in
  49. <foreach collection="ids" item="id" open="(" close=")" separator=",">
  50. #{id}
  51. </foreach>
  52. </select>
  53. <!--更新(只更新存在的值)-->
  54. <update id="update">
  55. update t_house
  56. <set>
  57. <if test="title!=null">
  58. title=#{title},
  59. </if>
  60. <if test="price!=null">
  61. price=#{price}
  62. </if>
  63. </set>
  64. where id =#{id}
  65. </update>
  66.  
  67. </mapper>

mybatis-config.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC
  3. "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.  
  7. <settings>
  8. <setting name="cacheEnabled" value="true"/>
  9. </settings>
  10.  
  11. <!-- 别名 -->
  12. <typeAliases>
  13. <package name="com.etc.entity"></package>
  14. </typeAliases>
  15.  
  16. <!--插件 分页-->
  17. <!--<plugins>-->
  18. <!--<plugin interceptor=""></plugin>-->
  19. <!--</plugins>-->
  20. <plugins>
  21. <plugin interceptor="com.github.pagehelper.PageHelper">
  22. <property name="dialect" value="mysql"></property>
  23. </plugin>
  24. </plugins>
  25.  
  26. <!-- 配置环境变量 -->
  27. <!-- 开发 测试 预生产 生产 -->
  28. <environments default="development">
  29. <environment id="development">
  30. <transactionManager type="JDBC"/>
  31. <dataSource type="POOLED">
  32. <property name="driver" value="com.mysql.jdbc.Driver"/>
  33. <property name="url"
  34. value="jdbc:mysql://127.0.0.1:3310/mybatis"/>
  35. <property name="username" value="root"/>
  36. <property name="password" value="123456"/>
  37. </dataSource>
  38. </environment>
  39. </environments>
  40.  
  41. <!-- 配置mappers -->
  42. <mappers>
  43. <mapper resource="HouseDAO.xml"></mapper>
  44. </mappers>
  45.  
  46. </configuration>
  1. HouseTest
  1. package com.etc.dao;
  2.  
  3. import com.etc.entity.House;
  4. import com.github.pagehelper.PageHelper;
  5. import com.github.pagehelper.PageInfo;
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10. import org.junit.Test;
  11.  
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.util.List;
  15.  
  16. public class HouseTest {
  17.  
  18. @Test
  19. public void test() throws IOException {
  20. //加载配置文件 会话工厂
  21. InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
  22. SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
  23.  
  24. //会话 ==相当于数据库连接
  25. SqlSession session=sqlSessionFactory.openSession();
  26.  
  27. HouseDAO houseDAO=session.getMapper(HouseDAO.class);
  28.  
  29. House house=new House();
  30. // house.setTitle("he");
  31. // house.setPrice(1300.0);
  32. // house.setId(1);
  33.  
  34. // List<House> search=houseDAO.searchSim(house);
  35.  
  36. //分页插件使用
  37. PageHelper.startPage(2,2);
  38. List<House> search=houseDAO.searchOdd(house);
  39. // List<House> search=houseDAO.searchByIds(Arrays.asList(1,2,3));
  40. // houseDAO.update(house);
  41. for (House h:search)
  42. System.out.println(h);
  43.  
  44. //实例化这个才能使用下边的条件查询
  45. PageInfo pageInfo=new PageInfo(search);
  46. System.out.println("总条数:"+pageInfo.getTotal());
  47. System.out.println("总页数:"+pageInfo.getPages());
  48. System.out.println("当前页数:"+pageInfo.getPageNum());
  49. System.out.println("显示的条数:"+pageInfo.getPageSize());
  50. System.out.println("最后一条是第:"+pageInfo.getEndRow());
  51. System.out.println("toString:"+pageInfo.getList());
  52.  
  53. session.commit();
  54. session.close();
  55.  
  56. // System.out.println("第二次查询");
  57. //
  58. // SqlSession session2=sqlSessionFactory.openSession();
  59. //
  60. // HouseDAO houseDAO2=session2.getMapper(HouseDAO.class);
  61. //
  62. // List<House> search2=houseDAO2.searchOdd(house);
  63. // for (House h:search2)
  64. // System.out.println(h);
  65. //
  66. // session2.commit();
  67. // session2.close();
  68.  
  69. }
  70. }

mybatis PageHelper分页插件 和 LRU算法缓存读取数据的更多相关文章

  1. mybatis pagehelper分页插件使用

    使用过mybatis的人都知道,mybatis本身就很小且简单,sql写在xml里,统一管理和优化.缺点当然也有,比如我们使用过程中,要使用到分页,如果用最原始的方式的话,1.查询分页数据,2.获取分 ...

  2. mybatis pageHelper 分页插件使用

    转载大神 https://blog.csdn.net/qq_33624284/article/details/72828977 把插件jar包导入项目(具体上篇有介绍http://blog.csdn. ...

  3. 关于Spring+mybatis+PageHelper分页插件PageHelper的使用策略

    把插件jar包导入项目(具体上篇有介绍http://blog.csdn.net/qq_33624284/article/details/72821811) spring-mybatis.xml文件中配 ...

  4. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  5. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  6. Mybatis的分页插件PageHelper

    Mybatis的分页插件PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper  文档地址:http://git.oschina. ...

  7. SpringBoot集成MyBatis的分页插件 PageHelper

    首先说说MyBatis框架的PageHelper插件吧,它是一个非常好用的分页插件,通常我们的项目中如果集成了MyBatis的话,几乎都会用到它,因为分页的业务逻辑说复杂也不复杂,但是有插件我们何乐而 ...

  8. SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页

    SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页 **SpringBoot+Mybatis使用Pagehelper分页插件自动分页,非常好用,不用在自己去计算和组装了. ...

  9. Mybatis之分页插件pagehelper的简单使用

    最近从家里回来之后一直在想着减肥的事情,一个月都没更新博客了,今天下午没睡午觉就想着把mybatis的分页插件了解一下,由于上个月重新恢复了系统,之前创建的项目都没了,又重新创建了一个项目. 一.创建 ...

随机推荐

  1. springboot-mybatis双数据源配置

    yml文件 spring: datasource: test1: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost: ...

  2. springboot自定义错误页面(转)

    方法一:Spring Boot 将所有的错误默认映射到/error, 实现ErrorController @Controller @RequestMapping(value = "error ...

  3. 洛谷 P4205 [NOI2005]智慧珠游戏 DFS

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P4205 [NOI2005]智慧珠游戏 题目描述 智慧 ...

  4. addEventListener-第三个参数 useCapture

    转载自:http://www.cftea.com/c/2008/10/MQ0U26KP565GNM5Q.aspaddEventListener-开始 addEventListener-事件流 addE ...

  5. django模型中auto_now和auto_now_add的区别

    auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间. auto_now_add为添加时的时间,更新对象时不会有变动. 补充: 创建类时:DateField表示年月日 DateTime ...

  6. iOS app发布流程

    http://www.xuebuyuan.com/1980497.html http://blog.csdn.net/alincexiaohao/article/details/38725367 ap ...

  7. NPOI操作、导出Excel

    //使用NPOI操作Excel private void ExcelNPOI(System.Data.DataTable dt, HttpContext context) { IWorkbook wo ...

  8. hdu1730 尼姆博弈

    抽象一下把距离当做石子个数.虽然在这里石子个数可以增加,但是不管怎么增加,不会影响结果,因为你增加了,必须会有减少的. 所以类似取石子,观察平衡状态,如果(x2-x1-1)^...==0,必输. wa ...

  9. MySQL运算符和函数

    运算符 1.算数运算符 加(+):mysql> SELECT 1+1; 减(-):mysql> SELECT 3-2; 乘(*):mysql> SELECT 2*3; 除(/):my ...

  10. 《C程序设计语言》笔记(一)

    一:导言 1:printf中的格式化字符串: %ld                    按照long整型打印 %6d                   按照十进制整数打印,至少6个字符宽,不够的 ...