当前位置: 首页 > news >正文

spring boot整合JPA兼容MySQL8和达梦数据库8

前言

Spring Boot是一个基于Spring框架的快速开发框架,它可以简化Spring应用的配置和部署过程。JPA(Java Persistence API)是Java持久化规范的一种实现,它提供了一种统一的方式来访问和管理数据库。MySQL和达梦数据库都是常用的关系型数据库,在Spring Boot中兼容这两种数据库可以让我们根据实际需求选择合适的数据库进行开发。

一、添加依赖

在pom.xml文件中添加Spring Boot和JPA的依赖项。同时,根据需要添加MySQL和达梦数据库的驱动依赖。

        <!-- DB 相关 --><!-- mysql数据库连接 --><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId></dependency><dependency><groupId>com.dameng</groupId><artifactId>DmDialect-for-hibernate5.3</artifactId></dependency><dependency><!--注意:只有这个版本的hibernate兼容达梦数据库 --><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- JPA 相关依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId><exclusions><exclusion><artifactId>hibernate-core</artifactId><groupId>org.hibernate</groupId></exclusion></exclusions></dependency>

二、配置数据库连接

在application.properties或application.yml文件中配置数据库连接信息,包括URL、用户名和密码等。
根据active随意切换MySQL和达梦数据库。

1.application.yaml

server:port: 8678shutdown: gracefulspring:profiles:active: mysql
#    active: dm

2.application-dm.yaml

spring:datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://127.0.0.1:5236/P_API?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8username: p_apipassword: p_apiopen-in-view: falseproperties:hibernate:dialect: org.hibernate.dialect.DmDialectdbcp2:test-on-borrow: truevalidation-query: SELECT 1jpa:#    database: mysqldatabase-platform: org.hibernate.dialect.DmDialectproperties:hibernate:#模式名称default_schema: PROCESSON_APIdialect: org.hibernate.dialect.DmDialect#        hbm2ddl:#          #和上面spring.jpa.hibernate.ddl-auto类似#          auto: update#        #和上面spring.jpa.show-sql类似#        show_sql: truetemp:use_jdbc_metadata_defaults: false

3.application-mysql.yaml

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.10.136:3306/p_api?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=trueusername: rootpassword: 123456jpa:database: mysqldatabase-platform: org.hibernate.dialect.MySQL8Dialectproperties:hibernate:#模式名称default_schema: p_apidialect: org.hibernate.dialect.MySQL8Dialect#        hbm2ddl:#          #和上面spring.jpa.hibernate.ddl-auto类似#          auto: update#        #和上面spring.jpa.show-sql类似#        show_sql: truetemp:use_jdbc_metadata_defaults: false

三、创建实体类

使用JPA的注解在Java类中定义实体类,定义表名和字段的映射关系。

@Entity
@Table(name = "sys_user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "user_name", length = 64)private String userName;@Column(length = 64)private String account;@Column(length = 64)private String mobile;@Column(length = 64)private String email;@Column(length = 16)private String role;@Column(length = 128)private String salt;@Column(length = 128)private String passwordMd5;}

四、创建Repository接口

创建一个继承自JpaRepository的接口,用于定义数据库操作方法。

@Repository
public interface UserRepository extends JpaRepository<User, Long> {Optional<User> findByAccount(String account);
}

五、编写业务逻辑

在Service中编写业务逻辑,并调用Repository接口中定义的方法进行数据库操作。

@Service
@Slf4j
public class LoginServiceImpl implements LoginService {@Resourceprivate UserRepository userRepository;@Transactional(rollbackFor = Exception.class)@Overridepublic R login(HttpServletResponse response, String account, String password) {Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken(account, password);try{subject.login(token);} catch (UnknownAccountException uae){return R.error(GlobalErrorCodeConstants.ERROR_CODE_ACCOUNT_NOT_EXIST);} catch (AuthenticationException ae){return R.error(GlobalErrorCodeConstants.ERROR_CODE_PASSWORD_INCORRECT);}if (subject.isAuthenticated()){long timeout = subject.getSession().getTimeout();log.info("Login success {}", timeout);} else{token.clear();return R.error(GlobalErrorCodeConstants.ERROR_CODE_PASSWORD_INCORRECT);}Object sessionId = subject.getSession().getId();
//        response.setHeader("authToken", sessionId.toString());Map<Object, Object> map = Maps.newConcurrentMap();map.put("authToken", sessionId.toString());return R.success(map);}
}

总结

通过以上步骤,我们可以实现在Spring Boot中同时兼容MySQL和达梦数据库的JPA开发。在运行应用时,可以根据配置文件中的数据库连接信息自动连接到对应的数据库。同时,使用JPA可以提供一种统一的方式来进行数据库操作,无论是MySQL还是达梦数据库,都可以使用相同的代码进行访问和管理。这样可以提高开发效率并减少代码量。

相关文章:

spring boot整合JPA兼容MySQL8和达梦数据库8

前言 Spring Boot是一个基于Spring框架的快速开发框架&#xff0c;它可以简化Spring应用的配置和部署过程。JPA&#xff08;Java Persistence API&#xff09;是Java持久化规范的一种实现&#xff0c;它提供了一种统一的方式来访问和管理数据库。MySQL和达梦数据库都是常用的关…...

规划决策算法(四)---Frenet坐标系

知乎&#xff1a;坐标系转换 1.Frenet 坐标系 什么是 Frenet 坐标系&#xff1a; 为什么使用 Frenet 坐标系&#xff1a; 通常情况&#xff0c;我们只会关注车辆当前距离左右车道线的距离&#xff0c;来判断是否偏离车道&#xff0c;是否需要打方向盘进行方向微调。而不是基于…...

大数据处理:大数据处理框架Hadoop、Spark

大数据处理是当代信息技术领域的一个重要分支&#xff0c;它涉及到海量数据的存储、管理和分析。为了高效地应对大数据处理的挑战&#xff0c;多种框架被开发出来&#xff0c;其中Hadoop和Spark是最为知名和广泛应用的两种。以下将详细介绍这两种框架以及它们在大数据处理中的应…...

网传的高频流量费会影响到个人用户的算法和策略T0吗?

先解答这个问题&#xff1a;高频的流量费这个确实是会影响你自己算法的交易的&#xff01;但是&#xff0c;强调一个但是&#xff1a;有的券商是没有流量费的&#xff01;小编今天就来带大家了解一下&#xff01;第一&#xff1a;算法交易的应用场景&#xff01; 算法交易的主…...

阿里云服务器 Ubuntu18.04 安装 mysql8.0并允许外部连接

参考教程&#xff1a; 官网教程 参考教程一 首先彻底删除mysql5.7 dpkg --list|grep mysql #查看 sudo apt-get remove mysql-common #卸载 sudo apt-get autoremove --purge mysql-server-5.7 #版本自己修改 dpkg -l|grep ^rc|awk {print$2}|sudo xargs dpkg -P #清除残留数…...

(Arxiv-2023)MobileDiffusion:移动设备上即时文本到图像生成

MobileDiffusion&#xff1a;移动设备上即时文本到图像生成 Paper Title&#xff1a;MobileDiffusion: Instant Text-to-Image Generation on Mobile Devices Paper是谷歌出品 Paper地址 图 1&#xff1a;MobileDiffusion 用于 (a) 文本到图像的生成。(b) Canny 边缘到图像、风…...

【七】Hadoop3.3.4基于ubuntu24的分布式集群安装

文章目录 1. 下载和准备工作1.1 安装包下载1.2 前提条件 2. 安装过程STEP 1: 解压并配置Hadoop选择环境变量添加位置的原则检查环境变量是否生效 STEP 2: 配置Hadoop2.1. 修改core-site.xml2.2. 修改hdfs-site.xml2.3. 修改mapred-site.xml2.4. 修改yarn-site.xml2.5. 修改hado…...

【Rust光年纪】深入了解Rust语言的关键库:功能特点与使用场景分析

探索Rust语言下的重要库&#xff1a;硬件接口控制和数据库操作全解析 前言 随着Rust语言在嵌入式开发和数据库操作领域的不断发展&#xff0c;越来越多的优秀库和工具涌现出来。本文将介绍一些用于Rust语言的重要库&#xff0c;包括硬件接口库、嵌入式硬件抽象层、ORM和查询构…...

矩估计与最大似然估计的通俗理解

点估计与区间估计 矩估计与最大似然估计都属于点估计&#xff0c;也就是估计出来的结果是一个具体的值。对比区间估计&#xff0c;通过样本得出的估计值是一个范围区间。例如估计馒头店每天卖出的馒头个数&#xff0c;点估计就是最终直接估计每天卖出10个&#xff0c;而区间估…...

性能调优本质:如何精准定位瓶颈并实现系统极致优化

目录 先入为主的反例 性能调优的本质 性能调优实操案例 性能调优相关文章 先入为主的反例 在典型的 ETL 场景中,我们经常需要对数据进行各式各样的转换,有的时候,因为业务需求太复杂,我们往往还需要自定义 UDF(User Defined Functions)来实现特定的转换逻辑。 但是…...

Git的命令

git add . 添加到暂存区 git commit -m 备注 提交 git branch 查看所有分支 git branch -d 分支名 删除分支 git push origin --delete 分支名 远程分支删除 git branch -a 查看删除后的分支 git clone 地址 例如https://gitee.com/whale456/demo.git git push origin m…...

WPF中使用定时器更新元素-DispatcherTimer

在WPF中使用定时器来更新UI元素是一种常见且有用的做法&#xff0c;特别是当你需要基于时间间隔来刷新数据或执行某些操作时。DispatcherTimer是WPF中用于在UI线程上执行周期性任务的理想选择&#xff0c;因为它确保了对UI元素的更新是线程安全的 例子程序 每隔0.5s 界面中的…...

计算机网络 - 理解HTTP与HTTPS协议的关键区别与安全性

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 在今天的互联网…...

【Spring Framework】使用XML配置文件配置Bean的实例化方式

在 Spring Framework 中&#xff0c;实例化 bean 的方式非常灵活&#xff0c;允许开发人员根据需求选择不同的方法。以下是几种常见的实例化 bean 的方式及其示例&#xff1a; 1. 通过无参构造函数实例化 这是最常见的方式&#xff0c;Spring 会使用 bean 的默认无参构造函数…...

模拟电子技术-实验四 二极管电路仿真

实验四 二极管电路仿真 一&#xff0e;实验类型 验证性实验 二&#xff0e;实验目的 1、验证二极管的单向导电性 2、验证二极管的稳压特性。 三&#xff0e;实验原理 二极管的单向导电性&#xff1a; 四、实验内容 1、二极管参数测试仿真实验 1&#xff09;仪表仿真…...

Git 子仓(Git Submodule)学习

Git 子仓学习 Git 子仓&#xff08;Submodule&#xff09;是 Git 提供的一种功能&#xff0c;用于在一个 Git 仓库&#xff08;称为主仓库或 superproject&#xff09;中嵌入另一个 Git 仓库&#xff08;称为子仓或 submodule&#xff09;。这种功能在管理大型项目或依赖关系较…...

JavaSE基础 (认识String类)

一&#xff0c;什么是String类 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提 供的字符串系列函数完成大部分操作&#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&…...

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行&#xff0c;不会像其它语言一样先编译&#xff0c;所以函数必 须在调…...

Java学习Day19:基础篇9

包 final 权限修饰符 空着不写是default&#xff01; 代码块 1.静态代码块 1.静态代码块优于空参构造方法 2.静态调用只被加载一次&#xff1b; 静态代码块在Java中是一个重要的特性&#xff0c;它主要用于类的初始化操作&#xff0c;并且随着类的加载而执行&#xff0c;且只…...

如何撤销git add ,git commit 的提交记录

一、撤销git commit ,但是没有push到远程的记录 git reset --hard HEAD~1 销最近的一次提交&#xff0c;并且丢弃所有未提交的更改 二、撤销git add ,但是没有提交到本地仓库的记录 git reset 三、原理 Git 工作流程的简要说明&#xff1a; 工作目录&#xff08;Working …...

Postman环境变量的高级应用:复杂条件逻辑的实现

Postman环境变量的高级应用&#xff1a;复杂条件逻辑的实现 在Postman中&#xff0c;环境变量是管理和定制API请求的强大工具。通过使用环境变量&#xff0c;可以轻松地在不同环境之间切换&#xff0c;如开发、测试和生产环境。然而&#xff0c;环境变量的真正威力在于它们能够…...

AI问答-供应链管理:理解医疗耗材供应链SPD板块

医疗耗材供应链SPD板块是一个专注于医用耗材供应链管理的关键领域&#xff0c;它融合了供应链管理理论、物流信息技术以及环节专业化管理手段&#xff0c;旨在保证院内医用耗材的质量安全、满足临床需求&#xff0c;并提升医院的整体运营效率。以下是对医疗耗材供应链SPD板块的…...

科普文:分布式数据一致性协议Paxos

1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公 开&…...

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…...

知乎信息流广告怎么投?一文读懂知乎广告开户及投放!

作为中国领先的问答社区&#xff0c;知乎以其高质量的内容和活跃的用户群体成为了众多品牌青睐的营销阵地。为了帮助企业更高效地利用知乎平台进行品牌推广&#xff0c;云衔科技提供了全方位的知乎广告开户及代运营服务&#xff0c;助力您的品牌在知乎上实现快速增长。 一、知…...

TikTok达人合作:AI与大数据如何提升跨境电商营销效果

在当今数字时代&#xff0c;跨境电商与TikTok达人的合作已成为推动品牌增长和市场拓展的重要力量。随着AI、大数据等先进技术的不断发展和应用&#xff0c;这种合作模式正变得更加高效和精准。本文Nox聚星将和大家探讨在TikTok达人合作中&#xff0c;AI、大数据等技术的具体运用…...

win11管理员账户为啥不能改?win11怎么更改管理员账户名称?

文章目录 亲测有效&#xff01;&#xff01;&#xff01;&#xff01;...

Spring Security学习笔记(三)Spring Security+JWT认证授权流程代码实例

前言&#xff1a;本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上两篇文章介绍了Spring Security的整体架构以及认证和鉴权模块原理。本篇文章就是基于Spring Security和JWT的一个demo 一、JWT简介 JWT&#xff08;JSON Web Token&#xff09;&#xff0c…...

精装房、旧房改造智能家居,单火线也有“救”了单火模块 零线发生器

精装房、旧房改造智能家居&#xff0c;单火线也有“救”了单火模块 零线发生器 史新华 以前写过关于智能家居没有预留零线&#xff0c;导致无法安装零火开关&#xff0c;也没办法装触控屏&#xff0c;主要原因还是无法通过零火线给设备供电。今年最火的一款思万奇零线发生器救…...

使用URLSearchParams获取url地址后面的参数(window.location.href)

function getUrlParams(url) {const urlStr url.split(?)[1];const urlSearchParams new URLSearchParams(urlStr);return Object.fromEntries(urlSearchParams.entries()); }const info getUrlParams(window.location.href); // info是一个对象&#xff0c;包含url携带参数…...