MyBatis是如何分頁的,分頁插件的原理是什么要出?
1.使用Map來進行包裝數據實現分頁功能
- 使用RowBounds來實現分頁
1.使用Map來進行包裝數據實現分頁功能
SQL映射
<!--查詢所有的用戶信息鸳君,用map分頁實現-->
<select id="getAllMap" resultType="User" parameterType="Map">
SELECT * FROM user limit #{startIndex},#{pageSize}
</select>
DAO實現類
//這個是實現分頁查詢功能(用map來實現的第一種方式)
public List<User> getAll(int currentPage,int pageSize) throws IOException {
SqlSession sqlSession = MybatisUtil.getSession();
Map<String,Integer> map = new HashMap<String, Integer>();
map.put("startIndex",(currentPage-1)*pageSize);
map.put("pageSize",pageSize);
List<User> list = sqlSession.selectList("UserMapper.getAllMap",map);
sqlSession.close();
return list;
}
測試類
public static void main(String[] args) throws IOException {
UserDao userDao = new UserDao();
//這個傳進來的第一個參數是你要顯示第幾頁的數據,第二是你需要沒頁顯示幾條記錄
List<User> list = userDao.getAll(2, 3);
for (User user : list) {
System.out.println(user.toString());
}
}
2. 使用RowBounds來實現分頁
SQL的xml映射
<!--查詢所有用戶的信息患蹂,用RowBounds來實現-->
<select id="getAllRowBounds" resultType="User">
SELECT *FROM user
</select>
DAO實現類
//這個是通過RowBounds來實現查詢功能的分頁操作
public List<User> getAllRowBounds(int currentPage,int pageSize) throws IOException {
SqlSession sqlSession = MybatisUtil.getSession();
/*rowBounds需要的第一個參數就是從數據的哪個下標開始開始查或颊,第二個就是你需要查詢的條數*/
RowBounds rowBounds= new RowBounds((currentPage-1)*pageSize,pageSize);
List<User> list = sqlSession.selectList("UserMapper.getAllRowBounds",
null, rowBounds);
sqlSession.close();
return list;
}
測試類
public class TestRowBounds {
public static void main(String[] args) throws IOException {
UserDao userDao = new UserDao();
List<User> list = userDao.getAllRowBounds(1, 3);
for (User user : list) {
System.out.println(user.toString());
}
}
}
分頁插件的原理
- 基于攔截器攔截待執(zhí)行SQL語句,然后修改最終執(zhí)行SQL語句传于。屬于物理分頁