spring-boot | 整合通用Mabatis 分页插件PageHelper
2017-11-13 14:31
831 查看
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() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getState() { return state; } public void setState(String state) { this.state = state; } }
接着,在Mapper接口层继承刚才的MyMapper接口,到这里,单表的增删改查已经实现了。
@Mapper public interface CityMapper extends MyMapper<City>{ }
接着,我们通过测试类测试下,数据库添加好相应数据。
@Autowired private CityMapper cityDao; //查询 @Test public void selectAll() { List<City> city = cityDao.selectAll(); for (City city2 : city) { System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState()); } }
控制台输出结果如下:
其他增删改方法大家大家试着自己尝试,也都特别简单。数据库一共有四条数据,接下来我们加上分页插件。首先我们通过官网看下分页插件所支持的数据库和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 private CityService cityService; @Autowired private UserService userService; //查询 @Test public void selectAll() { List<City> city = cityService.selectAll(); for (City city2 : city) { System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState()); } } }
接下来我们开始测试,通过查看控制台输出信息,说明分页已经生效。数据库一共是四条数据,我们取出第二页数据,取出两条。打印结果如下:
到此,通用Mapper和PageHelper已经和spring boot整合完毕!spring boot 对于开发者来说正变得越来越高效、敏捷!
(完)
参考文章
Mybatis通用Mapper
PageHelper官方文档
相关文章推荐
- Mybatis分页插件 - PageHelper与springBoot的整合
- [置顶] MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件(含源码下载)
- spring-boot 集成mybatis的分页插件PageHelper和Generator
- springboot如何集成mybatis的pagehelper分页插件
- springboot中分页插件pageHelper的使用
- springboot使用之二:整合mybatis(xml方式)并添加PageHelper插件
- spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
- SpringBoot之分页插件PageHelper的使用
- Springboot +pagehelper 分页插件
- Springboot整合pagehelper分页功能
- SpringBoot集成分页插件PageHelper
- SpringBoot Mybatis PageHelper分页插件的两种用法(二)
- SpringBoot分页插件PageHelper
- SpringBoot集成MyBatis的分页插件PageHelper(回头草)
- SpringBoot集成MyBatis的分页插件PageHelper(回头草)
- spring boot +Thymeleaf+mybatis 集成通用PageHelper,做分页
- 记录问题:springboot中使用Mybatis-pagehelper分页插件遇到的版本兼容问题
- spring-boot 集成mybatis的分页插件PageHelper和Generator (番外)
- spring boot集成开源分页插件pagehelper
- SpringBoot Mybatis PageHelper分页插件的两种用法(一)