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.hqwc.cn/news/486438.html

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

相关文章

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)

文章目录 四、链表理论五、哈希表理论五、栈和队列理论5.1 单调栈 六、二叉树理论6.1 树的定义6.2 二叉树的存储方式6.3 二叉树的遍历方式6.4 高度和深度 最近博主学习了算法与数据结构的一些视频&#xff0c;在这个文章做一些笔记和心得&#xff0c;本篇文章就写了一些基础算法…

文章SCI/EI检索流程

前言&#xff1a; 想查询某篇文章是否被SCI/EI检索&#xff0c;以及其对应SCI/EI检索号可通过以下流程查询。 一、SCI检索 网址&#xff1a;https://webofscience-clarivate-cn-s.xidian.yitlink.com/wos/alldb/basic-search 搜索对应论文的题目&#xff0c;若有对应查询结果…

Vue | (四)使用Vue脚手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;初始化脚手架&#x1f407;创建初体验&#x1f407;分析脚手架结构&#x1f407;关于render&#x1f407;查看默认配置 &#x1f4da;ref与props&#x1f407;ref属性&#x1f407;props配置项 &#x1f4da;混入&#x1f4da;插件&#x1f4da;scoped样…

敏捷项目管理在现代软件开发中的应用

在现代软件开发领域&#xff0c;项目管理起着至关重要的作用。随着技术的不断进步和市场需求的快速变化&#xff0c;传统的项目管理方法已逐渐无法满足软件开发的需求。因此&#xff0c;敏捷项目管理应运而生&#xff0c;成为许多软件开发团队的首选方法。本文将探讨敏捷项目管…

图文说明Linux云服务器如何更改实例镜像

一、应用场景举例 在学习Linux的vim时&#xff0c;我们难免要对vim进行一些配置&#xff0c;这里我们提供一个vim插件的安装包&#xff1a; curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o./install.sh && bash ./install.sh 但是此安装包…

基于springboot+vue的智慧社区系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

SQL数据操作

目标:掌握mysql中数据的增删改查的基本操作 新增数据 查看数据 更新数据 删除数据 1、新增数据 目标:了解数据的新增指令和逻辑&#xff0c;实现数据的入库操作 概念 新增数据:将数据插入到数据表永久存储 新增数据是根据表的字段顺序和数据类型要求将数据存放到数据表中 …

ARM服务器部署Kafka集群

安装前必备的条件是: (1)安装jdk(提供环境); (2)安装zookeeper(注册kafka信息); 需要这方面信息的可以查看我之前写的文档; 一.下载安装包 Kafka官网下载地址 Apache Kafka 根据自己需要下载相应的版本 目前最新的版本是3.6.1。 二.解压安装包 服务器上传下载好的kafk…

python 随机生成身份证号的两种方法

这里介绍两种方法&#xff0c;第一种是用faker随机生成&#xff0c;这一种是最简单的&#xff0c;直接调用faker里面的函数就可以了&#xff0c;第二种是使用random随机数&#xff0c;来生成&#xff0c;这种就需要直接写了&#xff01; 第一种&#xff1a;faker def fak():f…

U盘故障频发?了解原因,掌握正确使用方法!

U盘文件夹变打不开的文件是一种常见的故障&#xff0c;表现为用户无法访问存储在U盘中的文件或文件夹。这种故障通常是由于各种原因引起的&#xff0c;包括物理损坏、文件系统错误、病毒感染等。当遇到这种情况时&#xff0c;用户需要采取一些方法来恢复文件。 U盘故障频发&…

Java中各种O(PO,BO,DTO,VO等) 是不是人为增加系统复杂度?

Java中各种O(PO,BO,DTO,VO等) 是不是人为增加系统复杂度&#xff1f; 在Java和其他编程语言的开发过程中&#xff0c;经常会用到几个以"O"结尾的缩写&#xff0c;比如PO,BO,DTO,VO等等&#xff0c;O在这里是Object的缩写&#xff0c;不同的O代表了不同的数据类型&am…

Linux中的各类时间 与 find命令的常用参数

之前研究wal日志清理的副产物&#xff0c;wal日志名被修改后文件的哪个时间会变&#xff1f;应该如何删除&#xff1f;由此整理一下Linux中atime、mtime、ctime的区别&#xff0c;以及find的常见用法。 一、 Linux中的各类时间 1. 各类时间的定义 Linux中有三种用于文件时间戳…