Springboot结合mybatis分页插件pagehelper使用
Springboot+Maybatis
数据库:mysql
前端:easyUI+thymeleaf
一、首先,准备工作
导入依赖
<!--mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
<version>1.2.5</version>
</dependency>
数据库依赖:
<!-- 加了这个就要配置数据库设置 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
<!--thymeleaf模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--lombok 注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
application.properties 配置
#端口配置、编码配置
server.port=8088
server.tomcat.uri-encoding=UTF-8
spring.main.allow-bean-definition-overriding=true
#日志
logging.level.ROOT=info
logging.level.com.test=debug
######### 分页插件 ##########
pagehelper.helperDialect=mysql
# 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页
pagehelper.reasonable=true
# 支持通过 Mapper 接口参数来传递分页参数
pagehelper.supportMethodsArguments=true
#映射表
mybatis.mapper-locations=classpath:mapper/**/*.xml
mybatis.type-aliases-package=com.labmanager.entity
#关闭thymeleaf的缓存
spring.thymeleaf.cache=false
#mysql 配置
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/labmanager?characterEncoding=utf-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#阿里druid连接池驱动配置信息
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#连接池的配置信息
#初始化大小,最小,最大
spring.datasource.initialSize=2
spring.datasource.minIdle=2
spring.datasource.maxActive=3
#配置获取连接等待超时的时间
spring.datasource.maxWait=6000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
#打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
数据库中的表:
二、前端页面
我前端用的是easyUI+thymeleaf
<!-- easyui -->
<script type="text/javascript" th:src="@{/easyui/jquery.min.js}" ></script>
<script type="text/javascript" th:src="@{/easyui/jquery.easyui.min.js}"></script>
<link rel="stylesheet" type="text/css" th:href="@{/easyui/themes/default/easyui.css}">
<link rel="stylesheet" type="text/css" th:href="@{/easyui/themes/icon.css}">
<link rel="stylesheet" type="text/css" th:href="@{/easyui/themes/color.css}">
<body>
<table id="list" ></table>
<!-- 工具条 -->
<div id="tool_bar">
<a id="addBtn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'">添加</a>
<a id="editBtn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit'">修改</a>
<a id="deleteBtn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-remove'">删除</a>
<a id="importBtn" href="#" class="easyui-linkbutton" >导入</a>
<a id="exportBtn" href="#" class="easyui-linkbutton" >导出</a>
</div>
<script type="text/javascript" th:inline="none">
$(function(){
$('#list').datagrid({
url:'/lab/listByPage',
columns:[[
{field:'id',title:'编号',checkbox:true},
{field:'lab_id',title:'实验室编号',width:'10%',align:'center'},
{field:'name',title:'名称',width:'20%',align:'center'},
{field:'department',title:'所属院系',width:'20%',align:'center'},
{field:'place',title:'地点',width:'30%',align:'center'},
{field:'state',title:'状态',width:'10%',align:'center'}
]],
pagination:true,
toolbar:"#tool_bar"
});
});
</body>
数据表格 - DataGrid:
$('#list').datagrid({
});
pagination:true:使用分页
分页 - Pagination:这个分页允许用户导航数据页面。它支持可配置选项页面导航和页面长度的选择。用户可以添加自定义按钮在正确的分页,增强其功能。
toolbar:"#tool_bar" 使用链接按钮
三、Entity
package com.labmanager.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
public class Lab {
private Long lab_id;
private String name;
private String department;
private String place ;
private String state;
}
@Data注解是lombok插件
导入依赖:
<!--lombok 注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
四、Controller
@RestController
@RequestMapping("/lab")
public class LabController {
@Resource
LabService labService;
@RequestMapping(value = "/listByPage",method = RequestMethod.POST)
public Map<String,Object> listByPage(Integer page, Integer rows){
//设置分页参数
page=(page-1)*rows;
PageHelper.offsetPage(page, rows);
//查询所有数据
List<Lab> list=labService.allLabs();
//使用PageInfo封装查询结果
PageInfo<Lab> pageInfo=new PageInfo<Lab>(list);
for(Lab lab:list){
if(lab.getState().equals("1")){
lab.setState("正常");
}else{
lab.setState("停用");
}
}
//从PageInfo对象取出查询结果
//总记录数
long total=pageInfo.getTotal();
//当前页数据列表
List<Lab> labsList=pageInfo.getList();
result.put("total", total);
result.put("rows", labsList);
return result;
}
}
五、Service
1.service接口
package com.labmanager.service;
import com.labmanager.entity.Lab;
import java.util.List;
public interface LabService {
List<Lab> allLabs();
void saveLab(Lab lab);
void deleteLab(Long[] lab_id);
Lab findLabById(Long lab_id);
}
2.service实现类
package com.labmanager.service.impl;
import com.labmanager.entity.Lab;
import com.labmanager.mapper.LabDao;
import com.labmanager.service.LabService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("labService")
public class LabServiceImp implements LabService {
@Resource
LabDao labDao;
public List<Lab> allLabs() {
return labDao.allLabs();
}
@Override
public void saveLab(Lab lab) {
if (lab.getLab_id()!=null){
//修改
labDao.updateLab(lab);
}else {
//增加
labDao.addLab(lab);
}
}
@Override
public void deleteLab(Long[] lab_id) {
labDao.deleteLab(lab_id);
}
@Override
public Lab findLabById(Long lab_id) {
return labDao.findLabById(lab_id);
}
}
六、Dao数据操作类
1.这里要在启动类配置,springboot扫描到这个包
@MapperScan(basePackages= {“com.labmanager.mapper”})
package com.labmanager;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
@SpringBootApplication
@MapperScan(basePackages= {"com.labmanager.mapper"})
public class LabManagerApplication {
public static void main(String[] args) {
SpringApplication.run(LabManagerApplication.class, args);
}
}
2.LabDao接口
package com.labmanager.mapper;
import com.labmanager.entity.Lab;
import java.util.List;
public interface LabDao {
List<Lab> allLabs();
}
七、映射文件xml
<?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" >
<mapper namespace="com.labmanager.mapper.LabDao" >
<select id="allLabs" resultType="com.labmanager.entity.Lab">
select * from lab_info
</select>
</mapper>
跟Dao接口对应:namespace=“com.labmanager.mapper.LabDao”
Dao接口里的方法名对应 :id=“allLabs”
返回结果类型:resultType=“com.labmanager.entity.Lab”
end
页面显示
版权声明:本文为weixin_43849543原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。