jpa 不等于 update_SpringBoot整合:JPA+Redis+Swagger2,搭建RestfulAPI在线文档

Spring Boot整合JPA

JPA全称为JAVA PersistenceAPI,它是一个数据持久化的类和方法的集合。JPA的目标是制定一个由很多数据库供应商实现的API,开发人员可以通过编码实现该API。目前,在Java项目开发中提到JPA一般是指用Hibernate的实现,因为在Java的ORM框架中,只有Hibernate实现得最好。本节以案例的形式来讲述如何在Spring Boot 工程中使用JPA。另外,案例使用的数据库为MySQL数据库,需要读者提前安装好。

(1)新建一个Spring Boot项目

在Spring Boot工程的pom 文件依次引入Web功能的起步依赖spring bo-trterweb、JPA的起步依赖
spring-boot-starter-datajpa、MySQL 数据库的连接器的依赖mysql-connector-java,其代码如F:

<dependency>
<groupId>org.springframework. bootgroupId>
<artifactId>spring-boot-starter -webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spr ing-boot-starter-data-jpa
artifactId>
dependency>
<dependency>
<group Id>mysq1groupId>
<artifact Id>mysql-connector-javaartifactId>
<scope> runt imescope>
dependency>

(2)配置数据源

在工程的配置文件pplication.yml文件中加上相应的配置,需要配置两个选项: DataSoure数据源的配置和JPA的配置。其中,数据源的配置包括连接MySQL的驱动类(例如com.mysql.jdbc.Driver)、MySQL数据库的地址Url、MySQL数据库的用户名username和密码password.JPA的配置包括hibernate. ddl-auto配置,配置为create时,程序启动时会在MySQL数据库中建表;配置为update 时,在程序启动时不会在MySQL数据库中建表: jpa.show-sql 配置为在通过JPA操作数据库时是否显示操作的SQL语句。配置代码如下:

spring:
datasource:
driver-class-name: com. mysql. jdbe.Driver
url: jdbc:mysq1://localhost: 3306/spring-e1oud?ueUni code-true&characterEncoding=u
tfcharactersetReaults-utf8
username: root
password: 123456
jpa:
hibernate:
ddl-auto: create . 第一次简表create.后面用 update.
show-sq1: true

(3)创建实体对象

通过@Entity注解表明该类是一一 个实体类,它和数据库的表名相对应: @Id 注解表明该变量对应于数据库中的Id, @GeneratedValue 注解配置Id字段为自增长: @Column 表明该变量对应于数据库表中的字段,unique = true表明该变量对应于数据库表中的字段为唯一-约束。代码如下:

@Entity
public class User (
eId
@GeneratedValue (strategy = GenerationType 。IDENITY)
private. Long id;
8Column (nul1ab1e = false, unique = true)
private String username;
private String password;

省略了getter. setter方法

(4)创建DAO层

数据访问层DAO,通过编写一个UserDao类,该类继承JpaRepository 的接口,继承之后就能对数据库进行读写操作,包含了基本的单表查询的方法,非常方便。在UserDao类写一个findByUsermame的方法,传入参数username, JPA 已经实现了根据某个字段去查找的方法,所以该方法可以根据usermame字段从数据库中获取User的数据,不需要做额外的编码。代码如下:

public interface UserDao extends JpaRepository<User, Long> 「
User findByUsername (String username);
}

(5)创建Service层

在UserService类中注入UserDao, 并写-个根据用户名获取用户的方法,代码如下:

eService
public class Userservice
@Autowired
private UserDao userRepository;
public User findUserByName (String username) {
return userRepository. findByUsername (username);
}
}

(6)创建Controller层

在UserController类写-一个Get类型的API接口,其中需要说明的是@PathVariable注解,

可以获取RESTful风格的Url路径上的参数。

eRequestMapping(" /user")
RestController
publie class UserController
@Autowi red
Userservice userservice;
@GetMapping("/ (username)")
publie User getuser (Pathvari able ("username")string username) (
return userService 。findUserByName (username) ;
}
}

启动运行程序,控制台输出的日志如下:

Hibernate: drop table if exists user
Hibernate: create table user (id bigint not null auto_ increment, password varchar (255
),username varchar(255) not null, primary key (id))

可见,JPA在启动程序时在数据中创建了user 表。在终端上用命令行show tables,确实发现user表被创建了。这时在数据库中插入一条数据:

|insert into 'user' (username, password) VALUES ('forezp'. '123456');

再打开浏览器,在浏览器中输入“lcalhost:8080/user/forezp",可以从数据库读取username

字段为forezp的用户对象,浏览器显示的数据如下:

|l"id" :1, "username":"forezp" , "password" :*123456")

Spring Boot整合Redis

Redis 简介

Redis是一个开源的、先进的key-value 存储系统,可用于构建高性能的存储系统。Redis支持数据结构有字符串、哈希、列表、集合、排序集合、位图、超文本等。NoSQL (Not OnlySQL)泛指非关系型的数据库。Redis 是一种NoSQL, Redis 具有很多的优点,例如读写非常快速,支持丰富的数据类型,所有的操作都是原子的。

Redis 的安装

(1) Mac下安装

通过brew命令安装,安装后启动Redis服务器和客户端,命令如下:

安装: brew install redis

启动服务器:redis-server

启动客户端: redis-cli

(2) Windows 下安装

Redis官方没有提供Windows 版本,不过微软维护了一个版本,下载地址为htps:/github.om/ MSOpenTech/edis/releases,下载.msi版本,一 直单击“下一步” 完成安装即可。

在Spring Boot中使用Redis

新建一个Spring Boot 工程,在工程的pom文件中加入Redis 的起步依赖spring-boot-starter- data-redis,代码如下:

<dependeney>
<groupId>org. springframework . bootgroupId>
<artifactId>spring-boot- starter-data- redisartifactId>
dependency>

在工程的配置文件application.yml中加上Redis的数据源配置,例如host. port. 数据库配置信息等。如果Redis设置了密码,需要提供密码,选择序号为1的数据库,配置Pool的相关配置。配置代码如下:

spring:
redis;
host: 1ocalhost
port: 6379
password:
database: 1
pool:
max-active: 8
max-wait: -1
max-idle: 500

数据操作层的RedisDao类通过@Repository注解来注入Spring loC容器中,该类是通过RedisTemplate来访问Redis的。通过注入StringRedis' Template的Bean来对Redis 数据库中的字符串类型的数据进行操作,写了两个方法,包括向Redis中设置String类型的数据和从Redis中读取String类型的数据,代码如下:

@Repository
public class RedisDao
@Autowired
private StringRedisTemplate template ;
publlc vold setKey (string key,string value) (
ValueOperationscstring. string> ops 中template. opsForvalue();
ops.set (key, value,1, TimeUnit .MINUTES);//1分钟过期
public String getValue(String key)(
ValueOperationscString. string> ops = this. template. opsForvalue();
return ops。get (key);

在SpringBootTest的测试类中注入RedisDao,首先通过RedisDao向Redis 设置两组字符串值,即name为forezp, age为17的两组字符串,然后分别通过RedisDao从Redis 中读取这两个值,并打印出来,代码如下:

@RunWith (SpringRunner .class
@SpringBootTest
public class springbootRedisApplicationTests
@Test
publie vold contextLoads() {
CAutowired
RedisDao redisDaor
eTest
public void testRedis(){
redisDao.setKey("name", "forezp");
redisDao.setKey("age",”17");
logger . info (redisDao . getValue ("name"));
logger。info (redisDao . getvalue ("age"));

启动单元测试,控制台打印了forezp 和17的两个字符串值。可见,通过RedisDao首先向Redis数据库中写入了两个数据,然后又读取了这两个数据。

Spring Boot整合Swagger2,搭建RestfulAPI在线文档

Swagger,中文“拽"的意思,它是一个功能强大的在线API文档的框架,目前它的版本为2.x,所以称为Swagger2。Swagger2 提供了在线文档的查阅和测试功能。利用Swagger2很容易构建RESTful风格的API,在Spring Boot中集成Swagger2,在本案例中需要以下5个步骤。

(1)引入依赖

在工程的pom文件中引入依赖,包括springfox-swagger2和springfox-swagger-ui的依赖,代码如下:

<dependeney>
<group1d>io. springfoxgroupId>
<artifactId>springfox- swagger2artifactId>
<version>2.6. 1version>
dependency>
<dependency>
<groupId>io.spr ingfoxgroupId>
<artifactId>spr ingfox- swagger-uiartifactId>
<version>2. 6.1version>
dependency>

(2)配置Swagger2

写一个配置类Swagger2,在类的上方加上@Configuration注解,表明是一- 个配置类,加上@EnableSwagger2开启Swagger2的功能。在配置类Swagger2中需要注入一一个Docket的Bean,该Bean包含了apilnfo,即基本API文档的描述信息,以及包扫描的基本包名等信息,代码如下:

@Configuration
@EnableSwagger2
public class Swagger2 l
eBean
publle Docket createRestApi()
return new Docket (DocumentationType. SWAGGER_ 2)
. apiInfo(apiInfo())
.select()
.apis (RequestHandlerSelectors . basePackage ("com. forezp . controller"))
,paths (Pathselectors。any())
. build();
private ApiInfo apiInfo() 1
return new ApiInfoBuilder ()
.title ("springboot利用swagger构建api文档")
。description ("简单优雅的restfun风格,http://blog。csdn.net/forezp")
.termsOfServiceUrl ("http://blog.csdn.net/forezp")
.version("1.0")
.bulld();

(3)写生成文档的注解

Swagger2通过注解来生成API接口文档,文档信息包括接口名、请求方法、参数、返回信息等。通常情况下用于生成在线API文档,以下的注解能够满足基本需求,注解及其描述如下。

@Api: 修饰整个类,用于描述Controller类。

@ApiOperation: 描述类的方法,或者说一 个接口。

@ApiParam:单个参数描述。

@ApiModel:用对象来接收参数。

@ApiProperty: 用对象接收参数时,描述对象的一一个字段。

@ApiResponse: HTTP 响应的一- 个描述。

@ApiResponses: HTTP 响应的整体描述。

@Apilgnore:使用该注解,表示Swagger2忽略这个API.

@ApiError :发生错误返回的信息。

@ApiParamlmplicit: - -个请求参数。

@ApiParamsImplicit:多个请求参数。

(4)编写Service层代码

本节案例在4.5节的案例基础之上进行改造,构建了一组RESTful风格的API接口,包括获取User列表、创建User、修改User、根据用户名获取User、删除User的API接口,对应于Service层的代码如下:

aService
public class UserService {
BAutowi red
private UserDao userRepository;
public User findUserByName (string username) (
return userRepository. findByUsername (username);
public ListfindA1l(){
return userRepository. findA11():
publie User saveUser (User user) {
return userRepository.save (user);
publie User finduserById(long 1d) (
return userRepository. findone (1d);
public User updateUser (User user) (
return userReposi tory, saveAndFlush (user) ;
public void deleteUser (1ong id) (
userRepository.delete (id);

(5) Web层

在Web层通过Get Post、Delete. Put这4种Http方法,构建- -组以资源为中心的RESTful风格的API接口,代码如下:

@RequestMapping (" /user")
@RestController
public class UserController {
@Autowired
UserService userservicer
BApiOperation (value-"用户列表”,notes-" 用户列表")
eRequestMapping (value=(""}, method- RequestMethod 。GET)
public List getUsers0: {
List users = userService. findA110)1;
return users;
0Apioperation (value= "创建用户",notes="创建用户")
0RequestMapping (value-", method-RequestMethod 。POST)
public User postUser (RequestBody User user) {
return
userservice. saveUser (user);
@Apioperation(value-"获用户细信息”,notes-"根掘 url的id来获取详细信息")
@RequestMapping (value-"/lid}", method-RequestMethod 。GET )
public User getUser (@Pathvariable Long id) (
return userservice. findUserById(id);
lApioperation (value-"更新信息",notes="根据 url的id来指定更新用户信息")
RequestMapping (value-"/(id}", method= RequestMethod. PUT)
publie User putUser (8PathVariable Long id, eRequestBody User user) {
User user1 一new User();
user1.setUsername (user .getUsername(0);
user1.,etPassworduser. getPassword()); .
userl.setIdlid);
return userService 。. updateUser (user1);
BApioperation (value-"删除用户,notes-"根据 url的id来指定利除用户")
ERequestMapping (value-"/lid}", method-Reques tMethod . DELETE)
public string deleteUser (@Pathvariable Long id) (
userservice.deleteuser (id) ;
return "success";
JAplIgnore//使用该注解忽略这个API
RequestMapping(value一"/hi", method = RequestMethod. GET)
publlc string gsonTest() 1
return " hi you!";

通过@ApiOperation注解描述生成在线文档的具体API的说明,其中value值为该接口的名称,notes 值为该接口的详细文档说明。这样就可以让Swagger2生成在线的API接口文档了。如果不需要某接口生成文档,只需要再加@Apignore注解即可。启动工程,在浏览器上访问http ://localhost:8080 swagger-ui.html浏览器显示Swagger-UI在线文档的界面,界面如图4-2所示。

921e506d261c7a1c13e6fd230a3cb4ce.png

喜欢文章的话可以转发关注小编,每天分享干货!!!

8cf24b82e257cffcaccc0612eba1d982.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值