Spring+mybatis+PageHelper

为了更简单的实现数据库分页,咱们不探讨本身手动修改sql语句分页,这里关于PageHelper本身配置是出现的问题进行记录下:
我采用的是Maven代码托管,在pom.xml进行以下配置:mysql

<!-- Mybatis 分页插件 PageHelper 5.0.2包 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.2</version>
</dependency>

若是没有使用Maven工具,则本身手动下载jar包便可;
spring-mybatis.xml:进行以下配置:git

<!-- 配置分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
<!-- 你使用的数据库类型(主流的都行) -->
dialect=mysql
reasonable=true
</value>
</property>
</bean>
</array>
</property>

当咱们运行项目是,问题就来了,报相似下面的错误: github

如图探究呢,当扫描器走到这里是,配置文件没法识别,后续就没有了,中止扫描文件,致使报错;最后反复探究后,配置没有问题,缘由的PageHelper的版本问题,修改版本spring

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>

项目运行成功
调用数据库数据前加一句代码便可;实现分页
PageHelper.startPage(pageNum, pageSize)sql


4.1.6PageHelper插件jar包.rar下载
http://download.csdn.net/detail/qq_33624284/9857198

数据库

spring-mybatis.xml文件中配置
<!-- spring和MyBatis完美整合,不须要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/wl/goldatg/mapping/*.xml"></property>
<!-- 配置分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>

## 下面咱们就可使用 ##mybatis

新建sql语句,返回list结果集
<select id="selectByList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_t
</select>

service层
public List<User> selectByList() {
return this.userDao.selectByList();
}

Controller类
@RequestMapping("/userList")
public String userList(@RequestParam(required=true,defaultValue="1") Integer page,HttpServletRequest request,Model model){
//PageHelper.startPage(page, pageSize);这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
PageHelper.startPage(page, 3);
List<User> userList = userService.selectByList();
PageInfo<User> p=new PageInfo<User>(userList);
model.addAttribute("page", p);
model.addAttribute("userList",userList);
return "showUser";
}

PageInfo这个类是插件里的类,很是方便的调用,分页再次提升性能:app

//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//排序
private String orderBy;工具

//因为startRow和endRow不经常使用,这里说个具体的用法
//能够在页面中"显示startRow到endRow 共size条数据"性能

//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;

//第一页
private int firstPage;
//前一页
private int prePage;
//下一页
private int nextPage;
//最后一页
private int lastPage;

//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//全部导航页号
private int[] navigatepageNums;

使用PageInfo这个类,你须要将查询出来的list放进去:

List<User> userList = userService.selectByList();
PageInfo<User> p=new PageInfo<User>(userList);

页面使用很是方便,直接贴代码:

控制层
model.addAttribute("page", p);

前台页面
<body>
<center>
<table width="200" border="1">
<tr>
<th scope="col">序号</th>
<th scope="col">ID</th>
<th scope="col">姓名</th>
<th scope="col">密码</th>
<th scope="col">年龄</th>
</tr>
<c:forEach begin="0" step="1" items="${userList}" var="list" varStatus="userlist">
<tr>
<td>${userlist.count}</td>
<td>${list.id}</td>
<td>${list.userName}</td>
<td>${list.password}</td>
<td>${list.age}</td>
</tr>
</c:forEach>
</table>
<p>一共${page.pages}页</p>
<a href="userList?page=${page.firstPage}">第一页</a>
<a href="userList?page=${page.nextPage}">下一页</a>
<a href="userList?page=${page.prePage}">上一页</a>
<a href="userList?page=${page.lastPage}">最后页</a>
</center>
</body>

最后结果显示:(关键点${page.prePage}简单又快捷)

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息