Mybatis分页插件


Mybatis分页

1,使用普通方式分页:

  1. 在映射文件中设置分页语句和设置总条数语句:

    <select id="getByPage" resultType="User">
    	SELECT * FROM `user` LIMIT #{start},#{pageSize}
    </select>
    <select id="count" resultType="java.lang.Integer">
    	SELECT COUNT(1) FROM `user`
    </select>
    
  2. 在接口中定义:

    List<User> getByPage(@Param("start")Integer start,@Param("pageSize")Integer pageSize);
    Integer count();
    
  3. 业务层:

    int start = (curPage-1)*pageSize;
    List<User> list = session.getMapper(UserMapper.class).getByPage(start,pageSize);
    

2,基于PageHelper实现分页:

  1. 导入jar包:

    1.pagehelper-4.1.6.jar:分页插件
    2.jsqlparser-0.9.5.jarpageHelper的依赖包

  2. mybatis-config.xml中配置分页插件:

    <plugins>
    	<plugin interceptor="com.github.pagehelper.PageHelper">
    		<property name="dialect" value="mysql"/>
    	</plugin>
    </plugins>
    
  3. mapperservice层都做查询所有处理:

    1.mapper中的SQL语句后面不能添加“;”,否则报错
    2.不需要写分页SQL语句,因为插件会自动加上limit ?,?

  4. servlet:

    int curPage = 1;
    int pageSize = 5;
    String number = request.getParameter("number");
    if(number!=null){
    	curPage = Integer.parseInt(number);
    }	
    PageHelper.startPage(curPage,pageSize); //设置分页参数 PageHelper.startPage(当前页,每页显示条数)
    List<User> list = us.findAll();
    PageInfo<User> pageInfo = new PageInfo<User>(list); //把当前页的list 封装成了 pageInfo
    request.setAttribute("pageInfo", pageInfo);
    request.getRequestDispatcher("showByChaJian.jsp").forward(request, response);
    
  5. 页面使用:

    <c:forEach var="u" items="${pageInfo.list }">
    	${u.userId }
    </c:forEach>
    第${pageInfo.pageNum }页|共${pageInfo.pages }页|共${pageInfo.total }条数据
    <c:choose>
    	<c:when test="${pageInfo.pageNum==1 }">
    		首页 上一页
    	</c:when>
    	<c:otherwise>
    		<a href="user?method=showByChaJian&number=1">首页</a>
    		<a href="user?method=showByChaJian&number=${pageInfo.pageNum-1 }">上一页</a>
    	</c:otherwise>
    </c:choose>    	
    <c:choose>
    	<c:when test="${pageInfo.pageNum==pageInfo.pages }">
    		下一个  尾页
    	</c:when>
    	<c:otherwise>
    		<a href="user?method=showByChaJian&number=${pageInfo.pageNum+1 }">下一页</a>
    		<a href="user?method=showByChaJian&number=${pageInfo.lastPage }">尾页</a>
    	</c:otherwise>
    </c:choose>
    

3、mybatis中的缓存机制:

  1. 作用:把数据库的数据放在内存中,直接从内存中取出数据,提高读取效率。
  2. mybatis中的缓存
    1、一级缓存:默认打开
    使用范围:session范围。
    2、二级缓存:默认不打开。替代技术:redis。
    使用范围:sessionFactory
    开启二级缓存的步骤:
    1、在mybatis-config.xml中添加:<setting name="cacheEnabled" value="true"/>
    2、在mapper映射文件中开启二级缓存:<cache/>
    3、在某个sql语句的标签上设置:useCache="true"
    4、实体类做序列化处理:public class User implements Serializable{}
  3. 执行流程:
    遇到某个查询方法,先去查询二级缓存。若二级缓存中有结果对象,则直接取出使用。若没有该对象,则去查询一级缓存,若一级缓存中有该sql语句,则直接取出使用。若一级缓存中没有该sql语句,则会从数据库查询,返回结果。再把结果放入到一级缓存中。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM