喜欢有帮助记得点赞哦,加关注不迷路
分页查询是开发项目时必不可少的,这里给大家介绍一个myBatis中的分页插件pageHelper,可以很方便快速的实现分页查询,我们这里的案例还是上篇博客说到的商品查询,话不多说我们开始。
1、项目架构
开发工具:eclipse
使用技术:Spring,SpringMVC,myBatis,mysql,maven
开发环境:需要JDK,maven,mysql数据库
2、实现思路
2.1 创建数据表
2.2 项目创建
2.3 配置pom.xml文件
2.4 整合ssm框架
2.5 完成商品列表页
2.6 分别完成web层,service层和dao层
2.7 测试
接下来我们分别演示
3、具体实现
3.1 创建数据表
CREATE TABLE `goods` (
`goods_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id',
`goods_name` varchar(255) DEFAULT NULL COMMENT '商品名称',
`goods_type` varchar(255) DEFAULT NULL COMMENT '商品分类',
`goods_price` double(255,0) DEFAULT NULL COMMENT '商品单价',
`goods_count` int(11) DEFAULT NULL COMMENT '商品数量',
PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.2 创建项目
右击eclipse项目列表空白处选择Maven Project,点击next
选择web-app,点击next
填写组织名和模块名
项目搭建出来有报错,提示没有找到HttpServlet
因为jsp的本质就是一个Servlet,我们需要导入Servlet的jar包,而tomcat中就有这个jar,我们将tomcat引入即可,右击项目Build Path------》Configure Build Path
选择add Library---》Server Runtime---》选择tomcat---》finish----》apply and close,应用并关闭,发现项目已经不报错
还会发现项目使用的jdk版本为1.5,这是maven项目内置的版本,我们修改为自己的JDK版本,这里我使用的是1.8
选择默认的选中的就是环境变量中配置的JDK,点击完成,应用关闭即可
还有我们的web.xml文件比较奇怪,也需要修改
将内容改为,就是之前web项目的配置文件粘贴过来就行
<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
id="WebApp_ID" version="3.0">
</web-app>
至此我们的项目搭建完成,项目结构如下
3.3 配置pom文件
<!-- 定义版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>5.1.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--log4j日志包 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.1</version>
</dependency>
<!-- mybatis ORM框架 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--mybatis-spring适配器 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--Spring框架核心库 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aspectJ AOP 织入器 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<!--Spring java数据库访问包,在本例中主要用于提供数据源 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
</dependencies>
3.4 整合ssm框架
注意:maven项目的配置都在resources下,分别为:
spring-mvc.xml:SpringMVC 的配置文件
spring-mybatis.xml:Spring与myBatis的整合文件
db.properties:数据库配置文件
log4j.properties:日志配置文件
3.4.1 spring-mvc.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:component-scan base-package="com.zhiyou100" />
<!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
3.4.2 spring-mybatis.xml配置文件
注意:这里与之前ssm整合时的不同在于SqlSessionFactoryBean中还需要引入pageHelper插件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties" />
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最大数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations"
value="classpath:com/zhiyou100/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>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zhiyou100.dao" />
</bean>
<!-- 事务管理-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
3.4.3 db.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///day11_02
username=root
password=root
initialSize=5
maxActive=20
maxIdle=20
minIdle=1
maxWait=60000
3.4.4 log4j.properties文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=DEBUG, stdout
3.4.4 web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
id="WebApp_ID" version="3.0">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置 DispatcherServlet 的一个初始化参数:配置 SpringMVC 配置文件的位置和名称 -->
<!-- 默认的配置文件格式:/WEB-INF/<servlet-name>-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
</web-app>
3.5 显示页面(show.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>商品列表</title>
</head>
<body>
<div align="center">
<table border="1" cellspacing="0">
<caption>商品列表</caption>
<tbody>
<tr>
<td>商品编号</td>
<td>商品名称</td>
<td>商品类型</td>
<td>商品价格</td>
<td>剩余数量</td>
</tr>
<c:forEach items="${goods }" var="good">
<tr>
<td>${good.goods_id }</td>
<td>${good.goods_name }</td>
<td>${good.goods_type }</td>
<td>${good.goods_price }</td>
<td>${good.goods_count }</td>
</tr>
</c:forEach>
</tbody>
</table>
<p>一共${page.pages}页</p>
<a href="goods.do?page=${page.firstPage}">第一页</a> <a
href="goods.do?page=${page.nextPage}">下一页</a> <a
href="goods.do?page=${page.prePage}">上一页</a> <a
href="goods.do?page=${page.lastPage}">最后页</a>
</div>
</body>
</html>
3.6 Controller类
@Controller
public class GoodsController {
@Resource(name="goodsService")
private IGoodsService goodsService;
@RequestMapping("goods.do")
public String userList(@RequestParam(required=true,defaultValue="1") Integer page,
HttpServletRequest request){
//PageHelper.startPage(page, pageSize);这段代码表示,程序开始分页了,
//page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
PageHelper.startPage(page, 3);
//查询
List<Goods> goods = goodsService.queryAll();
//创建PageInfo对象,保存查询出的结果,PageInfo是pageHelper中的对象
PageInfo<Goods> p=new PageInfo<Goods>(goods);
//将数据存放到request域中
request.setAttribute("page", p);
request.setAttribute("goods",goods);
//返回页面
return "show";
}
}
3.7 Service层
3.7.1 接口
public interface IGoodsService {
List<Goods> queryAll();//查询所有
}
3.7.2 实现类
@Service("goodsService")
public class GoodsService implements IGoodsService{
@Resource
private IGoodsDao goodsDao;
public List<Goods> queryAll() {
return goodsDao.queryAll();
}
}
3.8 Dao层
public interface IGoodsDao {
List<Goods> queryAll();
}
3.9 实体类映射文件
注意:该文件创建在resources目录下的com.zhiyou100.mapping目录下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace的值是dao层接口的全路径 -->
<mapper namespace="com.zhiyou100.dao.IGoodsDao">
<!-- 配置实体类与数据表映射关系
type:实体类全路径
id:名字
-->
<resultMap type="com.zhiyou100.entity.Goods" id="goodsMap">
<!--
id标签:配置唯一字段,一般是主键
property:与实体类属性名一致
column:与数据表字段名一致
-->
<id property="goods_id" column="goods_id"/>
<!-- result标签配置非唯一字段 -->
<result property="goods_name" column="goods_name"/>
<result property="goods_type" column="goods_type"/>
<result property="goods_price" column="goods_price"/>
<result property="goods_count" column="goods_count"/>
</resultMap>
<!-- 定义表中字段 -->
<sql id="key">GOODS_ID,GOODS_NAME,GOODS_TYPE,GOODS_PRICE,GOODS_COUNT</sql>
<!-- 查询语句,查询所有
resultMap:与上边的resultMap标签的id属性值一致,将查出的数据按照配置的对应关系,封装到实体类中
-->
<select id="queryAll" resultMap="goodsMap">
SELECT <include refid="key"/> FROM GOODS
</select>
</mapper>
3.8 测试运行
运行项目在浏览器上输入请求地址出现以下页面
至此即可使用pageHelper插件实现分页查询,不需要再写以前那么多分页代码,我们专注于业务逻辑即可。需要注意的地方是使用pageHelper需要将相关jar包导入,在sqlSessionFactoryBean中配置pageHelper插件即可
项目下载地址:https://gitee.com/stt0626/mybatis-pagehelper.git
盛年不重来,一日难再晨