【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 }

运行结果如下

 

posted @ 2022-06-29 18:06  泠雨0702  阅读(63)  评论(0编辑  收藏  举报