• [最佳实践] quarkus结合springdatajpa


    简介

    本节主要介绍quarkus利用jpa对数据库进行增删改查,主要参考官方指引.

    步骤

    1. 增加jpa、jdbc依赖
    2. 编写curd代码
    3. 配置环境

    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没有什么区别)

    所有的类如下图所示
    CURD框架

    定义一个实体类

    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<Fruit, Long> {
    
        List<Fruit> 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<Fruit> 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<Fruit> 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<Fruit> 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的执行按钮,启动完成后查看数据库,可以看到已经自动建库建表,并插入初始化数据了
    数据库
    访问获取所有数据接口,就可以获取到数据库的数据了
    接口响应

  • 相关阅读:
    Jenkins安装后,安装插件失败。报错SunCertPathBuilderException
    计算机网络
    abaqus
    品优购
    html5 css3
    css定位
    元素的显示与隐藏 / 精灵图
    学成在线案例
    css(3)
    css(2)
  • 原文地址:https://www.cnblogs.com/xiaojiluben/p/15994526.html
Copyright © 2020-2023  润新知