前言
本文主要是针对SpringBoot2.0.2版本,实现整合mybatis、分页插件、druid等组件,实现完整的web服务,提供restful风格接口。
SpringBoot集成MyBatis有两种方式,一种简单的方式就是使用MyBatis官方提供的:
一、mybatis-spring-boot-starter (本文讲解的)
二、 另外一种方式也是我推荐的整合方式:
就是仍然用类似mybatis-spring的配置方式,这种方式需要自己写一些代码,但是可以很方便的控制MyBatis的各项配置,与添加组件。参考:https://my.oschina.net/bianxin/blog/1602958
基础框架
添加整合相关的包:
<!-- 2.0后包含spring-boot-starter的web服务包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
唯一的属性配置文件
项目不使用application.properties文件 而使用更加简洁的application.yml文件(直接改后缀名):
server:
port: 8080
spring:
application:
name: user-center
datasource:
name: test
url: jdbc:mysql://127.0.0.1:3306/xin
username: root
password: root
# 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
mybatis:
mapper-locations: classpath:mapping/*.xml
type-aliases-package: com.winter.model
#pagehelper分页插件
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
#日志级别
logging:
level:
com.xin.usercenter.dao: debug
别的东西和以前一样的,这样就整合完了。
分页实现代码:
public PageInfo<User> getUserBySearch(AppPage<User> page) {
// TODO Auto-generated method stub
PageHelper.startPage(page.getPageNum(),page.getPageSize());
List<User> list=userDao.queryUserList(page.getParam());
PageInfo<User> pageInfo = new PageInfo<User>(list);
return pageInfo;
}
返回的PageInfo的数据结构如下:
{
"total": 5,
"list": [
{
"id": 1,
"loginName": "admin",
"password": "123123",
"nickname": "ADMIN",
"type": 1,
"state": 1,
"note": "超级管理员",
"createTime": "2018-04-28 15:15:46",
"updateTime": "2018-04-28 15:16:37",
"updateUid": 1,
"loginIp": null,
"loginAddr": null
},
{
"id": 2,
"loginName": "bian",
"password": "123456",
"nickname": "Bian",
"type": 1,
"state": 1,
"note": "普通用户",
"createTime": "2018-06-21 11:25:31",
"updateTime": "2018-06-21 11:40:52",
"updateUid": 0,
"loginIp": null,
"loginAddr": null
}
],
"pageNum": 1,
"pageSize": 2,
"size": 2,
"startRow": 1,
"endRow": 2,
"pages": 3,
"prePage": 0,
"nextPage": 2,
"isFirstPage": true,
"isLastPage": false,
"hasPreviousPage": false,
"hasNextPage": true,
"navigatePages": 8,
"navigatepageNums": [
1,
2,
3
],
"navigateFirstPage": 1,
"navigateLastPage": 3,
"firstPage": 1,
"lastPage": 3
}
个人感觉官方返回的这个数据结构很完善了,所以就直接用PageInfo了。
源码地址:https://gitee.com/flying-cattle/earn_knife
欢迎加入技术讨论群:340697945