大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。
社群交流
为了给大家提供一些技术交流的平台,目前已成立的技术交流群:
Oracle 数据库交流群 国产数据库交流群 Linux 技术交流群 ChatGPT 4o 免费体验群 Oracle 一键安装脚本群 Oracle 一键巡检脚本群
需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。

本文来自群里小伙伴 巫山暮雨 的投稿,介绍了 Spring JPA 如何集成 YashanDB 的流程,思路清晰,干货满满!
引言
关于 Spring JPA
Spring JPA(Java Persistence API)是 Java EE 中关于持久化(即对象持久化到数据库)的标准规范,它为 Java 应用提供了一种与数据库交互的面向对象的方法。Spring Data JPA 是 Spring 对 JPA 的实现,它极大地简化了数据持久化的操作。
以下是 Spring JPA 的重要性和用途:
重要性:
简化数据库操作:Spring JPA 抽象了底层的数据库操作,使得开发者可以不用编写大量的 JDBC 代码,而是通过配置和简单的 API 调用来完成数据库的 CRUD(创建、读取、更新、删除)操作。 对象关系映射(ORM):Spring JPA 通过 ORM 技术,允许开发者以面向对象的方式处理数据库操作。这意味着可以在代码中直接操作对象,而 Spring JPA 会在后台将这些操作转换为相应的 SQL 语句。 提高开发效率:由于 Spring JPA 提供了丰富的 API 和便捷的配置,开发者可以快速构建数据访问层,从而节省时间,提高开发效率。 数据访问的可移植性:Spring JPA 定义了一套标准的数据访问接口,这意味着开发者可以使用相同的代码在不同的数据库之间进行切换,而不需要对代码进行大量修改。 减少错误和提高代码质量:由于 Spring JPA 提供了声明式事务管理,可以减少因手动管理事务而导致的错误。同时,它还提供了缓存、延迟加载等高级特性,有助于提高代码的质量和性能。 集成Spring生态系统:Spring JPA 与 Spring 框架的其他部分(如 Spring MVC、Spring Security 等)紧密集成,使得在 Spring 生态系统中构建企业级应用变得更加容易。
数据持久化:将内存中的对象状态持久化到数据库中,以及从数据库中检索对象。 查询优化:使用 JPQL(Java Persistence Query Language)或 Criteria API 构建复杂的查询,这些查询比手写SQL更加易于维护和理解。 事务管理:通过声明式或编程式事务管理来控制数据的一致性和完整性。 数据模型映射:将数据库表映射到 Java 对象,以及处理对象之间的关联关系(如一对多、多对多)。 缓存管理:使用二级缓存来提高数据访问的性能。 审计和日志记录:跟踪实体的更改历史,这对于审计和调试非常有用。 批量操作和异步处理:执行批量插入、更新和删除操作,以及异步处理数据,以提高性能。 多租户支持:在 SaaS 应用中,Spring JPA 可以支持多租户的数据隔离。 集成测试:通过模拟数据库操作,可以轻松地进行集成测试,而不需要实际的数据库环境。
Spring JPA 的这些特点和用途使其成为现代 Java 应用开发中不可或缺的一部分,特别是在需要与数据库交互的应用程序中。
关于 YashanDB
YashanDB 是一款企业级数据库管理系统,它具有以下特点和优势:
高性能并发处理:YashanDB 通过细粒度并发控制、免锁事务优化和自适应并发调度算法,显著提高了执行性能。在 TPC-C 模型下的 Benchmark 测试中,YashanDB 单节点事务吞吐量可达 140 万 tpmC,性能较原有系统提升 1.2-60 倍。 有界计算能力:YashanDB 提供有界计算能力,能够在大数据分析时,不需要访问全部数据,只需取其中的小数据集就能得到想要的答案。这使得在数据量从 10GB 增长到1TB 时,YashanDB 响应时延维持亚秒级,性能提升千倍以上且未衰减,极大地节约了计算资源。 核心替代和平滑迁移:YashanDB 提供对 Oracle 生态的全面兼容,支持存量系统在语法、语义、PL/SQL 等高级功能的完整兼容能力,实现平滑迁移。在某央企集团国产化替代实践中,YashanDB 实现了 99% 以上的兼容程度。 企业级运维管控平台:YashanDB 提供数据库全生命周期智能运维管控能力,支持自动化安装部署,巡检策略,以及全方位的诊断分析能力,大幅提升运维效率。 “金字塔”体系保障业务连续性:YashanDB 提供原生“金字塔”保障体系,形成从可用性、容错性、易恢复性到稳定性全方位的可靠性保障,消除业务停服风险,做到大负载下 RTO<10s,RPO=0。 向量化执行引擎:YashanDB V22.2 采用全新设计的 MPP 分布式架构,支持向量执行、SMP、冷热数据的静默转换和融合查询,在实时数据分析、多表关联查询、adhoc 查询等场景均能提供高效的分析体验。 一站式企业级融合数据管理解决方案:YashanDB 支持单机主备部署形态,并配套开发者工具、监控运维工具、数据迁移工具,满足不同场景的解决方案需求。 云原生和虚拟化部署:YashanDB 提供云化部署解决方案,全面满足客户在存算分离、弹性扩展、高可用等方面的业务需求。 极致易用,全场景图形化工具:YashanDB 提供 E2E 的全生命周期管理解决方案,搭建支持灵活部署、一键迁移、智能运维等功能的一站式工具体系。 “1+3”服务体系:YashanDB 提供“1+3”服务架构,即原厂提供的标准及高级服务,和由知识库、DBA 及伙伴共同构建的服务能力,形成覆盖全行业、全区域的 7*24 快速响应及服务能力。
YashanDB 的这些特点和优势使其在金融、政府、运营商、央国企等关键行业中具有强大的竞争力和广泛的应用前景。
教程的目的和预期读者
教程目的
本教程旨在为软件开发者、数据库管理员和IT专业人士提供一个全面的指南,以理解和实现 Spring JPA 与 YashanDB 的集成。通过本教程,读者将能够:
理解 Spring JPA 的基本概念和核心组件,以及它们如何与 YashanDB 数据库协同工作。 掌握 Spring JPA 与 YashanDB 集成的步骤,包括配置数据源、实体映射、仓库接口和事务管理。 学习如何使用 Spring JPA 进行数据访问和操作,包括 CRUD 操作、查询优化和高级特性如继承映射和多表关联。 探索性能优化和最佳实践,以确保应用程序在 YashanDB 上运行时的效率和稳定性。 了解如何进行故障排除和日志记录,以便在开发和生产环境中快速定位和解决问题。
预期读者
本教程面向以下类型的读者:
初级到中级 Java 开发者:对 Java 编程有一定的了解,希望学习如何使用 Spring JPA 和 YashanDB 进行数据库操作的开发者。 数据库管理员(DBA):需要了解如何配置和管理 YashanDB 数据库,以及如何与 Spring JPA 集成的数据库管理员。 IT 专业人士和系统架构师:负责设计和实施企业级解决方案,需要了解 Spring JPA 和 YashanDB 如何协同工作以满足业务需求的专业人士。 学生和教育工作者:正在学习数据库管理和 Java 企业级开发的学生,以及需要准备相关课程材料的教育工作者。 技术爱好者和自学者:对 Spring JPA 和 YashanDB 技术感兴趣,希望通过实践示例和教程来扩展知识的技术爱好者。 需要迁移到YashanDB的开发者:那些需要将现有应用程序从其他数据库迁移到 YashanDB,并且希望利用 Spring JPA 简化这一过程的开发者。
本教程假设读者已经具备基本的 Java 编程知识和对数据库操作的一般理解。通过本教程的学习,读者将能够构建高效、可维护且可扩展的 Spring JPA 应用程序,这些应用程序可以在 YashanDB 上运行。
第 1 章:环境准备
系统和软件要求:
Java 版本:1.8 Spring Boot 版本:2.1.11.RELEASE YashanDB 版本:yashandb-personal-23.3.1.100[脚注1] Maven 依赖:3.8.1 其他依赖:YashanDB 开发 sql 工具 YDC
开发工具推荐:
IDEA YashanDB Developer Center 23.3[脚注2] apipost 接口调试工具
第 2 章:YashanDB 基础
关于 YashanDB 的安装和配置,可以参考:YashanDB 一键安装脚本分享,连接 YashanDB 数据库可以使用 YDC,可以参考官方教程。
创建数据库和表:
-- 执行以下语句创建用户以及授权
CREATE USER erupt IDENTIFIED BY erupt;
COMMIT;
GRANT CONNECT TO erupt;
GRANT RESOURCE TO erupt;
GRANT DBA TO erupt;
COMMIT;
至此,数据库安装完成,用户创建完成。
第 3 章:Spring Boot 与 YashanDB 集成
创建 Spring Boot 项目
使用 IDEA 创建 SpringJPA 项目,创建完成后项目接口如下:
添加 YashanDB 依赖(两种方式添加依赖):
1、mvn install 添加 YashanDB 驱动到本地仓库
mvn install:install-file -Dfile=D:\yashandb-jdbc-1.8.0.jar -DgroupId=com.yashandb -DartifactId=yashandb -Dversinotallow=1.8.0 -Dversion=1.8.0 -Dpackaging=jar
然后在 pom.xml 文件引用
<dependency>
<groupId>com.yashandbgroupId>
<artifactId>yashandbartifactId>
<version>1.8.0version>
dependency>
2、打开 IDEA 的 ProjectStructure,使用 Libraries 添加 YashanDB 的连接驱动,对于多模块,只需要添加到对应的模块即可:
配置 application.properties 或 application.yml
我这里使用的 application.yml,由于 JPA 的枚举以及方言不支持 Yashan,我们这里直接使用 Oralce 的方言;连接驱动使用 YashanDB 的驱动类:
server:
port: 8000
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.yashandb.jdbc.Driver
url: jdbc:yasdb://172.18.100.153:1688/yasdb
username: erupt
password: erupt
jpa:
show-sql: true
generate-ddl: true
database-platform: com.yashandb.jpa.YasDialect
properties:
hibernate:
dialect: org.hibernate.dialect.OracleDialect
hbm2ddl:
auto: create
naming-strategy:
org.hibernate.cfg.ImprovedNamingStrategy
temp:
use_jdbc_metadata_defaults: false
实体类与数据库表映射
创建一个简单的用户实体类 User:
package com.example.jpayashan.model;
import lombok.Data;
import org.hibernate.annotations.ColumnDefault;
import javax.persistence.*;
import java.io.Serializable;
@Data
@Entity
@Table(name = "t_user")
public class User {
@Id //hibernate要求必须要一个id(主键),不然会报错
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "user_sequence")
@ColumnDefault("user_sequence.nextval")
private int id;
@Column(name = "name")
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
}
数据访问层(Repository)
创建一个用户仓库接口 UserRepository:
package com.example.jpayashan.Repository;
import com.example.jpayashan.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
测试接口
package com.example.jpayashan.controller;
import com.example.jpayashan.Repository.UserRepository;
import com.example.jpayashan.model.User;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/User")
public class UsersController {
@Resource
private UserRepository userRepository;
@PostMapping("/insert")
public String insert(@RequestBody User user) {
userRepository.save(user);
return "接口调用成功!";
}
@GetMapping("/select")
public List findAll() {
return userRepository.findAll();
}
}
启动类
确保你的 Spring Boot 启动类上有 @SpringBootApplication 注解,这样 Spring Boot 才能自动扫描并加载配置。
package com.example.jpayashan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.example.jpayashan.Repository")
@EntityScan
public class JpaYashanApplication {
public static void main(String[] args) {
SpringApplication.run(JpaYashanApplication.class, args);
}
}
启动项目,控制台输出编译成功,数据库已创建表:
第 4 章:集成测试
使用接口调试工具测试插入方法以及查询方法
写入数据
调用接口插入数据:
查看数据库是否写入成功:
查询数据
查询数据结果:
至此集成教程完成,更多可能自行探索。
往期精彩文章
达梦数据库安装最详细教程
一招教你学会达梦数据库的免密登录
一文讲透达梦数据库的大小写敏感
效率翻倍!达梦数据库 disql 使用技巧全攻略
达梦数据库参数配置与一键优化指南
金仓数据库 KingbaseES V9 单机安装指南
KingbaseES KSQL 免密登录的几种方式
KingbaseES 控制文件冗余与恢复秘籍
南大通用 GBASE 8s V8.8 数据库最全安装指南
GBase 8s GDCA 认证课后练习题大全(题库)
GBase 8s 数据库巡检报告及一键巡检脚本
YashanDB 一键生成 AWR 报告
YashanDB 数据库安装部署
yashandb-personal-23.3.1.100: https://download.yashandb.com/download
[2]YashanDB Developer Center 23.3: https://download.yashandb.com/download