mybatis入门基础(十)-----分页查询

到目前为止,我们介绍的Mybatis种种查询都是一次性的查询出所有结果并返回给上层。但是,在实际开发过程中,在大量数据存在的情况下,是很少这么做的。本文,我们将从逻辑分页,物理分页两种情况出发,分别介绍这两种方式。马上开始我们的正文部分吧。

准备工作:

a.操作系统 :win7 x64

b.基本软件:MySQL,Mybatis,SQLyog

--------------------------------------------------------------------------------------------------------------------------------------------------------

1.首先,看看我们数据中的内容,如果有看过前文的读者,可以直接沿用数据库即可。具体内容如下:

mybatis入门基础(十)-----分页查询

2.创建本例我们使用的工程,Mybatis11,工程结构如下:

mybatis入门基础(十)-----分页查询

3.UserInfo为PO对象,属性与数据库表对应即可。【下文中没有给出的文件,请参考前文】

-------------------------------------------------------------------------------------------------------------------------------------------------------

一。逻辑分页:即虽然看起来实现了分页的功能,但实际上是将查询的所有结果放置在内存中,每次都从内存获取。这种情况适用于数据量较少的情况。请各位看官特别留意。【因此,在实际开发中,基本不会使用到逻辑分页的功能,下面的例子作为参考即可】

1.在UserInfoMapper.xml文件中增加对应查询语句,如下:

[html] view plain copy
  1. <select id="selectUserInfo" resultMap="UserInfoResult">  
  2.     select * from userinfo  
  3. </select>  

2.在UserInfoDao.java中增加对应接口,如下:

[java] view plain copy
  1. List<UserInfo> selectUserInfo(RowBounds rowBounds);  

3.增加对应单元测试方法,如下:

[java] view plain copy
  1. @Test  
  2.     public void testSelect() {  
  3.         try {  
  4.             UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
  5.             int start = 0;//正确的叫法应该是offset  
  6.             int pagesize = 3;//<span style="font-family: 'Microsoft YaHei';">正确的叫法应该是limit</span>  
  7.             RowBounds rowBounds = new RowBounds(start,pagesize);  
  8.             List<UserInfo> re = userInfo.selectUserInfo(rowBounds);  
  9.             for(UserInfo ui:re){  
  10.                 System.out.println(ui);  
  11.             }  
  12.         } catch (Exception e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.     }  
4.运行单元测试方法,观察控制台输出即可。

【再次提醒:上面的这种方式在实际性能表现上存在隐患,各位读者最好还是不要使用,作为参考即可】

-------------------------------------------------------------------------------------------------------------------------------------------------------
二,物理分页:这种分页方法从底层上就是每次只查询对应条目数量的数据,从而实现了真正意义上的分页。

1.在UserInfoMapper.xml文件中增加对应查询语句,如下:

[html] view plain copy
  1. <select id="selectUserInfoByMap" parameterType="Map" resultMap="UserInfoResult">  
  2.     select * from userinfo  
  3.     <if test="start!=null and pagesize!=null">  
  4.         limit #{start},#{pagesize}  
  5.     </if>  
  6. </select>  
2.在UserInfoDao.java中增加对应接口,如下:

[java] view plain copy
  1. List<UserInfo> selectUserInfoByMap(Map<String,Object> map);  
3.增加对应单元测试方法,如下:

[java] view plain copy
  1. @Test  
  2. public void testSelectByMap() {  
  3.     try {  
  4.         Map<String,Object> map = new HashMap<String,Object>();  
  5.         UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);  
  6.         map.put("start",0);  
  7.         map.put("pagesize",4);  
  8.         List<UserInfo> re = userInfo.selectUserInfoByMap(map);  
  9.         for(UserInfo ui:re){  
  10.              System.out.println(ui);  
  11.         }  
  12.     } catch (Exception e) {  
  13.         e.printStackTrace();  
  14.     }  
  15. }  
4.运行单元测试方法,观察控制台输出即可。

-------------------------------------------------------------------------------------------------------------------------------------------------------

至此,Mybatis最入门---分页查询(逻辑分页与SQL语句分页)结束


备注:

本文我们演示的方法,仅作为参考使用,实际开发使用的分页查询将在下文中详细讲述给大家,敬请期待!