Java SpringBoot测试OceanBase

对上篇mysql导入到OceanBase中的数据库进行代码测试,写了个demo包含测试方法,在原mysql库中成功执行,迁移到OceanBase时看是否能不修改业务代码而成功执行测试方法:

  • 代码基于SpringBoot + MyBastis
  • 测试增删改查、批量新增、多表联查、事务

只修改pom依赖和连接配置

<!-- OceanBase驱动包 -->
<dependency><groupId>com.oceanbase</groupId><artifactId>oceanbase-client</artifactId><version>2.4.3</version>
</dependency>
# oceanbase连接信息
spring.datasource.driverClassName=com.oceanbase.jdbc.Driver
spring.datasource.url=jdbc:oceanbase://192.168.113.161:2883/employees?useSSL=false&useUnicode=true&characterEncoding=utf-8&useServerPrepStmts=true&rewriteBatchedStatements=true
spring.datasource.username=root@mq_t1#zycluster
spring.datasource.password=/aVi*H8(0%FS_YwZ-|dmo&[hjlT7pe@E

Java测试类代码

package com.zypcy.ob_demo;import com.alibaba.fastjson2.JSON;
import com.zypcy.ob_demo.dto.EmployeesSalariesDto;
import com.zypcy.ob_demo.entity.Employees;
import com.zypcy.ob_demo.service.EmployeesService;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;@SpringBootTest
class ObDemoApplicationTests {@AutowiredEmployeesService employeesService;@Testvoid contextLoads() {}public Employees initEmployees(int empNo) {Employees employees = new Employees();employees.setEmpNo(empNo);employees.setBirthDate(new Date());employees.setFirstName("zhu");employees.setLastName("yu");employees.setGender("M");employees.setHireDate(new Date());return employees;}@Testpublic void testEmployees() {//测试单条数据的插入、更新、删除、查询Employees employees = initEmployees(500000);//新增一条记录boolean flag = employeesService.insert(employees);Assertions.assertTrue(flag, "插入操作失败");//查询新增但记录Employees insertedEmployee = employeesService.selectByPrimaryKey(employees.getEmpNo());System.out.println("插入后的记录: " + JSON.toJSONString(insertedEmployee));//更新记录employees.setLastName("yu2");flag = employeesService.updateByPrimaryKey(employees);Assertions.assertTrue(flag, "更新操作失败");// 查询更新后的记录Employees employees2 = employeesService.selectByPrimaryKey(employees.getEmpNo());System.out.println("更新后的记录: " + JSON.toJSONString(employees2));flag = employeesService.deleteByPrimaryKey(employees.getEmpNo());Assertions.assertTrue(flag, "删除操作失败");}@Testpublic void testBatchInsert() {//测试批量插入,测试三次,看下耗时int length = 200;Long d1 = System.currentTimeMillis();List<Employees> employeesList = new ArrayList<>(length);for (int i = 1; i <= length; i++) {Employees model = new Employees();int empNo = 610000 + i;model.setEmpNo(empNo);model.setBirthDate(new Date());model.setFirstName("zhu" + empNo);model.setLastName("yu" + empNo);model.setGender("M");model.setHireDate(new Date());employeesList.add(model);}boolean flag = employeesService.batchInsert(employeesList);Assertions.assertTrue(flag);Long d2 = System.currentTimeMillis();System.out.println("批量插入耗时=" + (d2 - d1) + "ms");}@Testpublic void selectEmployeesSalariesByEmpNos() {//测试多表关联查询List<EmployeesSalariesDto> list = employeesService.selectEmployeesSalariesByEmpNos(Arrays.asList(10001, 10002, 10003));System.out.println("list.size=" + list.size());Assertions.assertTrue(list.size() > 0);}@Testpublic void testTransaction() {//测试事务,往3张表分别插入一条记录,在第三张表插入时主动抛出异常,查看前两张表的数据是否回滚Employees employees = initEmployees(650000);boolean flag = employeesService.testTransaction(employees);Assertions.assertTrue(flag);}}

以上代码先在mysql环境中全部执行一遍
然后连接OceanBase库,对每个(增、删、改、查、批量新增、多表关联查询、事务)方法进行测试,贴几张截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面这张图片时测试事物的,往3张表新增数据(插入一条编号为65000的员工),在第3张表新增前写一个错误来抛出异常,被@Transactional 捕获到而回滚,右边是数据库去查询编号=650000的员工是否存在,验证事务是否回滚了
在这里插入图片描述
经测试得出,在mysql中能执行的sql能照常在OceanBase中执行,只要修改OceanBase客户端和数据库连接字符串即可运行,无需修改业务sql代码

源码下载:https://download.csdn.net/download/zhuyu19911016520/88869926

用了Spring @Transactional(rollbackFor = Exception.class)声明式事务,需要依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId>
</dependency>

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8改进 | SPPF篇 | 利用YOLOv9最新的SPPELAN模块改进SPPF(全网独家创新,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的SPPELAN模块来改进SPPF&#xff0c;其中YOLOv9针对于这个模块并没有介绍&#xff0c;只是在其项目文件中用到了&#xff0c;我将其整理出来用于我们的YOLOv8的项目&#xff0c;同时空间金字…

【Java程序设计】【C00288】基于Springboot的篮球竞赛预约平台(有论文)

基于Springboot的篮球竞赛预约平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的篮球竞赛预约平台 本系统分为前台功能模块、管理员功能模块以及用户功能模块。 前台功能模块&#xff1a;用户进入到平台首页&a…

【java面试系列】服务的限流

目录 一、常用的限流算法1.固定窗口计数器(计数器算法)2 滑动窗口计数器算法3. 漏桶算法4 令牌桶算法(`常用`)Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法二、 分布式限流1、网关层(Nginx、Openresty、Spring Cloud Gateway等)流量限制nginx限流Spring Cl…

使用向量数据库pinecone构建应用01:相似语义检索 Semantic Search

Building Applications with Vector Databases 下面是DeepLearning.AI上面这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement…

(六)激光线扫描-三维重建

本篇文章是《激光线扫描-三维重建》系列的最后一篇。 1. 基础理论 1.1 光平面 在之前光平面标定的文章中,已经提到过了,是指 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面。 三维空间中平面的公式是: A X + B Y + C Z + D = 0 A X+B Y+C Z+D=0

jetson nano——安装archiconda

目录 1.archiconda3我在这提供了下载链接&#xff0c;点解下面链接即可1.看好文件所在位置&#xff0c;如果装错了&#xff0c;那么环境变量的路径自己进行相应的修改。2.添加环境变量 2.可能部分伙伴输入一些激活&#xff0c;啥的命令激活不了&#xff0c;那么输入下面这些代码…

Threejs 实现3D影像地图,Json地图,地图下钻

1.使用threejs实现3D影像地图效果&#xff0c;整体效果看起来还可以&#xff0c;底层抽象了基类&#xff0c;实现了通用&#xff0c;对任意省份&#xff0c;城市都可以只替换数据&#xff0c;即可轻松实现效果。 效果如下&#xff1a; 链接https://www.bilibili.com/video/BV1…

【前端素材】推荐优质后台管理系统Sneat平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

spark 少量key倾斜的join优化

背景 在使用spark join时&#xff0c;我们经常遇到少量key拥有大量的数据而导致的数据倾斜的问题&#xff0c;这导致了task任务数据处理非常不均匀而影响最终时效 少量key数据倾斜的join优化 这里有一个前提&#xff0c;join的另一边的表没有数据倾斜问题&#xff0c;也就是…

Python reversed函数

在Python编程中&#xff0c;reversed()函数是一个内置函数&#xff0c;用于反转序列对象的元素顺序。这个函数可以应用于列表、元组、字符串等可迭代对象&#xff0c;并返回一个反向迭代器&#xff0c;可以按照相反的顺序遍历序列中的元素。本文将深入探讨Python中的reversed()…

华清远见嵌入式学习——驱动开发——day9

目录 作业要求&#xff1a; 作业答案&#xff1a; 代码效果&#xff1a; ​编辑 Platform总线驱动代码&#xff1a; 应用程序代码&#xff1a; 设备树配置&#xff1a; 作业要求&#xff1a; 通过platform总线驱动框架编写LED灯的驱动&#xff0c;编写应用程序测试&…

ArcgisForJS如何在线编辑ArcGIS Server发布的几何要素?

文章目录 0.引言1.ArcGIS创建几何要素2.ArcGIS Server发布几何要素3.ArcgisForJS在线编辑ArcGIS Server发布的几何要素 0.引言 ArcGIS For JS 是一种用于创建和编辑地理信息的 JavaScript 库&#xff0c;它允许用户在线编辑 ArcGIS Server 发布的几何要素。本文从ArcGIS创建几…

linux drm mipi dsi lcd 点屏之设备树配置

linux drm mipi dsi lcd 点屏之设备树配置 设备树文档&#xff1a; https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/dsi-controller.yaml https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/binding…

C# OpenCvSharp 利用白平衡技术进行图像修复

目录 效果 灰度世界(GrayworldWB)-白平衡算法 完美反射(SimpleWB)-白平衡算法 基于学习的(LearningBasedWB)-白平衡算法 代码 下载 C# OpenCvSharp 利用白平衡技术进行图像修复 OpenCV xphoto模块中提供了三种不同的白平衡算法&#xff0c;分别是&#xff1a;灰度世界(G…

了解人工智能的13个细分领域

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;作为当今最热门和前沿的技术之一&#xff0c;已经在各种领域发挥着越来越重要的作用。随着人工智能技术的不断进步和应用&#xff0c;AI的细分领域也越来越多。目前&#xff0c;根据AI的应用领域和特…

Java向ES库中插入数据报错:I/O reactor status: STOPPED

Java向ES库中插入数据报错&#xff1a;java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STO 一、问题问题原因 二、解决思路 一、问题 在使用Java向ES库中插入数据时&#xff0c;第一次成功插入&#xff0c;第二次出现以下错误&#xff1a…

K8S—Pod详解

目录 一 Pod基础概念 1.1 Pod是什么 1.2 为什么要使用Pod&#xff1f;Pod在K8S集群中的使用方式&#xff1f; 1.3 基础容器pause 二 Pod的分类 2.1 自主式Pod和控制器管理的Pod 2.2 容器的分类 2.2.1 基础容器&#xff08;infrastructure container&#xff09; 2.2.2…

Linux解决cupy安装失败问题

1、遇到的问题&#xff1a; Failed to build cupy ERROR: Could not build wheels for cupy, which is required to install pyproject.toml-based projects 安装cupy的过程中一直报错&#xff0c;尝试了pip和conda的方法都没有解决。在百度查看了各种教程也没有很好的方法&…

正交匹配追踪(Orthogonal Matching Pursuit, OMP)的MATLAB实现

压缩感知&#xff08;Compressed Sensing, CS&#xff09;是一种利用稀疏信号的先验知识&#xff0c;用远少于奈奎斯特采样定理要求的样本数目恢复整个信号的技术。正交匹配追踪&#xff08;Orthogonal Matching Pursuit, OMP&#xff09;是一种常见的贪婪算法&#xff08;Gree…

自动化行业文件数据\资料防泄密软件——天锐绿盾|@德人合科技

天锐绿盾是一款自动化行业文件数据防泄密软件&#xff0c;由德人合科技提供。该软件采用动态加解密技术&#xff0c;能够有效防止公司内部数据泄密&#xff0c;同时支持各种文件格式加密&#xff0c;如CAD、OFFICE、PDF、图纸等。 PC端&#xff1a;https://isite.baidu.com/sit…