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://www.rhkb.cn/news/262328.html

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

相关文章

Redis(十六)缓存预热+缓存雪崩+缓存击穿+缓存穿透

文章目录 面试题缓存预热缓存雪崩解决方案 缓存穿透解决方案 缓存击穿解决方案案例&#xff1a;高并发聚划算业务 总结表格 面试题 缓存预热、雪崩、穿透、击穿分别是什么?你遇到过那几个情况?缓存预热你是怎么做的?如何避免或者减少缓存雪崩?穿透和击穿有什么区别?他两是…

基于docker安装HDFS

1.docker一键安装见 docker一键安装 2.拉取镜像 sudo docker pull kiwenlau/hadoop:1.03.下载启动脚本 git clone https://github.com/kiwenlau/hadoop-cluster-docker4.创建网桥 由于 Hadoop 的 master 节点需要与 slave 节点通信&#xff0c;需要在各个主机节点配置节点…

【ctfshow—web】——信息搜集篇1(web1~20详解)

ctfshow—web题解 web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20 web1 题目提示 开发注释未及时删除 那就找开发注释咯&#xff0c;可以用F12来查看&#xff0c;也可以CtrlU直接查看源代码呢 就拿到flag了 web2 题目提示 j…

常见消息中间件

ActiveMQ 我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件&#xff0c;都是使用的这个MQ&#xff0c;但是现在用的确实不多了&#xff0c;说白了就是有些过时了。我们去它的官网看一看&#xff0c;你会发现官网已经不活跃了&#xff0c;好久才会更新一次。 它的单机吞…

mysql优化指南之优化篇

二、优化 现在的理解数据库优化有四个维度&#xff0c;分别是&#xff1a; 硬件升级、系统配置、表结构设计、SQL语句及索引。 那优化的成本和效果分别如下&#xff1a; 优化成本&#xff1a;硬件升级>系统配置>表结构设计>SQL语句及索引。 优化效果&#xff1a;…

Java项目:27 基于SSM+JSP实现的大学校园兼职平台

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统介绍 基于SSMJSP实现的大学校园兼职平台分为前台与管理员两块 管理端分为8大模块&#xff0c;分别是用户管理、兼职管理、帖子管理、聊天管理、…

「递归算法」:求根节点到叶节点数字之和

一、题目 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数…

如何构建企业专属GPT

大语言模型&#xff08;LLM&#xff09;具有令人印象深刻的自然语言理解和生成能力&#xff0c; 2022年11月底OpenAI发布了ChatGPT&#xff0c;一跃成为人工智能AI领域的现象级应用。但由于LLM的训练数据集主要来源于互联网数据&#xff0c;企业私域信息并未被LLM所训练&#x…

家用电器全球扩张:如何借助海外网红营销实现助力品牌成长?

随着全球化的深入发展&#xff0c;家用电器市场已不再局限于国内市场&#xff0c;众多品牌纷纷将目光投向海外&#xff0c;寻求更广阔的发展空间。在这个过程中&#xff0c;如何有效地进行海外推广成为品牌面临的一大挑战。近年来&#xff0c;海外网红营销逐渐崭露头角&#xf…

【Spring】IoC容器 控制反转 与 DI依赖注入 配置类实现版本 第四期

文章目录 基于 配置类 方式管理 Bean一、 配置类和扫描注解二、Bean定义组件三、高级特性&#xff1a;Bean注解细节四、高级特性&#xff1a;Import扩展五、基于注解配置类方式整合三层架构组件总结 基于 配置类 方式管理 Bean Spring 完全注解配置&#xff08;Fully Annotatio…

AndroidStudio 2024-2-21 Win10/11最新安装配置(Kotlin快速构建配置,gradle镜像源)

AndroidStudio 2024 Win10/11最新安装配置 教程目的&#xff1a; (从安装到卸载) &#xff0c;针对Kotlin开发配置&#xff0c;gradle-8.2-src/bin下载慢&#xff0c;以及Kotlin构建慢的解决 好久没玩AS了,下载发现装个AS很麻烦,就觉得有必要出个教程了(就是记录一下:嘻嘻) 因…

MariaDB落幕和思考

听过MySQL的基本也都知道 MariaDB。MariaDB由MySQL的创始人主导开发&#xff0c;他早前曾以10亿美元的价格&#xff0c;将自己创建的公司MySQL AB卖给了SUN&#xff0c;此后&#xff0c;随着SUN被甲骨文收购&#xff0c;MySQL的所有权也落入Oracle的手中。传闻MySQL的创始人担心…

vue封装el-table表格组件

先上效果图&#xff1a; 本文包含了具名插槽、作用域插槽、jsx语法三种&#xff1a; Render.vue&#xff08;很重要&#xff0c;必须有&#xff09;: <script> export default {name: "FreeRender",functional: true,props: {scope:Object,render: Functio…

我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!

项目从jdk8升级到jdk17&#xff0c;我不是为了追求java 17的新特性&#xff08;准确来说也还没有去了解有什么新特性&#xff09;&#xff0c;也不是为了准确与时俱进&#xff0c;永远走在java行列的最前端&#xff0c;纯粹因为项目需要&#xff0c;因为我们都知道&#xff0c;…

【医学大模型 补全主诉】BioGPT + LSTM 自动补全医院紧急部门主诉

BioGPT LSTM 自动补全医院紧急部门主诉 问题&#xff1a;针对在紧急部门中自动补全主诉的问题子问题1: 提高主诉记录的准确性子问题2: 加快主诉记录的速度子问题3: 统一医疗术语的使用子问题4: 减少打字错误和误解子问题5: 提高非特定主诉的处理能力 解法数据预处理神经网络方…

微服务篇之限流

一、为什么要限流 1. 并发的确大&#xff08;突发流量&#xff09;。 2. 防止用户恶意刷接口。 二、限流的实现方式 1. Tomcat限流 可以设置最大连接数&#xff0c;但是每一个微服务都有一个tomcat&#xff0c;实现起来非常麻烦。 2. Nginx限流 &#xff08;1&#xff09;控…

十大基础排序算法

排序算法分类 排序&#xff1a;将一组对象按照某种逻辑顺序重新排列的过程。 按照待排序数据的规模分为&#xff1a; 内部排序&#xff1a;数据量不大&#xff0c;全部存在内存中&#xff1b;外部排序&#xff1a;数据量很大&#xff0c;无法一次性全部存在内存中&#xff0c;…

利用Ubuntu22.04启动U盘对电脑磁盘进行格式化

概要&#xff1a; 本篇演示利用Ubuntu22.04启动U盘的Try Ubuntu模式对电脑磁盘进行格式化 一、说明 1、电脑 笔者的电脑品牌是acer(宏碁/宏基) 开机按F2进入BIOS 开机按F12进入Boot Manager 2、Ubuntu22.04启动U盘 制作方法参考笔者的文章&#xff1a; Ubuntu制作Ubun…

每日学习总结20240222

每日总结 一旦停下来太久&#xff0c;就很难继续了 ——《一个人的朝圣》 20240222 1. 自定义逻辑 请设计一个函数single_track_logic,传入三个参数&#xff0c;第一个参数是int数组&#xff0c;第二个参数是一个int变量&#xff0c;第三个参数是一个以int为返回值&#xff0c…

dell r740服务器黄灯闪烁维修现场解决

1&#xff1a;首先看一下这款DELL非常主力的PowerEdge R740服务器长啥样&#xff0c;不得不说就外观来说自从IBM抛弃System X系列服务器后&#xff0c;也就戴尔这个外观看的比较顺眼。 图一&#xff1a;是DELL R740前视图&#xff08;这款是8盘机型&#xff09; 图二&#xff…