[一步是咫尺,一步即天涯]
到目前为止,我们介绍的Mybatis种种查询都是一次性的查询出所有结果并返回给上层。但是,在实际开发过程中,在大量数据存在的情况下,是很少这么做的。本文,我们将从逻辑分页,物理分页两种情况出发,分别介绍这两种方式。马上开始我们的正文部分吧。
准备工作:
a.操作系统 :win7 x64
b.基本软件:MySQL,Mybatis,SQLyog
--------------------------------------------------------------------------------------------------------------------------------------------------------1.首先,看看我们数据中的内容,如果有看过前文的读者,可以直接沿用数据库即可。具体内容如下:
2.创建本例我们使用的工程,Mybatis11,工程结构如下:
3.UserInfo为PO对象,属性与数据库表对应即可。【下文中没有给出的文件,请参考前文】
-------------------------------------------------------------------------------------------------------------------------------------------------------
一。逻辑分页:即虽然看起来实现了分页的功能,但实际上是将查询的所有结果放置在内存中,每次都从内存获取。这种情况适用于数据量较少的情况。请各位看官特别留意。【因此,在实际开发中,基本不会使用到逻辑分页的功能,下面的例子作为参考即可】
1.在UserInfoMapper.xml文件中增加对应查询语句,如下:
<select id="selectUserInfo" resultMap="UserInfoResult"> select * from userinfo </select>
2.在UserInfoDao.java中增加对应接口,如下:
List<UserInfo> selectUserInfo(RowBounds rowBounds);
3.增加对应单元测试方法,如下:
@Test public void testSelect() { try { UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class); int start = 0;//正确的叫法应该是offset int pagesize = 3;//<span style="font-family: 'Microsoft YaHei';">正确的叫法应该是limit</span> RowBounds rowBounds = new RowBounds(start,pagesize); List<UserInfo> re = userInfo.selectUserInfo(rowBounds); for(UserInfo ui:re){ System.out.println(ui); } } catch (Exception e) { e.printStackTrace(); } }4.运行单元测试方法,观察控制台输出即可。
【再次提醒:上面的这种方式在实际性能表现上存在隐患,各位读者最好还是不要使用,作为参考即可】
-------------------------------------------------------------------------------------------------------------------------------------------------------
二,物理分页:这种分页方法从底层上就是每次只查询对应条目数量的数据,从而实现了真正意义上的分页。
1.在UserInfoMapper.xml文件中增加对应查询语句,如下:
<select id="selectUserInfoByMap" parameterType="Map" resultMap="UserInfoResult"> select * from userinfo <if test="start!=null and pagesize!=null"> limit #{start},#{pagesize} </if> </select>2.在UserInfoDao.java中增加对应接口,如下:
List<UserInfo> selectUserInfoByMap(Map<String,Object> map);3.增加对应单元测试方法,如下:
@Test public void testSelectByMap() { try { Map<String,Object> map = new HashMap<String,Object>(); UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class); map.put("start",0); map.put("pagesize",4); List<UserInfo> re = userInfo.selectUserInfoByMap(map); for(UserInfo ui:re){ System.out.println(ui); } } catch (Exception e) { e.printStackTrace(); } }4.运行单元测试方法,观察控制台输出即可。
-------------------------------------------------------------------------------------------------------------------------------------------------------
至此,Mybatis最入门---分页查询(逻辑分页与SQL语句分页)结束
备注:
本文我们演示的方法,仅作为参考使用,实际开发使用的分页查询将在下文中详细讲述给大家,敬请期待!