Spring+Mybatis+SpringMVC后台与前台分页展示实例(附工程)

本文通过Spring+Mybatis+SpringMVC框架,利用PageHelper实现后台分页,结合bootstrap-paginator在前端展示分页结果。详细介绍了从配置PageHelper、Mapper接口到Controller层的实现,以及前端使用JSON数据动态生成表格和分页。推荐使用新版本工程,日志使用logback,数据库配置在POM.XML中。
摘要由CSDN通过智能技术生成

        林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

       摘要:本文实现了一个后台由Spring+Mybatis+SpringMVC组成,分页采用PageHelper,前台展示使用bootstrap-paginator来显示效果的分页实例。整个项目由maven构成。这里主要讲了分页的实例,框架怎么搭建就不再说明,主要是在这里的基础上来增加分页功能的。注意,此文是在这个基础 Spring+Mybatis+SpringMVC+Maven+MySql搭建实例 之上来做分页的,建议文中看不懂的配置可以看看这里。

整个工程下载(旧版本,日志打印使用log4j,数据库配置放在properties文件)

新版本下载:https://github.com/appleappleapple/ssm_project (日志打印使用logback,数据库配置放在POM.XML)博主推荐使用新版本,而且这里详细说明了整个工程应用的框架,数据源配置,SQL语句等等!

重要的事情说三遍:请下新版本~请下新版本~请下新版本~

最后的结果如下:

环境:jdk1.6

         Tomcat 7.0

         Eclipse luna/windows 7    

一、后台PageHelper使用

PageHelper:https://github.com/pagehelper/Mybatis-PageHelper

1、引入jar包

 

		<!-- 添加分布插件的包pagehelper -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>4.0.0</version>
		</dependency>


2.mybatis-config.xml中添加插件

 

 

<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;"/>
    </plugin>
</plugins>

这样子就引入进来了,接下来就是来开始分页功能的实现

 

3、mapper文件中添加如下一个方法:

 

	<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>


注意,这里的返回其实是一个list

 

	<!--设置domain类和数据库中表的字段一一对应,注意数据库字段和domain类中的字段名称不致,此处一定要! -->
	<resultMap id="BaseResultMap" type="com.lin.domain.User">
		<id column="USER_ID" property="userId" jdbcType="INTEGER" />
		<result column="USER_NAME" property="userName" jdbcType="CHAR" />
		<result column="USER_PASSWORD" property="userPassword" jdbcType="CHAR" />
		<result column="USER_EMAIL" property="userEmail" jdbcType="CHAR" />
	</resultMap>


4、然后就是dao类

 

 

	 /**
	  * 
	  * @author linbingwen
	  * @since  2015年10月22日 
	  * @param userName
	  * @return
	  */
	 List<User> selectUserByUserName(@Param("userName") String userName);


这里一定的记得加@Param("userName")

 

接下来就可以在service层中添加分页查询的的接口了

5、接口类

 

	/**
	 * 
	 * @author linbingwen
	 * @since  2015年10月23日 
	 * @param userName 查询条件,可为空
	 * @param pageNo 查询条件,可为空,默认取1
	 * @param pageSize 查询条件,可为空,默认取10
	 * @return
	 */
	PagedResult<User> queryByPage(String userName,Integer pageNo,Integer pageSize);

6、实现类

 

 

	public PagedResult<User> queryByPage(String userName,Integer pageNo,Integer pageSize ) {
		pageNo = pageNo == null?1:pageNo;
		pageSize = pageSize == null?10:pageSize;
		PageHelper.startPage(pageNo,pageSize);  //startPage是告诉拦截器说我要开始分页了。分页参数是这两个。
		return BeanUtil.toPagedResult(userDao.selectUserByUserName(userName));
	}

这里就可以直接在返回里头使用了PageHelper,这里userDao.selectUserByUserName(userName)的返回是一个list

 

其中,PagedResult是我自己封装的一个分页结果类

 

package com.lin.util;

import java.util.List;

import com.lin.dto.BaseEntity;

/**
 * 功能概要:
 * 
 * @author linbingwen
 * @since  2015年10月23日 
 */
public class PagedResult<T> extends BaseEntity {
	
	/*serialVersionUID*/
	private static final long serialVersionUID = 1L;

	private List<T> dataList;//数据
	
	private long pageNo;//当前页
	
	private long pageSize;//条数
	
	private long total;//总条数
	
	private long pages;//总页面数目

	public List<T> getDataList() {
		return dataList;
	}

	public void setDataList(List<T> dataList) {
		this.dataList = dataList;
	}

	public long getPageNo() {
		return pageNo;
	}

	public void setPageNo(long pageNo) {
		this.pageNo = pageNo;
	}

	public long getPageSize() {
		return pageSize;
	}

	public void setPageSize(long pageSize) {
		this.pageSize = pageSize;
	}

	public long getTotal() {
		return total;
	}

	public void setTotal(long total) {
		this.total = total;
	}

	public long getPages() {
		return pages;
	}

	public void setPages(long pages) {
		this.pages = pages;
	}
	
}

这是它的基类

 

 

package com.lin.dto;

import java.io.Serializable;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * <b>类说明:</b>bean基类
 * 
 * <p>
 * <b>详细描述:</b>
 * 
 * @author costin_law 
 * @since 2014-5-5
 */
public abstract class BaseEntity implements Serializable{
	private static final long serialVersionUID = 1L;
	
	private static Map<Class<?>,PropertyInfo[]> class2Props = new HashMap<Class<?>,PropertyInfo[]>(128);
	
	@Override
	public String toString() {
		PropertyInfo[] props = class2Props.get(this.getClass());
		if( props == null ){
			props = getProps(this.getClass());
		}
		
		StringBuilder   builder = new StringBuilder(1024);
		boolean isFirst = true;
		for (int i = 0, n = props.length; i < n; i++) {
			try {
				PropertyInfo propInfo = props[i];				
				
				Object value = propInfo.getMethod.invoke(this, 
评论 74
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值