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語句,則會從數據庫查詢,返回結果。再把結果放入到一級緩存中。