使用的开发工具是IDEA,框架是SpringBoot2.1.0,SpringBoot2.0要求jdk版本必须在1.8以上。
新建项目时选择Spring Initializr
选择依赖
点按钮【Finish】后项目被创建。
数据库使用的是Mysql,在数据库中新建了测试使用的user表,测试数据如下
项目创建后pom.xml文件已包含的依赖项有
org.springframework.boot
spring-boot-starter-web
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-test
test
在pom.xml的
中添加依赖项Druid,Pagehelper,Swagger2
com.alibaba
druid-spring-boot-starter
1.1.10
com.alibaba
fastjson
1.2.31
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.3
io.springfox
springfox-swagger2
2.5.0
io.springfox
springfox-swagger-ui
2.5.0
将application.properties文件修改为application.yml。yml文件采用的是树状结构,清晰明了。
yml文件所有的键后面的冒号一定要跟一个空格,否则会报配置解析错误。
配置端口
server:
#配置端口
port: 8089
配置数据源
spring:
datasource:
#如果存在多个数据源,监控的时候通过名字来区分开来
name: mysql_springboot
#使用Druid数据源
type: com.alibaba.druid.pool.DruidDataSource
druid:
filters: stat
driver-class-name: com.mysql.cj.jdbc.Driver
#连接数据库的url
url: jdbc:mysql://localhost:3306/springboot_db?useUnicode=true&characterEncoding=utf-8&useSSL=true
#连接数据库的账号
username: root
#连接数据库的密码
password: 123456
#初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initial-size: 1
#最小连接池数量
min-idle: 1
#最大连接池数量
max-active: 20
#获取连接池最大等待时间,单位毫秒
max-wait: 60000
time-between-eviction-runs-millis: 60000
#连接保持空闲而不被驱逐的最长时间
min-evictable-idle-time-millis: 300000
#用来检测连接是否是有效的SQL,要求是一个查询语句
validation-query: SELECT 'x'
#申请连接的时候检测,如果空闲时间大于time-between-eviction-runs-millis,执行validation检测连接是否有效
test-while-idle: true
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
test-on-borrow: false
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
test-on-return: false
#是否缓存preparedStatement,即PSCache
pool-prepared-statements: false
#要启用PSCache,必须配置大于0,当大于0时,pool-prepared-statements自动触发修改为true
max-pool-prepared-statement-per-connection-size: 20
(1)在pom.xml中
添加mybatis-generator插件
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
(2)在resources目录下创建generator文件夹,在新建的generator文件夹中创建generatorConfig.xml配置文件,generator.properties文件。
generatorConfig.xml通过properties标签读取generator.properties文件的配置。
generatorConfig.xml配置文件如下:
generator.properties文件如下:
# 数据库驱动:选择你的本地硬盘上面的数据库驱动包
classPathEntry = C:/Users/shaotiliu/.m2/repository/mysql/mysql-connector-java/8.0.13/mysql-connector-java-8.0.13.jar
# 数据库名称
db = springboot_db
#数据库登录用户名
username = root
#数据库登录密码
password = 123456
# 生成pojo的包名位置 在src/main/java目录下
pojoTargetPackage = com.springboot.frame.entity
# 生成DAO的包名位置 在src/main/java目录下
daoTargetPackage = com.springboot.frame.dao
# 生成Mapper的包名位置 位于src/main/resources目录下
mapperTargetPackage = mapper
(3)运行mybatis-generator插件
在IDEA中打开Edit Configurations;
点击左上角的+号并选择Maven;
在新出现的界面上填写Name,Working directory,Command line这三个地方,其中Name随便命名,Working directory是创建工程的路径,,Command line写的是maven插件的命令【mybatis-generator:generate】填完后点击按钮【Apply】和【OK】;
选择新建的generator,点击绿色三角形运行。
此时,entity、dao、mapper目录下都自动生成了指定的数据库对应的实体类、接口、xml文件,如下图所示
(1)配置mybatis扫描地址
在application.yml配置mapper.xml以及javaBean类的地址
配置mybatis
mybatis:
#mapper.xml包地址
mapper-locations: classpath:/mapper/*.xml
#javaBean类的地址
type-aliases-package: com.spring.demo.entity
(2)在启动类文件中开启Mapper扫描注解
即在启动类添加注解MapperScan,扫描指定包中的接口
@MapperScan("com.springboot.frame.dao")
(3)新建controller类测试
@RestController
public class testController {
@Autowired
userMapper user;
@RequestMapping(value="/test",method = RequestMethod.GET)
public Object test(@RequestParam("id") Integer id){
return user.selectByPrimaryKey(id);
}
}
运行工程,浏览器访问localhost:8089/test?id=1
打印了user表中id=1的记录,表明mybatis集成成功。
前面pom.xml配置数据源时已经配置了Druid。
在dao、entity、controller包同级创建config包,在config包中创建DruidConfig.java配置文件。
DruidConfig.class文件内容:
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DruidConfig {
@Bean()
@Primary
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource druidDataSource() {
System.out.println("注入datasource");
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
@Bean
public ServletRegistrationBean statViewServlet() {
//org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
//添加初始化参数:initParams
//白名单:
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
servletRegistrationBean.addInitParameter("deny", "192.168.1.73");
//登录查看信息的账号.
servletRegistrationBean.addInitParameter("loginUsername","admin");
//登录查看信息的密码.
servletRegistrationBean.addInitParameter("loginPassword","123456");
//是否能够重置数据.
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}
/**
* 注册一个:filterRegistrationBean
* @return
*/
@Bean
public FilterRegistrationBean statViewFilter(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//添加过滤规则.
filterRegistrationBean.addUrlPatterns("/*");
//添加不需要忽略的格式信息.
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
Druid监控的访问路径为localhost:8089/druid/login.html
用代码中设置的账号和密码登录
(1)配置Pagehelper分页插件
在application.yml添加
配置分页插件
#pagehelper分页插件
pagehelper:
#数据库的方言
helper-dialect: mysql
#启用合理化,如果pageNum < 1会查询第一页,如果pageNum > pages会查询最后一页
reasonable: true
support-methods-arguments: true
params: count=countSql
(2)使用Pagehelper分页插件
在调用Mapper的接口之前,使用Pagehelper的startPage()方法,即可实现分页效果。
Controller类示例函数:
@RequestMapping(value="/all",method = RequestMethod.GET)
public Object getAllUsers(@RequestParam("pageNum") Integer pageNum,
@RequestParam("pageSize") Integer pageSize){
PageHelper.startPage(pageNum,pageSize);
return user.selectAllUsers();
}
运行工程,浏览器访问localhost:8089/all?pageNum=2&pageSize=3,得到user表中分页后第二页的三条数据。
(1)在启动类同级目录创建SwaggerConfig.java配置文件
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
//swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//为当前包路径
.apis(RequestHandlerSelectors.basePackage("com.springboot.frame.controller"))
.paths(PathSelectors.any())
.build();
}
//构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("Spring Boot 测试使用 Swagger2 构建RESTful API")
//创建人
.contact(new Contact("MarryFeng", "http://www.baidu.com", ""))
//版本号
.version("1.0")
//描述
.description("API 描述")
.build();
}
}
(2)SwaggerConfig.java设置扫描的包是com.springboot.frame.controller,在controller类的方法添加@Api注解,swagger将会自动扫描类。
添加注解
@ApiOperation:描述API接口的作用
@ApiImplicitParam:说明一个参数信息
@ApiImplicitParams:可说明多个参数信息
@ApiResponses:描述请求网址返回状态码信息
示例:
@ApiOperation(value = "查询所有user的信息接口",notes = "查询数据库中所有user的信息")
@ApiImplicitParam(name ="pageNum",value = "第几页",dataType = "Integer",paramType = "query",required = true,example = "3")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageSize",value = "每页显示user信息条数",dataType = "Integer",paramType = "query",required = true,example = "3")
})
@ApiResponses({
@ApiResponse(code=400,message = "请求参数没有填好"),
@ApiResponse(code=404,message="请求路径没有找到")
})
@RequestMapping(value="/all",method = RequestMethod.GET)
public Object getAllUsers(@RequestParam("pageNum") Integer pageNum,
@RequestParam("pageSize") Integer pageSize){
PageHelper.startPage(pageNum,pageSize);
return user.selectAllUsers();
}
(3)访问地址是localhost:8089/swagger-ui.html
可至Github下载项目参考:Github-SpringBootFrame