【SpingBoot学习笔记】SpingBoot之集成Spring JPA与Swagger
用过许多开发平台,很多都集成了Swagger组件,做集成的时候,按照规范开发,最后都可以在Swagger的ui页面看到接口,也可以进行接口调用测试,特别方便。
虽然也有相关的其他组件,但用的多的还属Swagger,不求最新,但求最实用。
打开IDEA,新建maven项目apitest
项目结构
配置pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.test</groupId> 8 <artifactId>apitest</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 <!--手动引入--> 11 <parent> 12 <groupId>org.springframework.boot</groupId> 13 <artifactId>spring-boot-starter-parent</artifactId> 14 <version>1.3.3.RELEASE</version> 15 </parent> 16 17 <!--手动引入--> 18 <dependencies> 19 <dependency> 20 <groupId>org.springframework.boot</groupId> 21 <artifactId>spring-boot-starter-web</artifactId> 22 </dependency> 23 <dependency> 24 <groupId>mysql</groupId> 25 <artifactId>mysql-connector-java</artifactId> 26 </dependency> 27 <dependency> 28 <groupId>org.springframework.boot</groupId> 29 <artifactId>spring-boot-starter-data-jpa</artifactId> 30 </dependency> 31 <dependency> 32 <groupId>io.springfox</groupId> 33 <artifactId>springfox-swagger-ui</artifactId> 34 <version>2.9.2</version> 35 </dependency> 36 <dependency> 37 <groupId>io.springfox</groupId> 38 <artifactId>springfox-swagger2</artifactId> 39 <version>2.9.2</version> 40 </dependency> 41 </dependencies> 42 <!--手动引入--> 43 <build> 44 <plugins> 45 <plugin> 46 <groupId>org.springframework.boot</groupId> 47 <artifactId>spring-boot-maven-plugin </artifactId> 48 </plugin> 49 </plugins> 50 </build> 51 52 </project>
新建springboot启动类
1 package com.test.user; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import springfox.documentation.swagger2.annotations.EnableSwagger2; 6 7 @SpringBootApplication 8 @EnableSwagger2 9 public class TestSwaggerSpringBootApplication { 10 11 public static void main(String[] args) { 12 SpringApplication.run(TestSwaggerSpringBootApplication.class,args); 13 } 14 }
新建application.properties
1 #1.数据库配置 2 #数据库连接地址 3 spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false 4 #数据库账号 5 spring.datasource.username = root 6 #数据库密码 7 spring.datasource.password = 123456 8 #数据库驱动 9 spring.datasource.driverClassName = com.mysql.jdbc.Driver 10 #指定连接池中最大的活跃连接数 11 spring.datasource.max-active=20 12 #指定连接池最大的空闲连接数量 13 spring.datasource.max-idle=8 14 #指定必须保持连接的最小值 15 spring.datasource.min-idle=8 16 #指定启动连接池时,初始建立的连接数量 17 spring.datasource.initial-size=10 18 19 spring.mvc.pathmatch.matching-strategy=ant_path_matcher 20 21 #spirng jpa 配置 22 spring.jpa.database=MYSQL 23 #显示sql语句 24 spring.jpa.show-sql=true 25 spring.jpa.generate-ddl=true 26 # Hibernate ddl auto (create, create-drop, update) 27 spring.jpa.hibernate.ddl-auto=update 28 #spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect 29 spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy 30 #spring.jpa.database=org.hibernate.dialect.MySQL5InnoDBDialect 31 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
打开mysql,新建数据库test(无需手动建表,jpa支持自动创建表结构)
依次创建user四层对象
SysUserDao.java
1 package com.test.user.dao; 2 3 import com.test.user.entity.SysUser; 4 import org.springframework.data.jpa.repository.Modifying; 5 import org.springframework.data.jpa.repository.Query; 6 import org.springframework.data.repository.CrudRepository; 7 import org.springframework.data.repository.query.Param; 8 import org.springframework.stereotype.Repository; 9 10 import javax.transaction.Transactional; 11 import java.util.List; 12 13 @Repository 14 public interface SysUserDao extends CrudRepository<SysUser, Integer> { 15 /** 16 * 17 * @return 18 */ 19 @Query(value = "select id,name,birth from sys_user t",nativeQuery = true) 20 public List<SysUser> getList(); 21 22 @Transactional 23 @Modifying 24 @Query(value = "update sys_user set name=:name where id=:id",nativeQuery = true) 25 public int updateNameById(@Param("name") String name, @Param("id") int id); 26 27 }
SysUser.java
1 package com.test.user.entity; 2 3 import javax.persistence.*; 4 import java.util.Date; 5 6 @Entity 7 @Table(name = "sys_user") 8 public class SysUser { 9 @Id 10 @GeneratedValue(strategy = GenerationType.AUTO) 11 @Column(name = "id") 12 private int id; 13 14 @Column(name = "name") 15 private String userName; 16 17 public Date getBirth() { 18 return birth; 19 } 20 21 public void setBirth(Date birth) { 22 this.birth = birth; 23 } 24 25 @Column(name = "birth",columnDefinition = "date") 26 private Date birth; 27 28 public int getId() { 29 return id; 30 } 31 32 public void setId(int id) { 33 this.id = id; 34 } 35 36 public String getUserName() { 37 return userName; 38 } 39 40 public void setUserName(String userName) { 41 this.userName = userName; 42 } 43 }
SysUserService.java
1 package com.test.user.service; 2 3 4 import com.test.user.dao.SysUserDao; 5 import com.test.user.entity.SysUser; 6 import org.springframework.stereotype.Service; 7 8 import javax.annotation.Resource; 9 import javax.transaction.Transactional; 10 import java.util.List; 11 12 @Service 13 public class SysUserService { 14 @Resource 15 private SysUserDao sysUserDao; 16 // 保存 17 @Transactional 18 public void save(SysUser user) { 19 sysUserDao.save(user); 20 } 21 22 // 删除 23 @Transactional 24 public void delete(int id) { 25 sysUserDao.delete(id); 26 } 27 28 // 查询 29 public SysUser getUser(int id) { 30 return sysUserDao.findOne(id); 31 } 32 33 public List<SysUser> findList(){ 34 return sysUserDao.getList(); 35 } 36 public int updateNameById(String name,int id){ 37 return sysUserDao.updateNameById(name,id); 38 } 39 }
SysUserRestController.java
1 package com.test.user.webservice; 2 3 import com.test.user.entity.SysUser; 4 import com.test.user.service.SysUserService; 5 import org.springframework.web.bind.annotation.RequestMapping; 6 import org.springframework.web.bind.annotation.RestController; 7 8 import javax.annotation.Resource; 9 import java.util.List; 10 11 @RestController 12 @RequestMapping("/sys") 13 public class SysUserRestController { 14 @Resource 15 private SysUserService userService; 16 17 18 @RequestMapping(value = "/save") 19 public void save(String name) { 20 SysUser user = new SysUser(); 21 user.setUserName(name); 22 23 userService.save(user); 24 } 25 26 @RequestMapping("/findByid") 27 public SysUser findByUserName(int id) { 28 SysUser user = userService.getUser(id); 29 System.out.println(user); 30 return user; 31 } 32 33 @RequestMapping("/findList") 34 public List<SysUser> findList() { 35 List<SysUser> list = userService.findList(); 36 System.out.println(list); 37 return list; 38 } 39 @RequestMapping("/updateNameById") 40 public int updateNameById(String name ,int id) { 41 int i = userService.updateNameById(name,id); 42 System.out.println(i); 43 return i; 44 } 45 }
然后启动项目,打开浏览器输入http://localhost:8080/swagger-ui.htm
找到save,输入用户名,点击执行
查看mysql,正常保存
比较神奇,一个方法显示了多次,且都能调用,大概是因为controller中的方法未指定请求类型
打开SysUserRestController.java文件,修改各方法请求类型
1 package com.test.user.webservice; 2 3 import com.test.user.entity.SysUser; 4 import com.test.user.service.SysUserService; 5 import org.springframework.web.bind.annotation.RequestMapping; 6 import org.springframework.web.bind.annotation.RequestMethod; 7 import org.springframework.web.bind.annotation.RestController; 8 9 import javax.annotation.Resource; 10 import java.util.List; 11 12 @RestController 13 @RequestMapping("/sys") 14 public class SysUserRestController { 15 @Resource 16 private SysUserService userService; 17 18 19 @RequestMapping(value = "/save",method = RequestMethod.POST) 20 public void save(String name) { 21 SysUser user = new SysUser(); 22 user.setUserName(name); 23 24 userService.save(user); 25 } 26 27 @RequestMapping(value = "/findByid",method = RequestMethod.GET) 28 public SysUser findByUserName(int id) { 29 SysUser user = userService.getUser(id); 30 System.out.println(user); 31 return user; 32 } 33 34 @RequestMapping(value = "/findList",method = RequestMethod.GET) 35 public List<SysUser> findList() { 36 List<SysUser> list = userService.findList(); 37 System.out.println(list); 38 return list; 39 } 40 @RequestMapping(value = "/updateNameById",method = RequestMethod.POST) 41 public int updateNameById(String name ,int id) { 42 int i = userService.updateNameById(name,id); 43 System.out.println(i); 44 return i; 45 } 46 }
重启服务后查看,已正常显示
看一位大佬的资料,swagger也支持自定义API文档主页的展示信息及扫描特定的包,需进行如下配置(不配置显示的默认的swagger页面,扫描全部包路径)
1 package com.test.user; 2 3 import io.swagger.annotations.ApiOperation; 4 import org.springframework.context.annotation.Bean; 5 import org.springframework.context.annotation.Configuration; 6 import springfox.documentation.builders.ApiInfoBuilder; 7 import springfox.documentation.builders.PathSelectors; 8 import springfox.documentation.builders.RequestHandlerSelectors; 9 import springfox.documentation.service.ApiInfo; 10 import springfox.documentation.service.Contact; 11 import springfox.documentation.spi.DocumentationType; 12 import springfox.documentation.spring.web.plugins.ApiSelectorBuilder; 13 import springfox.documentation.spring.web.plugins.Docket; 14 import springfox.documentation.swagger2.annotations.EnableSwagger2; 15 16 @Configuration 17 @EnableSwagger2 18 public class SwaggerConfiguration { 19 20 //api接口包扫描路径 21 public static final String SWAGGER_SCAN_BASE_PACKAGE = "com.test.user.webservice"; 22 //设置版本号 23 public static final String VERSION = "1.0.0"; 24 25 @Bean 26 public Docket createRestApi() { 27 return new Docket(DocumentationType.SWAGGER_2) 28 .apiInfo(apiInfo()) 29 .select() 30 .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE)) 31 .paths(PathSelectors.any()) 32 .build(); 33 } 34 35 private ApiInfo apiInfo() { 36 return new ApiInfoBuilder() 37 .title("xx系统在线接口文档") //设置文档的标题 38 .description("用于集成开发工作") // 设置文档的描述 39 .version(VERSION) // 设置文档的版本信息 40 .build(); 41 } 42 }
运行结果如下
本文来自博客园,作者:泠雨0702,转载请注明原文链接:https://www.cnblogs.com/lingyu0702/p/16424470.html