思考:為什么需要分頁?
- 減少數據的處理量
- 增加頁面的可閱讀性
1、limit基礎使用
# 語法
select * from table limit startIndex,pageSize;
# 從第5條數據開始,顯示10行
select * from table limit 4,10;
# limit 第二個參數為-1時,表示從第一個參數開始,查詢后面的所有記錄
# 現在已經不能使用了,詳情見:https://bugs.mysql.com/bug.php?id=2037
#如果只給定一個參數,它表示返回最大的記錄行數目:
select * from table limit 5; //檢索前5個記錄行
#等價於select * from table limit 0,5;
2、使用limit實現分頁
具體步驟:
-
編寫Mapper接口
public interface UserMapper { // 分頁查詢 List<User> getUserByLimit(Map<String, Integer> map); }
-
編寫Mapper.xml文件
<select id="getUserByLimit" parameterType="map" resultMap="userMap"> select * from mybatis.user limit #{startIndex},#{pageSize} </select>
-
測試類中傳入參數
@Test public void getUserByLimit() { SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String, Integer> map = new HashMap<>(); map.put("startIndex",1); map.put("pageSize",2); List<User> userList = userMapper.getUserByLimit(map); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
3、使用RowBounds分頁
我們除了使用Limit在SQL層面實現分頁,也可以使用RowBounds在Java代碼層面實現分頁,當然此種方式作為了解即可,此種方式現在已經不推薦使用了
具體步驟:
-
定義Mapper接口
public interface UserMapper { List<User> getUserByRowBounds(); }
-
編寫Mapper.xml文件
<select id="getUserByRowBounds" resultMap="userMap"> select * from mybatis.user </select>
-
編寫測試類,使用RowBounds
@Test public void getUserByRowBounds() { SqlSession sqlSession = MyBatisUtils.getSqlSession(); int currentPage = 2; //第幾頁 int pageSize = 2; //每頁顯示幾個 int startIndex = (currentPage - 1) * pageSize; // 從第幾行開始查詢 RowBounds rowBounds = new RowBounds(startIndex,pageSize); //通過session.**方法進行傳遞rowBounds,[此種方式現在已經不推薦使用了] List<User> userList = sqlSession.selectList("com.jh.mapper.UserMapper.getUserByRowBounds", null, rowBounds); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
4、使用分頁插件分頁
使用pageHelper插件進行分頁
了解即可,萬一以后公司的架構師說要使用,你需要知道它!