Mybatis分页
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>
-
在接口中定义:
List<User> getByPage(@Param("start")Integer start,@Param("pageSize")Integer pageSize); Integer count();
-
业务层:
int start = (curPage-1)*pageSize; List<User> list = session.getMapper(UserMapper.class).getByPage(start,pageSize);
2,基于PageHelper实现分页:
-
导入jar包:
1.
pagehelper-4.1.6.jar
:分页插件
2.jsqlparser-0.9.5.jar
:pageHelper
的依赖包 -
在
mybatis-config.xml
中配置分页插件:<plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql"/> </plugin> </plugins>
-
mapper
和service
层都做查询所有处理:1.
mapper
中的SQL语句后面不能添加“;”,否则报错
2.不需要写分页SQL语句,因为插件会自动加上limit ?,?
-
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);
-
页面使用:
<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中的缓存机制:
- 作用:把数据库的数据放在内存中,直接从内存中取出数据,提高读取效率。
- 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{}
- 执行流程:
遇到某个查询方法,先去查询二级缓存。若二级缓存中有结果对象,则直接取出使用。若没有该对象,则去查询一级缓存,若一级缓存中有该sql语句,则直接取出使用。若一级缓存中没有该sql语句,则会从数据库查询,返回结果。再把结果放入到一级缓存中。