一个简单的Quarkus CRUD入门

一个简单的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服务入门

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值