一个简单的Quarkus CRUD入门

tech2025-08-31  5

一个简单的Quarkus CRUD入门

介绍

Quarkus是一个由Red Hat开源的 Java 微服务框架,前面已经简单尝试过web服务构建(一个简单的Quarkus web服务入门),现在来试试实现数据操作。

本示例项目代码已上传github,地址:https://github.com/mrKyleWang/quarkus-demo

测试表准备

CREATE TABLE `user` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` VARCHAR(100) NOT NULL COMMENT '姓名', `phone` VARCHAR(20) NOT NULL COMMENT '手机号', `create_time` DATETIME NOT NULL COMMENT '创建时间', `update_time` DATETIME NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='用户表';

构建项目

1. pom文件

注意,这里使用的是最新发行版本1.7.2.Final,要求:jdk 8 or 11+、maven 3.6.2+,可根据环境使用低版本quarkus

<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>quarkus-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <quarkus.version>1.7.2.Final</quarkus.version> </properties> <dependencies> <!-- 实现Rest web服务依赖 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jackson</artifactId> </dependency> <!-- hibernate依赖 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-orm-panache</artifactId> </dependency> <!-- mysql驱动依赖 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-mysql</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-bom</artifactId> <version>${quarkus.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.version}</version> <executions> <execution> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

2. 应用配置

application.properties文件

# http服务端口 quarkus.http.port=8082 # url根路径 quarkus.http.root-path=/ # mysql数据源配置 quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8 quarkus.datasource.username=root quarkus.datasource.password=rootpass quarkus.datasource.db-kind=mysql

3. 实体类声明

@Entity(name = "user") @Data public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; private String phone; @CreationTimestamp private Date createTime; @UpdateTimestamp private Date updateTime; }

注意,这里实体类里属性都是使用驼峰命名,而表里字段的是蛇形(下划线)命名,那么存在一个映射的过程,而Hibernate原生未提供这么一个映射器,因此我们需要实现一个自定义命名策略,否则就会因为字段不存在而执行SQL失败。映射实现参考: Quarkus使用Hibernate ORM自定义命名策略(表、字段命名映射)

4. dao声明

只需要声明一个实现PanacheRepository接口的Bean,即可使用接口提供的一系列默认方法来操作数据:

@ApplicationScoped public class UserRepository implements PanacheRepository<User> { }

5. service声明

这里我们添加4个方法,包含了增删改查4类操作:

@ApplicationScoped public class UserService { @Inject UserRepository userRepository; /** * 查询所有用户 */ public List<User> getAll() { return userRepository.listAll(); } /** * 通过手机号查询用户 */ public User getByPhone(String phone) { return userRepository.find("phone", phone).firstResult(); } /** * 保存用户 (事务操作) */ @Transactional public User saveUser(User user) { // 通过手机号查询,如果存在则更新name,否则新增 User persistUser = getByPhone(user.getPhone()); if (persistUser == null) { userRepository.persist(user); } else { // 更新name persistUser.setName(user.getName()); } return persistUser; } /** * 通过id删除用户 */ public void deleteUser(Long id) { userRepository.deleteById(id); } }

注意,其中增、删、查操作都是使用dao的方法,但这里update操作可以直接通过设置对象属性实现,上面代码中由于从dao查出的persistUser对象是一个持久态的对象,通过setName()方法更新对象属性即可同步更新映射的表字段。

6. 接口声明(略)

这里可以直接参考前文:一个简单的Quarkus web服务入门

最新回复(0)