spring-boot | 整合通用Mabatis 分页插件PageHelper
Mybatis通用Mapper介绍
Mybatis 通用 Mapper
极其方便的使用 Mybatis 单表的增删改查,支持单表操作,不支持通用的多表联合查询
优点:
通用 Mapper 可以极大的方便开发人员。
为了让您更方便的了解通用 Mapper,下面贴一段代码来看实际效果。
通用Mapper
通用 Mapper 可以缓存,全部针对单表操作,每个实体类都需要继承通用 Mapper 接口来获得通用方法。
实际开发过程中,我们对数据库单表的操作情况有很多,有了通用mapper插件, 我们实现相对应的接口,整合到spring boot项目中,减少了xml文件的配置,使我们的开发更高效。
如何整合通用Mapper插件
引入依赖
<!--mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--阿里巴巴数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.25</version>
</dependency>
通过pom.xml文件引入通用Mapper依赖,同时引入了druid数据源和PageHelper分页的插件,通过 springboot配置文件application.properties进行配置。
# 驱动配置信息
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/master?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
连接池的配置信息
初始化大小,最小,最大
spring.druid.initialSize=5
spring.druid.minIdle=5
spring.druid.maxActive=20
配置获取连接等待超时的时间
spring.druid.maxWait=60000
配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.druid.timeBetweenEvictionRunsMillis=60000
配置一个连接在池中最小生存的时间,单位是毫秒
spring.druid.minEvictableIdleTimeMillis=300000
spring.druid.validationQuery=SELECT 1 FROM DUAL
spring.druid.testWhileIdle=true
spring.druid.testOnBorrow=false
spring.druid.testOnReturn=false
spring.druid.poolPreparedStatements=true
spring.druid.maxPoolPreparedStatementPerConnectionSize=20
配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.druid.filters=stat,wall,log4j
通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
mybatis
扫描entrity包
mybatis.type-aliases-package=cn.jj.model
mybatis.mapper-locations=classpath:mapper/*.xml
mappers 多个接口时逗号隔开
mapper.mappers=tk.mybatis.mapper.common.Mapper
mapper.mappers=cn.jj.common.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL
pagehelper
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
到这里,我们就做好了相关的配置。接着创建MyMapper接口继承Mapper。
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
创建实体Bean,使用通用Mapper一定要保证实体类字段和数据库字段一致。如果不一致可以利用注解进行映射。
@Column(name = "nick")
private String name;
@Table(name = "city")
public class City implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private String id;
private String name;
private String state;
public String getId() {</br>
return id;</br>
}</br></br>
public void setId(String id) {</br>
this.id = id;</br>
}</br></br>
public String getName() {</br>
return name;</br>
}</br></br>
public void setName(String name) {</br>
this.name = name;</br>
}</br></br>
public String getState() {</br>
return state;</br>
}</br></br>
public void setState(String state) {</br>
this.state = state;</br>
}</br></br>
}
接着,在Mapper接口层继承刚才的MyMapper接口,到这里,单表的增删改查已经实现了。
@Mapper
public interface CityMapper extends MyMapper<City>{
}
接着,我们通过测试类测试下,数据库添加好相应数据。
@Autowired
private CityMapper cityDao;
//查询</br>
@Test</br>
public void selectAll() {</br>
List<City> city = cityDao.selectAll();</br>
for (City city2 : city) {</br>
System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState());</br>
}</br>
}</br>
控制台输出结果如下:

其他增删改方法大家大家试着自己尝试,也都特别简单。数据库一共有四条数据,接下来我们加上分页插件。首先我们通过官网看下分页插件所支持的数据库和Mybatis的版本。

可以看出PageHelper支持大部分主流关系型数据库,引用分页插件以后,Mybatis分页会变得特别简单,需要注意的是,在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。详细的使用方法我们看下官网的例子。
例一:
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);
assertEquals(2, list.get(0).getId());
assertEquals(10, list.size());
//分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>
assertEquals(182, ((Page) list).getTotal());
例二:
//request: url?pageNum=1&pageSize=10
//支持 ServletRequest,Map,POJO 对象,需要配合 params 参数
PageHelper.startPage(request);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);
//后面的不会被分页,除非再次调用PageHelper.startPage
List<Country> list2 = countryMapper.selectIf(null);
//list1
assertEquals(2, list.get(0).getId());
assertEquals(10, list.size());
//分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
//或者使用PageInfo类(下面的例子有介绍)
assertEquals(182, ((Page) list).getTotal());
//list2
assertEquals(1, list2.get(0).getId());
assertEquals(182, list2.size());
例三,使用PageInfo的用法:
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
下面是我们自己的service层查询方法,使用PageHelper进行分页,取出第二页数据,每页显示两条:
@Override
public List<City> selectAll() {
//分页插件的使用 第一个参数是当前页 第二个参数是每页显示的条数
PageHelper.startPage(2, 2);
return cityDao.selectAll();
}
再来看一下测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MapperTest {
@Autowired</br>
private CityService cityService;</br></br>
@Autowired</br>
private UserService userService;</br></br>
//查询</br>
@Test</br>
public void selectAll() {</br>
List<City> city = cityService.selectAll();</br>
for (City city2 : city) {</br>
System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState());</br>
}</br>
}</br>
}
接下来我们开始测试,通过查看控制台输出信息,说明分页已经生效。数据库一共是四条数据,我们取出第二页数据,取出两条。打印结果如下:

到此,通用Mapper和PageHelper已经和spring boot整合完毕!spring boot 对于开发者来说正变得越来越高效、敏捷!
(完)
参考文章
</div>
spring-boot | 整合通用Mabatis 分页插件PageHelper的更多相关文章
- Spring Boot集成MyBatis与分页插件
Maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>p ...
- spring boot和mybatis集成分页插件
MyBatis提供了拦截器接口,我们可以实现自己的拦截器,将其作为一个plugin装入到SqlSessionFactory中. 首先要说的是,Spring在依赖注入bean的时候,会把所有实现MyBa ...
- SpringBoot整合MyBatis的分页插件PageHelper
1.导入依赖(maven) <dependency> <groupId>com.github.pagehelper</groupId> <artifactId ...
- Spring Boot整合tk.mybatis及pageHelper分页插件及mybatis逆向工程
Spring Boot整合druid数据源 1)引入依赖 <dependency> <groupId>com.alibaba</groupId> <artif ...
- spring boot 整合pagehelper分页插件
Spring Boot 整合pagehelper分页插件 测试环境: spring boot 版本 2.0.0.M7 mybatis starter 版本 1.3.1 jdk 1.8 ------ ...
- Spring Boot系列教程八: Mybatis使用分页插件PageHelper
一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...
- spring boot 整合mybatis 的xml版本【包括逆向工程以及分页插件】
逆向工程很方便,可以直接根据数据库和配置文件生成pojo,mapper接口和相应的映射文件. xml版本和全注解版本其实差不多,大部分情况下,都会保留xml文件方便其他人去扩展新的dml方法. 文章旨 ...
- Spring Boot系列教程十一: Mybatis使用分页插件PageHelper
一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...
- spring boot(二)整合mybatis plus+ 分页插件 + 代码生成
先创建spring boot项目,不知道怎么创建项目的 可以看我上一篇文章 用到的环境 JDK8 .maven.lombok.mysql 5.7 swagger 是为了方便接口测试 一.Spring ...
随机推荐
- 清理TIME_WAIT
cat >> /etc/sysctl.conf << EOFnet.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.t ...
- [HAOI2006]均分数据
题解 今天下午刚学了模拟退火 借这个题来总结下模拟退火的要注意的问题吧 1 : \(eps\)不要设的太大 2 : 初温\(T\)在2000左右就差不多可以了 3 : 注意题目要求是要求最大值还是最小 ...
- Lightoj 1020 - A Childhood Game (博弈)
题目链接: 1020 - A Childhood Game 题目描述: Alice和Bob在玩弹珠游戏,两人轮流拿走弹珠,每次只能拿走一个或者两个,当Alice作为先手时谁拿走最后一个就是输家,而Bo ...
- Android内存管理(15)SparseArray系列代替HashMap系列
参考: https://liuzhichao.com/p/832.html http://www.2cto.com/kf/201311/255640.html 1,简介: SparseArray是an ...
- 231 Power of Two 2的幂
给定一个整数,写一个函数来判断它是否是2的幂. 详见:https://leetcode.com/problems/power-of-two/description/ Java实现: class Sol ...
- MongoDB学习笔记~复杂条件拼接和正则的使用
在大叔lind框架里有日志组件logger,而在日志实现方式上有file,mongodb,sql,json等方式,对分布式日志处理上大叔推荐使用mongodb进行存储,除了它的高效写入,灵活的结构外, ...
- Hbase源码分析:server端RPC
server端rpc包括master和RegionServer.接下来主要梳理一下,master和regionserver中有关rpc创建,启动以及处理的过程. 1,server rpc的初始化过程 ...
- es6 export-from用法
语法: export * from "foo"; export {foo} from "foo"; export {foo, bar} from "f ...
- mac下iterm2 设置笔记
1.利用brew install zsh 来安装oh my zsh 2.chsh -s /bin/zsh,修改~/.zshrc文件 alias cls='clear' alias ll='ls -l' ...
- 【sqli-labs】 对于less34 less36的宽字节注入的一点深入
1.AddSlashes() 首先来观察一下是如何通过构造吃掉转义字符的 先将less 34的网页编码换成gbk 加上一些输出 echo "Before addslashes(): &quo ...