简介

springboot

设计目的就是为了加速开发,减少xml的配置。如果你不想写配置文件只需要在配置文件添加相对应的配置就能快速的启动的程序。

通用mapp

通用mapper只支持对单表的操作,对单表的增删改查,无需在mapper.xml写对应的sql语句,只需要我们调用相应的接口即可。

pagehelp

pagehelper主要是在对查询的数据进行一个分页查询。

  1. 首先在maven项目,在pom.xml中引入mapper和pagehelper的依赖
        <!-- pagehelp -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>

2 新建一个mymapper.java文件,继承mapper接口

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T>,ConditionMapper<T> {
//FIXME 特别注意,该接口不能被扫描到,否则会出错
}

这个java文件不能和其它mapper放在一起,以免被扫描到。获取单表数据的操作都直接调用这个方法。

3 在配置文件上添加以后属性字段

#jdbc
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/news
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.freemarker.request-context-attribute=request #mapper
mapper.mappers=com.imooc.springboot.mapper.util.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL #pagehelper
pagehelper.helper-dialect = mysql
pagehelper.reasonable = true
pagehelper.support-methods-arguments = true
pagehelper.params= count= countSql

上面的配置mapper.mappers 是第2步里面文件所在的路径。

4 添加了controller文件之后,由controller里面的方法去调用server里面的方法。虽然是有通用mapper方法,但是每次添加一个server方法之后都要添加对应的mapper方法,这样开发的也显得比较繁琐,所以我们需要一个通用server类,用这个类去调用第二步的方法就可以了。

public interface BaseService<T> {
/**
* 查询所有
*
* @return 返回所有数据
*/
List<T> findAll(); /**
* 添加
*
* @param t 实体
*
* @return
*/
int save(T t); /**
* 修改
*
* @param t
* 实体
* @return
*/
int updateByPrimaryKey(T t); /**
* 根据主键删除
*
* @param t 主键
*
* @return
*/
int deleteByPrimaryKey(int t); /**
* 查询表格列表
* @param t 分页参数
* @return
*/
TableData<T> getTableData(PageBean pageBean);
}

上面只是封装基本增删改查的方法,后续可自行添加方法。

然后添加实现类

public abstract class BaseServiceImpl<T> implements BaseService<T> {
@Autowired
protected MyMapper<T> mapper; @Override
public List<T> findAll() {
return mapper.selectAll();
} @Override
public int save(T t) {
return mapper.insert(t);
} @Override
public int updateByPrimaryKey(T t) {
return mapper.updateByPrimaryKey(t);
} @Override
public int deleteByPrimaryKey(int t) {
return mapper.deleteByPrimaryKey(t);
} @Override
public TableData<T> getTableData(PageBean bean) {
int count = mapper.selectAll().size();
if (count > 0) {
PageHelper.startPage((bean.getOffset()/bean.getLimit()) + 1, bean.getLimit());
List<T> list = this.findAll();
return TableData.bulid(count, list);
} return TableData.empty();
}
}

注意:我用的编辑器是eclipse,如果用idea编辑器,这里可把abstract去掉。

然后添加对应的接口和实现类继承上面的接口和方法就可以了,比如添加一个newsserver 接口和newsserverImpl类

public interface NewsService extends BaseService<SysUser> {

}
@Service
public class NewsServiceImpl extends BaseServiceImpl<SysUser> implements NewsService{ }

5 为了减少数据库服务器的压力,一般我们查询数据的时候都会使用pagehelper进行分页查询,为了更加清晰的显示我们展示的数据,使用bootstrap table展示数据,bootstrap table获取数据有两种途经,一种是客户端模式,即获取全部数据之后,在前端进行分页展示。另外一种,也就是我们接下来要说的服务端模式:要获取的数据信息,比如获取数据页码,每一页数据的大小,都可以通过前端发送以上的参数向后台发请求,后台得到这些参数信息之后返回数据。

6 引入bootstrap table相关的js css文件之后,开始在网上找了一些资料之后发现很多都是要在前端页面添加如下繁琐的配置,

       $('#mytable').bootstrapTable({
//请求方法
method: 'get',
//是否显示行间隔色
striped: true,
//是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
cache: false,
//是否显示分页(*)
pagination: true,
//是否启用排序
sortable: false,
//排序方式
sortOrder: "desc",
//初始化加载第一页,默认第一页
//我设置了这一项,但是貌似没起作用,而且我这默认是0,- -
//pageNumber:1,
//每页的记录行数(*)
pageSize: 10,
//可供选择的每页的行数(*)
pageList: [10, 25, 50, 100],
//这个接口需要处理bootstrap table传递的固定参数,并返回特定格式的json数据
url: "${contextPath}/mapper/getTableData",
//默认值为 'limit',传给服务端的参数为:limit, offset, search, sort, order Else
//queryParamsType:'',
////查询参数,每次调用是会带上这个参数,可自定义
queryParams: queryParams : function(params) {
var subcompany = $('#subcompany option:selected').val();
var name = $('#name').val();
return {
pageNumber: params.offset+1,
pageSize: params.limit,
companyId:subcompany,
name:name
};
},
//分页方式:client客户端分页,server服务端分页(*)
sidePagination: "server",
//是否显示搜索
search: false,
//Enable the strict search.
strictSearch: true,
//Indicate which field is an identity field.
idField : "id",
columns: [],
pagination:true
});

每次添加一个页面如果都要添加以上的配置信息也显得繁琐,不过bootstrap-table.js里面有个默认的配置,只需要修改里面的几个配置。

 contentType: 'application/json',//post请求头 application/x-www-form-urlencoded; charset=UTF-8'
dataType: 'json',
sidePagination: 'server', // 改成server

当我们点击表格分页页码的时候,获取改变每页显示的页码时候,前端会自动调用queryParams()方法,我们需要将这些数据传递给后台,

       function queryParams(params) {
var query={};
query["limit"] = params.limit;//第几条数据开始
query["offset"] = params.offset;//数据大小
return query;
}

6 配合上一步前端的分页,我们就需要使用pagehelp插件了,同样我们把这个分页的方法放在通用server类上,

 public TableData<T> getTableData(PageBean bean) {
int count = mapper.selectAll().size();
if (count > 0) {
PageHelper.startPage((bean.getOffset()/bean.getLimit()) + 1, bean.getLimit());
List<T> list = this.findAll();
return TableData.bulid(count, list);
} return TableData.empty();
}

上面的pagehelper.startpage需要做一点改变,前端传过来的是显示第几条数据,但是startpage方法第一个参数是显示第几页的数据,所以做一个转换pageoffset/limit +1,然后在查询数据,需要注意的是,一定要将startpage方法方法查询数据语句的前一行,不能空行,或者换行。

附录:

github源码

demo展示

Springboot 整合通用mapper和pagehelper展示分页数据(附github源码)的更多相关文章

  1. Spring Boot 整合单机websocket(附github源码)

    websocket 概念 websocket 是一个通信协议,通过单个 TCP 连接提供全双工通信.websocket 连接成功后,服务端和客户可以进行双向通信.不同于 http 通信协议需要每次由客 ...

  2. Springboot整合通用mapper

    通用Mapper的分享使用 参考博客 Mybatis的通用mapper和Hibernate一样都实现了JPA接口,简化了数据库的操作 和Hibernate的对比 Hibernate和Mybatis都是 ...

  3. spring-boot | 整合通用Mabatis 分页插件PageHelper

    Mybatis通用Mapper介绍 Mybatis 通用 Mapper 极其方便的使用 Mybatis 单表的增删改查,支持单表操作,不支持通用的多表联合查询 优点: 通用 Mapper 可以极大的方 ...

  4. SpringBoot快速整合通用Mapper

    前言 后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作. 通用mapper配置 1.添加maven: <depen ...

  5. Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x

    Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x ============================== 蕃薯耀 2018年 ...

  6. Spring Boot整合ElasticSearch和Mysql 附案例源码

    导读 前二天,写了一篇ElasticSearch7.8.1从入门到精通的(点我直达),但是还没有整合到SpringBoot中,下面演示将ElasticSearch和mysql整合到Spring Boo ...

  7. SpringBoot第六篇:整合通用Mapper

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10876339.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   在以往的项 ...

  8. springboot 使用mybatis 通用Mapper,pagehelper

    首先需要maven导入需要的包,这里用的是sqlserver,druid,jtds连接数据库 <dependency> <groupId>com.alibaba</gro ...

  9. 10—mybatis 通用mapper插件 pagehelper 分页

    spring boot真的太好用了,大家以后多多使用,今天来说说pagehelper 来做mybatis分页,我用的是spring boot 做的开发,后面会把源码发出来. pagehelper(ht ...

随机推荐

  1. xmind2020 zen 10.2.1win/mac/linux安装教程

    xmind是一款优秀的思维导图软件,本文教大家如何安装xmind zen 2020 10.2.1版本,解锁使用全部功能,包括去掉xmind zen水印.上传图片等功能,支持windows/mac/li ...

  2. 关于intouch/ifix嵌入视频控件并使用(海康,大华)

    2017年下半年项目开始接触利用intouch工控软件来进行项目二次开发.其中关于驱动的问题始终是上位机的重中之重,暂且不表(嘿嘿--),首先遇到的问题就是在弹窗中嵌入视频控件,监控设备的开停状态.经 ...

  3. 使用C#winform编写渗透测试工具--端口扫描

    使用C#winform编写渗透测试工具--端口扫描器 主要介绍使用C#winform编写渗透测试工具--端口扫描器,端口扫描器则是一种检测服务器或者主机虚拟端口是开启或关闭的工具.由于连接到局域网或互 ...

  4. 大数据开发-Go-数组,切片

    new()和make的区别 二者看起来没什么区别,但是他们的行为不同,分别适用于不同的类型 new (T) 为每个新的类型 T 分配一片内存,初始化为 0 并且返回类型为 * T 的内存地址:这种方法 ...

  5. TypeScript学习笔记(一)环境搭建和数据类型

    目录 一.学习TypeScript的缘由 二.学习环境的搭建 1. TypeScript的编译环境 2. vscode自动编译的配置 三.TypeScript中的数据类型 1. 简单变量的定义和初始化 ...

  6. Aging Cell两篇连发 | 华中科技大学王建枝团队运用蛋白质组学技术发现具有AD早期诊断价值的血小板生物标志物

    阿尔茨海默症 (Alzheimer 's disease,AD) 是一种原发性的中枢神经系统退行性疾病.AD的主要临床症状是缓慢的认知功能减退,包括记忆.逻辑推理能力和语言功能的进行性丟失,最后发展为 ...

  7. [TensorFlow2.0]-Fashion-MNIST本地数据集及fit_generator()的使用

    本人人工智能初学者,现在在学习TensorFlow2.0,对一些学习内容做一下笔记.笔记中,有些内容理解可能较为肤浅.有偏差等,各位在阅读时如有发现问题,请评论或者邮箱(右侧边栏有邮箱地址)提醒. 若 ...

  8. 跟我一起写 Makefile(十一)

    make 的运行 ------ 一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的.但也有时你也许只想让make重编译某些文件,而不 ...

  9. Java:导出Excel大批量数据的优化过程

    背景 团队目前在做一个用户数据看板(下面简称看板),基本覆盖用户的所有行为数据,并生成分析报表,用户行为由多个数据来源组成(餐饮.生活日用.充值消费.交通出行.通讯物流.交通出行.医疗保健.住房物业. ...

  10. murmur3 hash(hash算法)

    HashUtil.java package com.example.test.util; import com.google.common.base.Charsets; import com.goog ...