[最佳实践] quarkus结合spring-data-jpa
简介
本节主要介绍quarkus利用jpa对数据库进行增删改查,主要参考官方指引.
步骤
- 增加jpa、jdbc依赖
- 编写curd代码
- 配置环境
1. 增加依赖
项目根路径下执行命令添加jpa依赖
./mvnw quarkus:add-extension -Dextensions="spring-data-jpa,jdbc-mysql,resteasy-jackson"
在这一步你或许会遇到报错,这一步要求java jdk版本一定是11+的。
然后你就会发现pom.xml已经加上了mysql和jpa的依赖
2. 编写一个简单crud代码(实际这跟springBoot中的jpa没有什么区别)
所有的类如下图所示
定义一个实体类
package org.acme.spring.data.jpa;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Fruit {
@Id
@GeneratedValue
private Long id;
private String name;
private String color;
public Fruit() {
}
public Fruit(String name, String color) {
this.name = name;
this.color = color;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
定义dao层
package org.acme.spring.data.jpa;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface FruitRepository extends CrudRepository {
List findByColor(String color);
}
定义controller层
package org.acme.spring.data.jpa;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
import java.util.List;
import java.util.Optional;
@Path("/fruits")
public class FruitResource {
private final FruitRepository fruitRepository;
public FruitResource(FruitRepository fruitRepository) {
this.fruitRepository = fruitRepository;
}
@GET
public Iterable findAll() {
return fruitRepository.findAll();
}
@DELETE
@Path("{id}")
public void delete(@PathParam long id) {
fruitRepository.deleteById(id);
}
@POST
@Path("/name/{name}/color/{color}")
public Fruit create(@PathParam String name, @PathParam String color) {
return fruitRepository.save(new Fruit(name, color));
}
@PUT
@Path("/id/{id}/color/{color}")
public Fruit changeColor(@PathParam Long id, @PathParam String color) {
Optional optional = fruitRepository.findById(id);
if (optional.isPresent()) {
Fruit fruit = optional.get();
fruit.setColor(color);
return fruitRepository.save(fruit);
}
throw new IllegalArgumentException("No Fruit with id " + id + " exists");
}
@GET
@Path("/color/{color}")
public List findByColor(@PathParam String color) {
return fruitRepository.findByColor(color);
}
}
设置配置文件application.properties
quarkus.datasource.username=root
quarkus.datasource.password=123456
quarkus.datasource.db-kind=mysql
quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/quarkus1?createDatabaseIfNotExist=true
quarkus.datasource.jdbc.max-size=8
quarkus.datasource.jdbc.min-size=2
quarkus.hibernate-orm.database.generation=drop-and-create
设置初始化数据脚本import.sql,这个脚本会在服务启动时执行
INSERT INTO fruit(id, name, color) VALUES (1, 'Cherry', 'Red');
INSERT INTO fruit(id, name, color) VALUES (2, 'Apple', 'Red');
INSERT INTO fruit(id, name, color) VALUES (3, 'Banana', 'Yellow');
INSERT INTO fruit(id, name, color) VALUES (4, 'Avocado', 'Green');
INSERT INTO fruit(id, name, color) VALUES (5, 'Strawberry', 'Red');
执行代码
点击ide的执行按钮,启动完成后查看数据库,可以看到已经自动建库建表,并插入初始化数据了
访问获取所有数据接口,就可以获取到数据库的数据了