Spring/SpringMVC/Mybatis后台分页实例

好久没使用springmvc了,今天有空写一个实例复习一下。

一、创建一个maven项目

  • pom.xml配置
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0modelVersion>
	<groupId>com.twygroupId>
	<artifactId>todoartifactId>
	<version>1.0.0-SNAPSHOTversion>
	<packaging>warpackaging>
	<properties>
		
		<spring.version>4.3.18.RELEASEspring.version>
		
		<slf4j.version>1.7.25slf4j.version>
		<log4j.version>1.2.17log4j.version>
		
		<junit.version>4.12junit.version>
		
		<mybatis.version>3.4.6mybatis.version>
	properties>
	<dependencies>
		
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-coreartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-webmvcartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-contextartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-context-supportartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-aopartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-aspectsartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-txartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-jdbcartifactId>
			<version>${spring.version}version>
		dependency>
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-webartifactId>
			<version>${spring.version}version>
		dependency>
		
		<dependency>
			<groupId>junitgroupId>
			<artifactId>junitartifactId>
			<version>${junit.version}version>
			<scope>testscope>
		dependency>
		
		<dependency>
			<groupId>log4jgroupId>
			<artifactId>log4jartifactId>
			<version>${log4j.version}version>
		dependency>
		<dependency>
			<groupId>org.slf4jgroupId>
			<artifactId>slf4j-apiartifactId>
			<version>${slf4j.version}version>
		dependency>
		<dependency>
			<groupId>org.slf4jgroupId>
			<artifactId>slf4j-log4j12artifactId>
			<version>${slf4j.version}version>
		dependency>
		
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-testartifactId>
			<version>${spring.version}version>
			<scope>testscope>
		dependency>
		
		<dependency>
			<groupId>org.mybatisgroupId>
			<artifactId>mybatisartifactId>
			<version>${mybatis.version}version>
		dependency>
		
		<dependency>
			<groupId>org.mybatisgroupId>
			<artifactId>mybatis-springartifactId>
			<version>1.3.2version>
		dependency>
		
		<dependency>
			<groupId>mysqlgroupId>
			<artifactId>mysql-connector-javaartifactId>
			<version>5.1.47version>
		dependency>
		
		<dependency>
			<groupId>com.alibabagroupId>
			<artifactId>druidartifactId>
			<version>0.2.23version>
		dependency>
		
		<dependency>
			<groupId>com.alibabagroupId>
			<artifactId>fastjsonartifactId>
			<version>1.2.31version>
		dependency>
		
		<dependency>
			<groupId>com.github.pagehelpergroupId>
			<artifactId>pagehelperartifactId>
			<version>5.0.2version>
		dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.coregroupId>
			<artifactId>jackson-coreartifactId>
			<version>2.9.6version>
		dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.coregroupId>
			<artifactId>jackson-annotationsartifactId>
			<version>2.9.6version>
		dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.coregroupId>
			<artifactId>jackson-databindartifactId>
			<version>2.9.6version>
		dependency>
	dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.pluginsgroupId>
				<artifactId>maven-compiler-pluginartifactId>
				<version>3.6.1version>
				<configuration>
					<source>1.8source>
					<target>1.8target>
				configuration>
			plugin>
		plugins>
	build>
project>

二、各种配置

  • spring配置:application.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans.xsd    
        http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd    
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context.xsd  
        http://www.springframework.org/schema/tx    
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

	<context:component-scan base-package="com.twy.service" />

	
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath*:jdbc.propertiesvalue>
				
			list>
		property>
	bean>

	
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
		
		<property name="driverClassName" value="${jdbc_driverClassName}" />
		<property name="url" value="${jdbc_url}" />
		<property name="username" value="${jdbc_username}" />
		<property name="password" value="${jdbc_password}" />
		
		<property name="initialSize" value="10" />
		<property name="minIdle" value="10" />
		<property name="maxActive" value="50" />
		
		<property name="maxWait" value="60000" />
		
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		
		<property name="minEvictableIdleTimeMillis" value="300000" />
		<property name="validationQuery" value="SELECT 'x'" />
		<property name="testWhileIdle" value="true" />
		<property name="testOnBorrow" value="false" />
		<property name="testOnReturn" value="false" />
		
		<property name="poolPreparedStatements" value="false" />
		<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
		
		<property name="filters" value="wall,stat" />
	bean>

	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		
		<property name="mapperLocations" value="classpath:com/twy/dao/mapper/*.xml">property>
		<property name="configLocation" value="classpath:mybatis.xml">property>
	bean>

	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.twy.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">property>
	bean>

	
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	bean>

	<tx:annotation-driven transaction-manager="txManager" />
beans>
  • springmvc配置:spring-mvc.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans.xsd    
        http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd    
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context.xsd  
        http://www.springframework.org/schema/tx    
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
	
	<context:component-scan base-package="com.twy.controller" />

	
	<mvc:annotation-driven />

	
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/">property>
		<property name="suffix" value=".jsp">property>
	bean>

	
	<mvc:default-servlet-handler />
beans>
  • mybatis配置:mybatis.xml


<configuration>
	<settings>
		<setting name="logImpl" value="LOG4J" />
	settings>

	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			<property name="helperDialect" value="mysql" />
		plugin>
	plugins>

configuration>
  • jdbc配置:jdbc.properties
jdbc_driverClassName =com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc_username=root
jdbc_password=root
  • 日志配置:log4j.properties
### Log4j配置 ###
log4j.rootLogger=INFO,Console,File  
log4j.logger.com.twy = DEBUG

#1 定义日志输出目的地为控制台
####可以灵活地指定日志输出格式,下面一行是指定具体的格式 ###
#%c: 输出日志信息所属的类目,通常就是所在类的全名
#%m: 输出代码中指定的消息,产生的日志具体信息 
#%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
log4j.appender.Console=org.apache.log4j.ConsoleAppender 
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

#2 文件大小到达指定尺寸的时候产生一个新的文件 
log4j.appender.file = org.apache.log4j.RollingFileAppender
#日志文件输出目录
log4j.appender.file.File=log/todo.log
#定义文件最大大小
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=ERROR
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#3 mybatis 显示SQL语句部分
#log4j.logger.org.mybatis=DEBUG
#log4j.logger.cn.tibet.cas.dao=DEBUG
#log4j.logger.org.mybatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.org.mybatis.common.jdbc.ScriptRunner=DEBUG
#log4j.logger.org.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
#log4j.logger.java.sql.Connection=DEBUG
#log4j.logger.java.sql=DEBUG
#log4j.logger.java.sql.Statement=DEBUG
#log4j.logger.java.sql.ResultSet=DEBUG
#log4j.logger.java.sql.PreparedStatement=DEBUG
  • web.xml配置

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<display-name>tododisplay-name>
	
	<welcome-file-list>
		<welcome-file>index.jspwelcome-file>
	welcome-file-list>

	
	<context-param>
		<param-name>contextConfigLocationparam-name>
		<param-value>classpath:application.xmlparam-value>
	context-param>

	
	<filter>
		<filter-name>SpringEncodingFilterfilter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
		<init-param>
			<param-name>encodingparam-name>
			<param-value>UTF-8param-value>
		init-param>
		<init-param>
			<param-name>forceEncodingparam-name>
			<param-value>trueparam-value>
		init-param>
	filter>
	<filter-mapping>
		<filter-name>SpringEncodingFilterfilter-name>
		<url-pattern>/*url-pattern>
	filter-mapping>

	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
	listener>

	
	<context-param>
		<param-name>log4jConfigLocationparam-name>
		<param-value>classpath:log4j.propertiesparam-value>
	context-param>
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>
	listener>

	
	<servlet>
		<servlet-name>SpringMVCservlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
		<init-param>
			<param-name>contextConfigLocationparam-name>
			<param-value>classpath:spring-mvc.xmlparam-value>
		init-param>
	servlet>
	<servlet-mapping>
		<servlet-name>SpringMVCservlet-name>
		<url-pattern>/url-pattern>
	servlet-mapping>
web-app>

三、启动tomcat,测试一下

Spring/SpringMVC/Mybatis后台分页实例_第1张图片

四、开始写后台分页逻辑
项目结构:
Spring/SpringMVC/Mybatis后台分页实例_第2张图片

  • BaseController
package com.twy.controller;

public class BaseController {
	public int pageNum = 1;
	
	public int pageSize = 20;
}
  • UserController
package com.twy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.twy.entity.PageResult;
import com.twy.entity.User;
import com.twy.service.UserService;

@Controller
public class UserController extends BaseController {

	@Autowired
	private UserService userService;

	@ResponseBody
	@RequestMapping(value = "/list", method = RequestMethod.POST)
	public PageResult<User> list(@RequestParam(value = "name", required = false) String name) {
		PageResult<User> result = userService.findUserList(name, pageNum, pageSize);
		return result;
	}

}
  • UserDao
package com.twy.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.twy.entity.User;

public interface UserDao {
	public List<User> findUserList(@Param("name") String name);
}
  • UserDao.xml


<mapper namespace="com.twy.dao.UserDao">
	<resultMap type="com.twy.entity.User" id="baseMapResult">
		<id property="id" column="id" jdbcType="INTEGER"/>
		<result property="userName" column="userName" jdbcType="VARCHAR"/>
		<result property="id" column="id" jdbcType="VARCHAR"/>
		<result property="id" column="id" jdbcType="VARCHAR"/>
	resultMap>
	<select id="findUserList" parameterType="java.lang.String" resultMap="baseMapResult">
		select * from user where 1=1
		<if test="name!=null and name !=''">
			and userName = #{name}
		if>
	select>
mapper>
  • PageResut.java
package com.twy.entity;

import java.io.Serializable;
import java.util.List;

/**
 * @author gp
 *
 * @param 
 */
public class PageResult<T> implements Serializable {

	private static final long serialVersionUID = 1L;

	// 数据总量
	private Long total;

	// 数据对象
	private List<T> rows;

	public Long getTotal() {
		return total;
	}

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

	public List<T> getRows() {
		return rows;
	}

	public void setRows(List<T> rows) {
		this.rows = rows;
	}
}
  • User.java
package com.twy.entity;

import java.io.Serializable;

public class User implements Serializable {

	private static final long serialVersionUID = 1L;

	private int id;

	private String userName;

	private int age;

	private String email;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}
  • UserService.java
package com.twy.service;

import com.twy.entity.PageResult;
import com.twy.entity.User;

public interface UserService {
	public PageResult<User> findUserList(String name, int pageNum, int pageSize);
}
  • UserServiceImpl.java
package com.twy.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.ISelect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.twy.dao.UserDao;
import com.twy.entity.PageResult;
import com.twy.entity.User;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserDao userDao;

	public PageResult<User> findUserList(String name, int pageNum, int pageSize) {
		PageInfo<User> page = PageHelper.startPage(pageNum, pageSize, true).doSelectPageInfo(new ISelect() {
			@Override
			public void doSelect() {
				userDao.findUserList(name);
			}
		});
		PageResult<User> result = new PageResult<User>();
		result.setRows(page.getList());
		result.setTotal(page.getTotal());
		return result;
	}

}

五、数据查询测试
Spring/SpringMVC/Mybatis后台分页实例_第3张图片

你可能感兴趣的:(ssm项目)