Quarkus操作数据库,直接使用数据库连接池以及集成jpa

本文介绍了如何在Quarkus应用中集成Agroal、MySQL和Spring Data JPA,包括实体定义、数据库配置、使用连接池操作数据库及JPA映射。重点展示了如何通过注解确保数据完整性和使用JPA进行CRUD操作。

 1.引入依赖:

        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-agroal</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-jdbc-mysql</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-spring-data-jpa</artifactId>
        </dependency>

2.实体对象:

@Entity(name = "x_user")
public class XUser {

    @Id
    private Long id;
    @Column
    @NotNull(message = "名称不能为空")
    private String name;

    @Column
    @NotNull(message = "年龄不能为空")
    private Integer age;

    @JsonbDateFormat(value = "yyyy-MM-dd HH:mm:ss")
    @Column
    @NotNull(message = "生日不能为空")
    private LocalDateTime birthday;

3.配置数据库连接:

quarkus.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
quarkus.datasource.driver=com.mysql.cj.jdbc.Driver
quarkus.datasource.username=root
quarkus.datasource.password=123456
quarkus.datasource.min-size=8
quarkus.datasource.max-size=8

4.直接使用数据库连接池进行操作数据库:

    @Inject
    AgroalDataSource dataSource;

    @Path("save")
    @POST
    @Cut
    public Object save(@Valid XUser xUser) {
        try {
            Connection connection = dataSource.getConnection();
            PreparedStatement preparedStatement = connection.prepareStatement("insert into x_user values(?,?,?,?)");
            preparedStatement.setLong(1, LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")));
            preparedStatement.setString(2, xUser.getName());
            preparedStatement.setInt(3, xUser.getAge());
            preparedStatement.setObject(4, xUser.getBirthday());
            int count = preparedStatement.executeUpdate();
            if (count < 1) {
                return "fail";
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return "ok";
    }

5.使用jpa操作数据库连接池:

public interface UserMapper extends CrudRepository<XUser, Long> {
}
    @Inject
    UserMapper userMapper;

    @Path("list")
    @GET
    @Cut
    public Object list() {
        return userMapper.findAll();
    }

 

<think>我们正在为基于JavaEE的毕业设计选择框架和关键技术。JavaEE(现在称为JakartaEE)是一个广泛使用的企业级平台,适用于构建大规模、分布式、事务性和安全的应用程序。毕业设计通常需要展示对技术的理解和应用能力,因此选择流行且有一定深度的框架和技术组合是关键。考虑因素:1.学习曲线:毕业设计时间有限,应选择文档丰富、社区活跃的技术。2.流行度:使用广泛的技术有助于展示市场相关性。3.项目规模:毕业设计通常为中小型项目,不宜过于复杂。4.技术栈的完整性:从前端到后端,数据库,安全等需要完整覆盖。推荐框架和关键技术:1.**后端框架**:-**SpringBoot**:虽然SpringBoot不是JavaEE官方的一部分,但它已成为企业Java开发的事实标准。它简化了配置,提供了强大的功能(如依赖注入、AOP、数据访问、事务管理、安全等),并且有大量的starter包可以快速集成其他技术。对于毕业设计来说,SpringBoot是首选,因为它可以快速启动项目并减少样板代码。-**JakartaEE**:如果必须使用JavaEE(JakartaEE)技术,可以选择以下技术栈:-**EJB(EnterpriseJavaBeans)**:用于事务管理和分布式业务逻辑,但近年来使用减少,更倾向于轻量级方案。-**CDI(ContextsandDependencyInjection)**:依赖注入和上下文管理。-**JPA(JakartaPersistenceAPI)**:用于ORM(对象关系映射)。-**JAX-RS(JakartaRESTfulWebServices)**:用于构建RESTfulWeb服务。然而,目前SpringBoot在市场上更流行,且对毕业设计更友好。2.**持久层(数据库访问)**:-**SpringDataJPA**:基于JPA,提供了Repository抽象,极大简化了数据库操作。-**Hibernate**:JPA的一个流行实现,可以和SpringDataJPA一起使用。-如果项目需要复杂的SQL操作,可以考虑使用**MyBatis**,它提供了更大的灵活性。3.**前端技术**:-如果选择前后端分离架构(推荐),可以使用:-**React**:流行的前端库,组件化开发。-**Vue.js**:渐进式框架,易于上手。-**Angular**:完整的框架,适合大型应用。-如果选择服务端渲染,可以使用:-**Thymeleaf**:适用于SpringBoot的模板引擎。-**JSF(JakartaServerFaces)**:JavaEE的标准,但学习曲线较陡。4.**安全框架**:-**SpringSecurity**:功能强大且高度可定制的安全框架,支持身份验证、授权、防护攻击等。-**JakartaSecurity**:JavaEE的安全API,但功能不如SpringSecurity丰富。5.**中间件/其他**:-**消息队列**:如果项目需要异步通信,可以使用**ApacheKafka**或**RabbitMQ**。-**缓存**:**Redis**或**Ehcache**。-**API文档**:**Swagger/OpenAPI**,可以自动生成API文档。6.**构建工具**:-**Maven**或**Gradle**:推荐Gradle,因为构建脚本更简洁。7.**测试**:-**JUnit5**:单元测试。-**Mockito**:模拟对象进行测试。-**SpringTest**:提供Spring应用的集成测试支持。8.**部署**:-可以部署到**Tomcat**(SpringBoot内嵌Tomcat)或**WildFly**(JakartaEE应用服务器)。-容器化:使用**Docker**打包应用,便于部署。综合推荐:鉴于毕业设计的常见需求,推荐使用**SpringBoot**作为核心框架,因为它集成了Spring生态的众多模块(如SpringMVC,SpringDataJPA,SpringSecurity等),并且可以快速开发。同时,结合前端框架(如Vue.js)实现前后端分离,使用SpringDataJPA和Hibernate操作数据库,用SpringSecurity处理安全,用Gradle构建项目。示例技术栈:-后端:SpringBoot2.x/3.x-持久层:SpringDataJPA+Hibernate-数据库:MySQL/PostgreSQL-前端:Vue.js+ElementUI/AntDesignVue-安全:SpringSecurity-构建工具:Gradle-测试:JUnit5,Mockito,SpringTest-部署:Docker+Tomcat(内嵌)这个组合技术流行、学习资源丰富,能够展示全面的开发能力。注意:如果学校要求必须使用JavaEE(JakartaEE)规范,那么可以选择使用最新的JakartaEE9+,并配合一个轻量级应用服务器(如TomEE或WildFly)进行开发。但是,SpringBoot通常更容易上手且功能全面。相关问题:1.如何开始一个SpringBoot项目?2.SpringBoot和JakartaEE的主要区别是什么?3.在毕业设计中如何设计数据库?4.如何实现SpringSecurity的认证和授权?5.前后端分离的项目如何部署?</think>### 基于 Java EE 的毕业设计框架与技术推荐 #### 一、核心框架选择 1. **Spring Boot (推荐首选)** - **优势**:简化配置、内嵌 Tomcat/Jetty、提供 starter 依赖快速集成组件[^1] - **适用场景**:微服务架构、RESTful API 开发、全栈应用 - **关键技术**: - Spring MVC (Web 层) - Spring Data JPA (持久层) - Spring Security (安全认证) - 示例依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2. **Jakarta EE 9+ (原生企业级方案)** - **核心组件**: - CDI (依赖注入):`@Inject` 注解管理 Bean - JPA (持久化):Hibernate 或 EclipseLink 实现 - JAX-RS (REST 服务):配合 Jersey/RESTEasy - **服务器**:WildFly、Payara 或 OpenLiberty - **优势**:符合企业开发标准,适合学习规范 3. **混合方案** - Spring Boot + Jakarta EE 组件 (如 JPA/JTA) - 示例:用 Spring Boot 集成 Hibernate 实现 ORM #### 二、关键技术栈 | 类别 | 推荐技术 | 作用说明 | |-------------|-----------------------------------|------------------------------| | **前端** | Thymeleaf / JSF | 服务端渲染模板 | | | Vue.js/React + REST API | 前后端分离方案 | | **数据库** | MySQL/PostgreSQL | 关系型数据库 | | | Spring Data JPA / Hibernate | ORM 框架 | | | Flyway/Liquibase | 数据库版本迁移 | | **安全** | Spring Security / Jakarta Security | 认证授权管理 | | **测试** | JUnit 5 + Mockito | 单元测试与模拟 | | | Testcontainers | 集成测试(容器化数据库) | | **部署** | Docker + Jenkins | 容器化与持续集成 | #### 三、典型项目架构示例 ``` src ├── main │ ├── java │ │ └── com/example │ │ ├── controller (REST API) │ │ ├── service (业务逻辑) │ │ ├── repository (数据访问) │ │ └── config (安全/持久化配置) │ ├── resources │ │ ├── application.yml (Spring Boot配置) │ │ └── db/migration (Flyway SQL脚本) │ └── webapp (JSF/Vue静态资源) ├── test (测试代码) └── Dockerfile (容器化部署) ``` #### 四、选择建议 1. **学习型项目**: - 优先 Spring Boot + Vue.js (技术生态丰富,社区支持强) - 实现功能:课程管理系统/在线书店,含 JWT 认证 2. **企业规范项目**: - Jakarta EE 9+ 全栈方案 (WildFly + JSF + JPA) - 实现功能:库存管理系统,使用 CDI 事件驱动 3. **创新项目**: - Spring Boot + Quarkus (云原生方案) - 集成 Kafka 实现异步通信 > 提示:避免过度追求新技术堆砌,重点展示**技术整合能力**和**业务逻辑实现**。数据库设计建议遵循第三范式(3NF)[^2]。 #### 五、性能优化点 - 使用连接池:HikariCP - 二级缓存:Ehcache 或 Redis - API 文档:Swagger UI - 日志管理:SLF4J + Logback
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值