7 LIMIT分页

LIMIT分页

为什么需要分页?

在对数据库进行大量数据查询时,往往需要使用分页进行查询,每次处理小部分数据,这样对数据库的压力在可控范围内。

使用LIMIT分页的常用语法

#数据库索引是从0开始SELECT * FROM table LIMIT stratIndex,pageSizeSELECT * FROM table LIMIT 5,10; // 检索记录行 6-15  #为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1,在最小的mysql版本中,该语法可以使用SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.  #如果只给定一个参数,它表示返回最大的记录行数目:   SELECT * FROM table LIMIT 5; //检索前 5 个记录行  #换句话说,LIMIT n 等价于 LIMIT 0,n。 

使用LIMIT进行分页:

步骤:

1、在UserMapper.java接口中,编写函数

    // 分页查询    List<User> getUserByLimit(Map map);

2、编写UserMapper.xml文件,传入参数类型为map

    <resultMap id="UserResult" type="User">        <!-- column是数据库表的列名 , property是对应实体类的属性名 -->        <id column="id" property="id"/>        <result column="name" property="username"/>        <result column="pwd" property="password"/>    </resultMap>    <select id="getUserByLimit" parameterType="map" resultMap="UserResult">        SELECT * FROM user LIMIT #{startIndex}, #{pageSize}    </select>

3、测试

    @Test    public void getUserByLimit(){        SqlSession sqlSession = MyBatisTool.getSqlSession();        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        // 分页,查询第一页,页面大小为2        int pageIndex = 1;        int pageSize = 2;        // 用map准备参数        Map<String, Integer> map = new HashMap<String, Integer>();        //计算起始索引        int startIndex = (pageIndex - 1) * pageSize;        map.put("startIndex", startIndex);        map.put("pageSize", pageSize);        // 执行查询        List<User> userList = mapper.getUserByLimit(map);        for (User user : userList) {            System.out.println(user);        }        sqlSession.close();    }

使用RowBounds分页:【了解】

我们除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页。

1、在UserMapper.java接口中,编写函数

    // RowBounds分页    List<User> getUserListByRowBounds();

2、编写UserMapper.xml文件,传入参数类型为map

    <resultMap id="UserResult" type="User">        <!-- column是数据库表的列名 , property是对应实体类的属性名 -->        <id column="id" property="id"/>        <result column="name" property="username"/>        <result column="pwd" property="password"/>    </resultMap>    <select id="getUserListByRowBounds" resultMap="UserResult">        SELECT * FROM user    </select>

3、测试

    @Test    public void getUserListByRowBounds(){        SqlSession sqlSession = MyBatisTool.getSqlSession();        int pageIndex = 1;        int pageSize = 2;        RowBounds rowBounds = new RowBounds((pageIndex - 1) * pageSize, pageSize);        List<User> userList = sqlSession.selectList("com.bg.mapper.UserMapper.getUserListByRowBounds", null, rowBounds);        for (User user : userList) {            System.out.println(user);        }        sqlSession.close();    }

使用插件进行分页:

PageHelper自行了解。

(0)

相关推荐