mthoutai

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

以下小宝鸽将分享一篇Mybatis分页功能的博文,以下将给出具体的步骤。跟着博主的节奏肯定能实现。另外最后还会附上整个project的源代码。假设是没有使用过maven的猿友可自行下载相关的jar包就可以。

一、项目搭建

关于项目搭建,小宝鸽曾经写过一篇Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建,这篇文章提供了具体的搭建过程,并且提供了源代码下载,接下来的将在这个源代码的基础上继续开发。所以建议各位猿友能够把猿友下载一下。

二、分页插件的介绍

博主採用的插件是PageHelper这个插件,使用起来十分方便。该插件支持以下数据库:

Oracle
Mysql
MariaDB
SQLite
Hsqldb
PostgreSQL
DB2
SqlServer(2005+)
Informix
H2

相应于github的项目地址:
https://github.com/pagehelper/Mybatis-PageHelper


关于使用建议猿友们能够具体阅读下这里的介绍:
http://git.oschina.net/free/Mybatis_PageHelper/blob/master/wikis/HowToUse.markdown
读一遍之后可能还不能全然懂怎么使用。能够先看完博主的这篇文章。然后慢慢再消化,可是上面的那篇文章还是须要从头到尾看一遍。

三、PageHelper的使用

在”一、项目搭建“里下载好了源代码,下载的源代码导入eclipse后的结构里面。有例如以下的文件:

这里写图片描写叙述这里写图片描写叙述

接下来我们并不须要新增文件,直接在这些文件上改动就好了。

3.1、引入依赖

在pom.xml文件加入例如以下依赖:

<!-- mybatis分页插件依赖 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.0.0</version>
</dependency>

3.2、在Mybatis配置xml中配置拦截器插件

在mybatis-config.xml文件中加入插件后的内容例如以下:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>    
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="dialect" value="mysql"/>
        <!-- 该參数默觉得false -->
        <!-- 设置为true时。会将RowBounds第一个參数offset当成pageNum页码使用 -->
        <!-- 和startPage中的pageNum效果一样-->
        <property name="offsetAsPageNum" value="true"/>
        <!-- 该參数默觉得false -->
        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
        <property name="rowBoundsWithCount" value="true"/>
        <!-- 设置为true时,假设pageSize=0或者RowBounds.limit = 0就会查询出所有的结果 -->
        <!-- (相当于没有执行分页查询。可是返回结果仍然是Page类型)-->
        <property name="pageSizeZero" value="true"/>
        <!-- 3.3.0版本号可用 - 分页參数合理化,默认false禁用 -->
        <!-- 启用合理化时。假设pageNum<1会查询第一页。假设pageNum>pages会查询最后一页 -->
        <!-- 禁用合理化时,假设pageNum<1或pageNum>pages会返回空数据 -->
        <property name="reasonable" value="false"/>
        <!-- 3.5.0版本号可用 - 为了支持startPage(Object params)方法 -->
        <!-- 添加了一个`params`參数来配置參数映射。用于从Map或ServletRequest中取值 -->
        <!-- 能够配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
        <!-- 不理解该含义的前提下。不要随便复制该配置 -->
        <property name="params" value="pageNum=start;pageSize=limit;"/>
        <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
        <property name="returnPageInfo" value="check"/>
    </plugin>
</plugins>
</configuration>

3.3、mapper文件加入sql

在userMapper.xml文件中面加入sql:

<!-- 依据username查询 -->
<select id="selectUserByUserName" parameterType="java.lang.String" resultMap="BaseResultMap">
    SELECT *
    FROM t_user
    WHERE 1 = 1
    <if test="userName != null and userName !=''">
        AND USER_NAME = #{userName,jdbcType=VARCHAR}
    </if>
    ORDER BY USER_ID
</select>

3.4、dao加入对用方法

UserDao.java加入例如以下方法:

List<User> selectUserByUserName(@Param("userName") String userName);  

记得@Param必须有

3.5、service加入分页查询方法

UserService.java文件加入方法

PageInfo<User> queryByPage(String userName,Integer pageNo,Integer pageSize);

3.6、实现类加入相应实现

UserServiceImpl.java加入实现方法

@Override
public PageInfo<User> queryByPage(String userName, Integer pageNo,Integer pageSize) {
    pageNo = pageNo == null?1:pageNo;
    pageSize = pageSize == null?10:pageSize;
    PageHelper.startPage(pageNo, pageSize);
    List<User> list = userDao.selectUserByUserName(userName);
    //用PageInfo对结果进行包装
    PageInfo<User> page = new PageInfo<User>(list);
    //測试PageInfo所有属性
    System.out.println(page.getPageNum());
    System.out.println(page.getPageSize());
    System.out.println(page.getStartRow());
    System.out.println(page.getEndRow());
    System.out.println(page.getTotal());
    System.out.println(page.getPages());
    System.out.println(page.getFirstPage());
    System.out.println(page.getLastPage());
    System.out.println(page.isHasPreviousPage());
    System.out.println(page.isHasNextPage());
    return page;
}  

3.7、单元測试类加入分页查询測试方法

UserServiceTest.java文件加入方法:

@Test  
    public void queryByPageTest(){  
        PageInfo<User> page =  userService.queryByPage(null, 1, 1);
        System.out.println(page);
    }

3.8、执行

在小宝鸽进行了上面的改动之后,第一执行报错了!!

。!最后是pom.xml文件凝视了以下两个包的依赖才执行成功了,凝视的依赖例如以下:

这里写图片描写叙述

具体原因如今小宝鸽也不知道。应该是包有冲突的原因吧,假设猿友们知道原因麻烦私信我或评论解释一下。

然后执行单元測试类,结果例如以下:

这里写图片描写叙述

3.9、补充说明

在3.8中,我凝视了那两个包依赖是web项目相关的依赖,假设仍须要进行前端开发的猿友能够引入tomcat就好了,引入结果例如以下:

这里写图片描写叙述

引入过程:

选中项目右键–>build path。然后例如以下操作:

这里写图片描写叙述

这里写图片描写叙述

这里写图片描写叙述

4、源代码下载

http://download.csdn.net/detail/u013142781/9379685

posted on 2017-07-09 19:40  mthoutai  阅读(1220)  评论(0编辑  收藏  举报