Springboot结合mybatis分页插件pagehelper使用

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版权协议,转载请附上原文出处链接和本声明。