Spring Boot对接Oracle数据库

Spring Boot对接Oracle数据库

最近学习了Oracle数据库,那么如何使用Spring Boot和MyBatis Plus对接Oracle数据库呢?
这就有了这篇随记,具体流程如下

1、创建Maven工程

创建一个空的Maven工程,导入如下依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.7.RELEASE</version><relativePath/></parent><groupId>org.example</groupId><artifactId>oracle-init</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.3.7.RELEASE</version></dependency><!--    Oracel11g与ojdbc5/ojdbc6版本匹配    --><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version><scope>provided</scope></dependency><!--        <dependency>-->
<!--            <groupId>com.oracle.database.jdbc</groupId>-->
<!--            <artifactId>ojdbc8</artifactId>-->
<!--            <version>19.8.0.0</version>-->
<!--        </dependency>--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies>
</project>

tips:这里碰到一个坑,我本机适用的Oracle数据库版本是11g XE,所以要使用的驱动为ojdbc5/ojdbc6,不然连接老会失败。

2、application.yml

在配置文件中填写数据库连接的参数

spring:datasource:username: pppassword: 123456url: jdbc:oracle:thin:@localhost:1521:XEdriver-class-name: oracle.jdbc.OracleDriver

参数说明:

  • username:数据库连接用户名
  • password:数据库连接密码
  • url:连接地址
  • driver-class-name:数据库驱动

3、创建实例数据表

为了演示本次对接Oracle数据库,我们需要一张测试数据表

3.1创建Users数据表,SQL如下:

CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

什么?没有测试数据!!!Orz…
这里可以使用Oracle数据库的PL/SQL编程来批量生成测试数据,真香!!

3.2PL/SQL批量生产测试数据

sql如下:

DECLARETYPE user_type IS RECORD (id NUMBER,username VARCHAR2(50),email VARCHAR2(100),password VARCHAR2(100),created_at DATE);TYPE user_list IS TABLE OF user_type;l_users user_list := user_list();
BEGINFOR i IN 1..100 LOOPl_users.extend;l_users(i).id := i;l_users(i).username := 'user' || i;l_users(i).email := 'user' || i || '@example.com';l_users(i).password := 'password' || i;l_users(i).created_at := SYSDATE; -- 使用当前时间作为创建时间END LOOP;FORALL i IN 1..l_users.COUNTINSERT INTO users (id, username, email, password, created_at)VALUES (l_users(i).id, l_users(i).username, l_users(i).email, l_users(i).password, l_users(i).created_at);COMMIT;DBMS_OUTPUT.PUT_LINE('Data inserted successfully.');
EXCEPTIONWHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);ROLLBACK;
END;

执行之后查看数据表中的数据:
pPn8w01png
OK!准备工作完成,接下来就可以进行对接了。

4、使用MP对Oracle进行CRUD

4.1创建实体类

User:

/*** TODO User实体类* @version 1.0* @author ss_419* @date 2023/8/11 14:49*/
@Data
@AllArgsConstructor
@NoArgsConstructor
// 指定Oracle数据库中的表名
@TableName("users")
public class User {private Long id;private String username;private String password;private String email;private Date created_at;
}

4.2、创建Mapper

/*** @author ss_419*/
@Mapper
public interface UserRepository extends BaseMapper<User> {// 这里可以自定义一些数据库操作方法
}

4.3、创建Service

/*** @author ss_419*/
@Service
public class UserServiceextends ServiceImpl<UserRepository, User> {// 这里可以编写一些业务逻辑方法private final UserRepository userRepository;@Autowiredpublic UserService(UserRepository userRepository) {this.userRepository = userRepository;}public List<User> getAllUsers() {List<User> users = userRepository.selectList(null);return users;}public User getUserById(Long id) {return userRepository.selectById(id);}public void saveUser(User user) {userRepository.insert(user);}public void updateUser(User user) {userRepository.updateById(user);}public void deleteUser(Long id) {userRepository.deleteById(id);}
}

4.4、创建启动器

@SpringBootApplication
// Mapper包扫描
@MapperScan("org.example.mapper")
public class OracleDBApplication {public static void main(String[] args) {SpringApplication.run(OracleDBApplication.class,args);}
}

5、测试

万事俱备,只欠东风,对CRUD进行测试。

@SpringBootTest
public class OraCTest {@Autowiredprivate UserService service;/*** 获取所有用户信息*/@Testpublic void testGetAllUsers() {List<User> users = service.getAllUsers();users.forEach(System.out::println);}/*** 根据id获取用户*/@Testpublic void testGetUserById() {User userById = service.getUserById(1L);System.out.println("userById = " + userById);}/*** 保存用户*/@Testpublic void testSaveUser() {User user = new User();user.setId(1000L);user.setUsername("测试新增User");user.setPassword("00101010");user.setEmail("test@example.com");user.setCreated_at(new Date());service.saveUser(user);}/*** 更新用户*/@Testpublic void testUpdateUser() {// 先查询User user = service.getUserById(1000L);System.out.println("userById = " + user);// 后更新user.setUsername("update_username");service.updateUser(user);}/*** 根据id删除用户*/@Testpublic void testDeleteUser() {service.deleteUser(1000L);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/85186.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析实战-列表字符串、字符串列表、字符串的转化(附源码和实现效果)

实现功能 str([None,master,hh]) ---> [None,"master","hh"] ---> "None,master,hh" 实现代码 import re import astx1 str([None,master,hh]) print(x1)x2 ast.literal_eval(x1) print(x2)x3 ",".join(str(item) for item…

微服务与Nacos概述-3

流量治理 在微服务架构中将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络原因或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会出现网络延迟&#xff0c;此时…

Gopeed-全平台开源高速下载器 支持(HTTP、BitTorrent、Magnet)协议

一、软件介绍 Gopeed&#xff08;全称 Go Speed&#xff09;&#xff0c;是一款由GolangFlutter开发的高速下载器&#xff0c;开源、轻量、原生&#xff0c;支持&#xff08;HTTP、BitTorrent、Magnet 等&#xff09;协议下载&#xff0c;并且支持全平台使用&#xff0c;底层使…

Java【算法 04】HTTP的认证方式之DIGEST认证详细流程说明及举例

HTTP的认证方式之DIGEST 1.是什么2.认值流程2.1 客户端发送请求2.2 服务器返回质询信息2.2.1 质询参数2.2.2 质询举例 2.3 客户端生成响应2.4 服务器验证响应2.5 服务器返回响应 3.算法3.1 SHA-2563.1.1 Response3.1.2 A13.1.3 A2 3.2 MD53.2.1 Request-Digest3.2.2 A13.2.3 A2…

Exams/ece241 2013 q4

蓄水池问题 S3 S2 S1 例如&#xff1a;000 代表 无水 &#xff0c;需要使FR3, FR2, FR1 都打开&#xff08;111&#xff09; S3 S2 S1 FR3 FR2 FR1 000 111 001 011 011 001 111 000 fr代表水变深为…

23款奔驰C260升级原厂香氛负离子系统,清香宜人,久闻不腻

奔驰原厂香氛合理性可通过车内空气调节组件营造芳香四溢的怡人氛围。通过更换手套箱内香氛喷雾发生器所用的香水瓶&#xff0c;可轻松选择其他香氛。香氛的浓度和持续时间可调。淡雅的香氛缓缓喷出&#xff0c;并且在关闭后能够立刻散去。车内气味不会永久改变&#xff0c;香氛…

@Autowired和@Resource注解超详细总结(附代码)

区别 1、来源不同 Autowired 和 Resource 注解来自不同的“父类”&#xff0c;其中Autowired注解是 Spring 定义的注解&#xff0c;而Resource 注解是 Java 定义的注解&#xff0c;它来自于 JSR-250&#xff08;Java 250 规范提案&#xff09;。 2、支持的参数不同 Autowir…

RestTemplate 请求转发异常 ERR_CONTENT_DECODING_FAILED 200 (OK)

#1 问题描述 在基于Spring Boot的项目中实现了请求转发&#xff08;使用 RestTemplate 的 exchange 方法&#xff09;的功能&#xff0c;忽然在前端报net::ERR_CONTENT_DECODING_FAILED 200 (OK)的错误&#xff0c;后端及上游系统日志均显示请求已完成。 #2 原因探寻 上述错…

【ChatGPT 指令大全】怎么使用ChatGPT来辅助学习英语

在当今全球化的社会中&#xff0c;英语已成为一门世界性的语言&#xff0c;掌握良好的英语技能对个人和职业发展至关重要。而借助人工智能的力量&#xff0c;ChatGPT为学习者提供了一个有价值的工具&#xff0c;可以在学习过程中提供即时的帮助和反馈。在本文中&#xff0c;我们…

多用户一体化建设跨境电商小程序、app开发

跨境电商是指通过互联网技术&#xff0c;进行国际贸易的电子商务活动。随着跨境电商的快速发展&#xff0c;许多企业开始关注开发跨境电商小程序和app&#xff0c;以扩大其国际业务。下面是多用户一体化建设跨境电商小程序和app的开发步骤。 第一步&#xff1a;需求分析和规划…

mysql的高可用架构之mmm

目录 一、mmm的相关知识 1&#xff09;mmm架构的概念 2&#xff09;MMM 高可用架构的重要组件 3&#xff09;mmm故障切换流程 二、mmm高可用双主双从架构部署 实验设计 实验需求 实验组件部署 具体实验步骤 步骤一&#xff1a; 搭建 MySQL 多主多从模式 &#…

FPGA应用学习笔记----定点除法的实现

除以2可以这样移位 迭代除法&#xff0c;就是直接除 迭代除法&#xff0c;就是直接除 除数左移&#xff0c;被除数减去除数&#xff0c;余数大于0则商数置1然后左移&#xff0c;余数作为被减数左移&#xff0c;再减除数&#xff0c;再看余数是否大于0&#xff0c;若大于0&…

第十六章、【Linux】程序管理与SELinux初探

16.1 什么是程序 &#xff08;process&#xff09; 在Linux 系统当中&#xff1a;“触发任何一个事件时&#xff0c;系统都会将他定义成为一个程序&#xff0c;并且给予这个程序一个 ID &#xff0c;称为 PID&#xff0c;同时依据启发这个程序的使用者与相关属性关系&#xff…

【网络】传输层——UDP | TCP(协议格式确认应答超时重传连接管理)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 现在是传输层&#xff0c;在应用层中的报文(报头 有效载荷)就不能被叫做报文了&#xff0c;而是叫做数…

PDF Expert 3.3 for mac

PDF Expert是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 以下是PDF Expert的特点&#xff1a; PDF编辑&#xff1a;PDF Expert提供了丰富的PDF编辑功能&#xff0c;包括添加、删除、移动、旋转、缩放、裁…

链表有无环以及确定入环口详解

142.环形链表 II 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测…

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1&#xff09;redis事务&#xff0c;事务的三大命令语法&#xff1a;开启事务 multi语法&#xff1a;执行事务 exec语法&#xff1a;取消事务 discard 1.2&#xff09;redis事务的错误和回滚的情况1.3&#xff09;watch机制语法&…

Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

目录 一、依赖包情况 二、项目目录结构 2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本…

Vue [Day7] 综合案例

核心概念回顾 state&#xff1a;提供数据 getters&#xff1a;提供与state相关的计算属性 mutations&#xff1a;提供方法&#xff0c;用于修改state actions&#xff1a;存放异步操作 modules&#xff1a;存模块 功能分析 https://www.npmjs.com/package/json-server#ge…

3.UE基本操作及数字人工程模块组成(UE数字人系统教程)

1.Fay-UE5数字人工程导入 2.UE数字人语音交互 3.UE基本操作及数字人工程模块组成&#xff08;UE数字人系统教程&#xff09; 一、ue5基本操作 1、项目文件管理 2、关卡素材编辑 在关卡上&#xff1a;w、s、a、d移动&#xff0c;鼠标右键拖动换视角。 二、数字人工程模…