15.分页的实现

来源:互联网 发布:软件开发工程师 翻译 编辑:程序博客网 时间:2024/06/05 20:27

分两部分说明分页的实现,一是手动实现;二是使用插件


1.手动实现分页

1.1编写接口方法

public interface NewUserMapper extends Mapper<User>{    /**     * 手动实现分页     * @param start 表示从(start+1)条数据开始查     * @param rows  表示每页显示几条数据     * @return     */    public List<User> queryPageList(Integer start,Integer rows);}
或者

public interface NewUserMapper extends Mapper<User>{    /**     * 手动实现分页     * @param start 表示从(start+1)条数据开始查     * @param rows  表示每页显示几条数据     * @return     */    public List<User> queryPageList(@Param("start")Integer start,@Param("rows")Integer rows);}


1.2编写对应xml具体实现

<mapper namespace="cn.itcast.mybatis.mapper.NewUserMapper"><select id="queryPageList" resultType="User">select * from tb_user LIMIT #{0},#{1}</select></mapper>
与接口对应的或者

<mapper namespace="cn.itcast.mybatis.mapper.NewUserMapper"><select id="queryPageList" resultType="User">select * from tb_user LIMIT #{start},#{rows}</select></mapper>

1.3编写测试用例

@Test    public void testqueryPageList() {       List<User> list = this.newUserMapper.queryPageList(8, 3);       for(User user:list){           System.out.println(user);       }    }
结果:



2.插件实现分页

2.1添加插件依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>3.4.2-fix</version></dependency><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>0.9.1</version></dependency>
2.2配置文件中集成分页插件(注意插件之间的顺序)

<!-- 分页查询插件 --><plugin interceptor="com.github.pagehelper.PageHelper"><property name="dialect" value="mysql"/><!-- 设置为true时,使用RowBounds分页会进行count查询,查询数据总条数 --><property name="rowBoundsWithCount" value="true"/></plugin>


2.3测试

2.3.1测试中用到通用Mapper中的select方法,报错

@Test    public void testPageHelper() {//        测试分页        /**         * 设置分页参数         * pageNum 第一个参数:当前页码         * pageSize 第二个参数:数据条数         */        PageHelper.startPage(2, 3);//        查询所有数据        List<User> list = this.newUserMapper.select(null);//        对查询出的数据进行分页        PageInfo<User> pageInfo=new PageInfo<User>(list);                System.out.println("数据总条数"+pageInfo.getTotal());        System.out.println("数据总页数"+pageInfo.getPages());                for(User user:list){            System.out.println(user);        }    }



解决办法:把分页插件配置在通用mapper插件上面

<plugins><!-- 分页查询插件 --><plugin interceptor="com.github.pagehelper.PageHelper"><property name="dialect" value="mysql"/><!-- 设置为true时,使用RowBounds分页会进行count查询,查询数据总条数 --><property name="rowBoundsWithCount" value="true"/></plugin>    <!-- 通用Mapper插件 --><plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor"><!--主键自增回写方法,默认值MYSQL,详细说明请看文档--><property name="IDENTITY" value="MYSQL"/><!--序列的获取规则,使用{num}格式化参数,默认值为{0}.nextval,针对Oracle--><!--可选参数一共3个,对应0,1,2,分别为SequenceName,ColumnName,PropertyName--><!-- <propertyname="seqFormat" value="{0}.nextval"/> --><!--通用Mapper接口,多个通用接口用逗号隔开--><property name="mappers" value="com.github.abel533.mapper.Mapper"/></plugin></plugins>

问题得到了解决