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

MyBatis-Plus 和达梦数据库实现高效数据持久化

 

一、添加依赖

首先,我们需要在项目的 pom.xml 文件中添加 MyBatis-Plus 和达梦数据库的依赖:

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--  添加dm8 jdbc jar 包依赖--><dependency><groupId>com.dm</groupId><artifactId>DmJdbcDriver</artifactId><version>1.8.0</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>

二、配置数据源

在 Spring Boot 的配置文件 application.propertiesapplication.yml 中配置达梦数据库的连接信息:

spring:datasource:url: jdbc:dm://localhost:5236username: 账号password: 密码driver-class-name: dm.jdbc.driver.DmDriver

 之后可以使用MyBatisX生成以下代码

三、创建实体类和 Mapper 接口

创建与数据库表对应的实体类,并使用 MyBatis-Plus 注解标注主键和表名等信息:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @TableName student*/
@TableName(value = "lps.student")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Serializable {/*** */@TableIdprivate String id;/*** */private String name;/*** */private Integer age;}

接着,创建继承自 BaseMapper 的 Mapper 接口:

import com.lps.domain.Student;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;/**
* @author 19449
* @description 针对表【student】的数据库操作Mapper
* @createDate 2023-08-01 16:10:31
* @Entity com.lps.domain.Student
*/
@Mapper
public interface StudentMapper extends BaseMapper<Student> {}

完成mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lps.mapper.StudentMapper"><resultMap id="BaseResultMap" type="com.lps.domain.Student"><id property="id" column="id" jdbcType="VARCHAR"/><result property="name" column="name" jdbcType="VARCHAR"/><result property="age" column="age" jdbcType="OTHER"/></resultMap><sql id="Base_Column_List">id,name,age</sql>
</mapper>

四、创建 Service 层

创建 Service 接口和实现类,继承自 IServiceServiceImpl

import com.lps.domain.Student;
import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** @author 19449* @description 针对表【student】的数据库操作Service* @createDate 2023-08-01 16:10:31*/
public interface StudentService extends IService<Student> {List<Student> selectAll();void insert(Student student);void deleteBatch(List<Student> studentList);void deleteAll();}

service实现类

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lps.domain.Student;
import com.lps.service.StudentService;
import com.lps.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.stream.Collectors;/*** @author 19449* @description 针对表【student】的数据库操作Service实现* @createDate 2023-08-01 16:10:31*/
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student>implements StudentService {@Autowiredprivate StudentMapper studentMapper;@Overridepublic List<Student> selectAll() {return studentMapper.selectList(null);}@Overridepublic void insert(Student student) {studentMapper.insert(student);}@Overridepublic void deleteBatch(List<Student> studentList) {studentMapper.deleteBatchIds(studentList.stream().map(students -> students.getId()).collect(Collectors.toList()));}@Overridepublic void deleteAll() {studentMapper.delete(null);}}

五、进行 CRUD 操作

现在就可以在业务逻辑中使用 YourService 进行增删改查操作了:

package com.lps;import com.lps.domain.Student;
import com.lps.service.StudentService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.List;@SpringBootTest
class SpringBootDm7ApplicationTests {@AutowiredStudentService studentService;/*** 查询所有*/@Testvoid contextLoadSelectAll() {List<Student> students = studentService.selectAll();for (Student student : students) {System.out.println(student);}}/*** 单条插入*/@Testvoid contextLoadsInsert() {Student student = new Student("666","刘品水",18);studentService.insert(student);}/*** 循环里做插入 主打就是挨训*/@Testvoid contextLoadsInsert2() {//还有优化空间 下篇博客见List<Student> studentList=new ArrayList<>();for (int i = 1; i <= 100000; i++) {Student student1 = new Student(i+"","刘品水"+i,1+i);studentList.add(student1);}System.out.println(studentList.size());long beginTime = System.currentTimeMillis();for (Student student : studentList) {studentService.insert(student);}long endTime = System.currentTimeMillis();long spendTime = endTime - beginTime;System.out.println("用时:"+spendTime+"毫秒");}/*** 批量插入*/@Testvoid contextLoadsSaveBatch() {//还有优化空间 下篇博客见List<Student> studentList=new ArrayList<>();for (int i = 1; i <= 1000000; i++) {Student student1 = new Student(i+"","刘品水"+i,1+i);studentList.add(student1);}System.out.println(studentList.size());long beginTime = System.currentTimeMillis();studentService.saveBatch(studentList,1000000);long endTime = System.currentTimeMillis();long spendTime = endTime - beginTime;System.out.println("用时:"+spendTime+"毫秒");}/*** 批量保存或者批量更新*/@Testvoid contextLoadSaveOrUpdateBatch() {List<Student> studentList=new ArrayList<>();Student student1 = new Student("668","吴彦祖",18);Student student2 = new Student("669","彭于晏",18);Student student3 = new Student("670","霍建华",18);studentList.add(student1);studentList.add(student2);studentList.add(student3);studentService.saveOrUpdateBatch(studentList);}/*** 批量删除*/@Testvoid contextLoadDeleteBatch() {List<Student> studentList=new ArrayList<>();Student student1 = new Student("123456","刘品水",18);Student student2 = new Student("654321","刘品水",18);Student student3 = new Student("77777","刘品水",18);studentList.add(student1);studentList.add(student2);studentList.add(student3);studentService.deleteBatch(studentList);}/*** 删除所有*/@Testvoid contextLoadDeleteBatchAll() {studentService.deleteAll();}}

六、总结

本文介绍了如何结合 MyBatis-Plus 和达梦数据库来实现高效的数据持久化操作。通过配置数据源、创建实体类、Mapper 接口和 Service 层,我们可以轻松地完成增删改查等数据库操作。MyBatis-Plus 的强大功能和简便的操作方式,大大提高了开发效率,使得数据持久化变得更加轻松愉快。

 

最重要的就是实体类上要记得加上你的模式名

相关文章:

MyBatis-Plus 和达梦数据库实现高效数据持久化

一、添加依赖 首先&#xff0c;我们需要在项目的 pom.xml 文件中添加 MyBatis-Plus 和达梦数据库的依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifac…...

已注销【888】

元神密码 - 飞书云文档 (feishu.cn)...

Ceph错误汇总

title: “Ceph错误汇总” date: “2020-05-14” categories: - “技术” tags: - “Ceph” - “错误汇总” toc: false original: true draft: true Ceph错误汇总 1、执行ceph-deploy报错 1.1、错误信息 ➜ ceph-deploy Traceback (most recent call last):File "/us…...

DataTable过滤某些数据

要过滤DataTable中的某些数据&#xff0c;可以使用以下方法&#xff1a; 使用Select方法&#xff1a;可以使用DataTable的Select方法来筛选满足指定条件的数据行。该方法接受一个字符串参数作为过滤条件&#xff0c;返回一个符合条件的数据行数组。 DataTable filteredTable …...

JAVASE---继承和多态

继承 比如&#xff0c;狗和猫&#xff0c;它们都是一个动物&#xff0c;有共同的特征&#xff0c;我们就可以把这种特征抽取出来。 像这样把相同的可以重新放到一个类里面&#xff0c;进行调用&#xff0c;这就是继承。 概念 继承(inheritance)机制&#xff1a;是面向对象程…...

Centos7升级gcc、g++版本(转载)

Centos7默认的 gcc版本是 4.8.5 默认使用yum install gcc安装出来的gcc版本也是是4.8.5。 1.首先查看自己的 gcc 版本 gcc -v g -v如果出现&#xff1a;bash: g: 未找到命令... 则安装g&#xff1a;遇到暂停时&#xff0c;输入y继续安装 yum install gcc-c然后输入&#xf…...

第一章:继承

系列文章目录 文章目录 系列文章目录前言继承的概念及定义继承的概念继承定义定义格式继承关系和访问限定符继承基类成员访问方式的变化 基类和派生类对象赋值转换&#xff08;公有继承&#xff09;继承中的作用域派生类的默认成员函数继承与友元继承与静态成员不能被继承的类复…...

git面试题

文章目录 git经常用哪些指令git出现代码冲突怎么解决你们团队是怎么管理git分支的如何实现Git的免密操作 git经常用哪些指令 产生代码库 新建一个git代码库 git init下载远程项目和它的整个代码历史 git clone 远程仓库地址配置 显示配置 git config --list [--global]编辑配置…...

Github Copilot在JetBrains软件中登录Github失败的解决方案

背景 我在成功通过了Github Copilot的学生认证之后&#xff0c;在VS Code和PyCharm中安装了Github Copilot插件&#xff0c;但在PyCharm中插件出现了问题&#xff0c;在登录Github时会一直Retrieving Github Device Code&#xff0c;最终登录失败。 我尝试了网上修改DNS&…...

使用 github 同步谷歌浏览器书签

想必使用谷歌浏览器Chrome的用户一定非常头疼的一件事就是&#xff1a;账户不能登录&#xff0c;书签收藏夹不能同步&#xff0c;换一台电脑书签收藏夹没有了&#xff01; 下面教大家一招亲测有效适用的方法解决书签同步问题&#xff0c;在任何电脑都可以同步了 1、去下载谷歌…...

Eclipse进行debug

目录 基本步骤三种执行方式 -- 键盘快捷键variables面板移除debug过的项目通过eclipse调用具有软件界面的项目进行debug各个variable颜色具有的意义 基本步骤 点击eclipse右上角debug按钮 调出debug面板 点击小蜘蛛图标&#xff08;不是点绿色三角的Run&#xff09; 此时会进…...

13-5_Qt 5.9 C++开发指南_基于信号量的线程同步_Semaphore

文章目录 1. 信号量的原理2. 双缓冲区数据采集和读取线程类设计3. QThreadDAQ和QThreadShow 的使用4. 源码4.1 可视化UI设计框架4.2 qmythread.h4.3 qmythread.cpp4.4 dialog.h4.5 dialog.cpp 1. 信号量的原理 信号量(Semaphore)是另一种限制对共享资源进行访问的线程同步机制…...

golang使用泛型实现mapreduce操作

1.使用面向对象的方式写 package streamimport ("fmt""log""reflect""sort""strconv""strings" )type Stream[T any] struct {data []TkeyBy stringsortByNum stringsortByStr []string }func FromElem…...

2023华数杯数学建模C题思路分析 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情…...

【汇总】解决Ajax请求后端接口,返回ModelAndView页面不跳转

【汇总】解决Ajax请求后端接口&#xff0c;返回ModelAndView不跳转 问题发现问题解决方法一&#xff1a;直接跳转到指定URL&#xff08;推荐&#xff09;方法二&#xff1a;将返回的html内容&#xff0c;插入到页面某个元素中方法三&#xff1a;操作文档流方法四&#xff1a;使…...

网络安全进阶学习第九课——SQL注入介绍

文章目录 一、什么是注入二、什么是SQL注入三、SQL注入产生的原因四、SQL注入的危害五、SQL注入在渗透中的利用1、绕过登录验证&#xff1a;使用万能密码登录网站后台等。2、获取敏感数据3、文件系统操作4、注册表操作5、执行系统命令 六、如何挖掘SQL注入1、SQL注入漏洞分类按…...

一个计算机专业的学生数据结构这门课学到什么程度才能算学的还不错?

数据结构之所以重要是因为它处于算法中的基础地位&#xff0c;与解决实际问题关系密切&#xff1b;而之所以不重要是因为课本上能学到的所有实现都已经有人造过轮子了&#xff0c;甚至已经作为很多语言的标准API存在了。 换句话来说&#xff0c;在以后的编码生涯中&#xff0c…...

[语义分割] ASPP不同版本对比(DeepLab、DeepLab v1、DeepLab v2、DeepLab v3、DeepLab v3+、LR-ASPP)

1. 引言 1.1 本文目的 本文主要对前段时间学习的 ASPP 模块进行对比&#xff0c;涉及到的 ASPP 有&#xff1a; ASPP in DeepLab v2&#xff0c;简称 ASPP v2ASPP in DeepLab v3&#xff0c;简称 ASPP v3ASPP in DeepLab v3&#xff0c;简称 ASPP v3ASPP in MobileNet v3&am…...

anaconda创建虚拟环境在D盘

【看一看就行&#xff0c;又是挺水的一期&#xff08;每一季都掺和一点子水分也挺好&#xff09;】 一、创建&#xff1a; conda create --prefixD:\python37\py37 python3.7 这下就在D盘了&#xff1a; 二、激活刚刚那个环境&#xff1a; activate D:\pyhton37\py37​ &…...

Java设计模式之工厂设计模式

简介 工厂模式是一种常见的设计模式&#xff0c;用于创建对象的过程中&#xff0c;通过工厂类来封装对象的创建过程。其核心思想是将对象的创建和使用分离&#xff0c;从而降低耦合度&#xff0c;提高代码的可维护性和可扩展性。工厂模式通常包括三种类型&#xff1a;简单工厂…...

前端TypeScript吐槽:别再让你的代码变成类型地狱!

前端TypeScript吐槽&#xff1a;别再让你的代码变成类型地狱&#xff01; 毒舌时刻 前端TypeScript就像安全套——用对了能保护你&#xff0c;用错了会让你难受。TypeScript、tsconfig、类型定义... 一堆TypeScript工具让你晕头转向&#xff0c;结果你的代码要么类型定义复杂得…...

3步彻底解决Windows多显示器DPI缩放难题:SetDPI工具完全指南

3步彻底解决Windows多显示器DPI缩放难题&#xff1a;SetDPI工具完全指南 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI 还在为Windows系统下多显示器DPI缩放不一致而烦恼吗&#xff1f;主显示器清晰锐利&#xff0c;副显示器却模糊不堪…...

COMSOL热应力仿真新手入门:从零开始设置热膨胀参数(附案例解析)

COMSOL热应力仿真新手入门&#xff1a;从零开始设置热膨胀参数&#xff08;附案例解析&#xff09; 热应力仿真是工程设计中不可或缺的一环&#xff0c;尤其在电子设备散热、航空航天材料分析等领域应用广泛。作为COMSOL Multiphysics的初学者&#xff0c;掌握热应力仿真的基础…...

DFX测试与专项测试:非功能性测试的深度解析与实践指南

1. DFX测试&#xff1a;产品全生命周期的质量守护者 第一次接触DFX测试这个概念时&#xff0c;我也被这个缩写搞懵了。后来在实际项目中才发现&#xff0c;这其实就是把质量保障前置到设计阶段的绝佳实践。DFX中的"X"就像是个万能变量&#xff0c;可以代入产品生命周…...

如何彻底关闭Elasticsearch 7.x的安全警告提示(内网开发必备)

彻底关闭Elasticsearch 7.x安全警告的实战指南 每次启动Elasticsearch时&#xff0c;控制台不断刷新的安全警告是否让你感到烦躁&#xff1f;特别是在内网开发环境中&#xff0c;这些红色警告既不影响功能又无法忽略。本文将带你深入理解警告产生的机制&#xff0c;并提供三种不…...

网络排障实战:当ping命令不好使时,如何用Wireshark抓包分析ICMP协议找出真凶?

网络排障实战&#xff1a;当ping命令失效时&#xff0c;如何用Wireshark解码ICMP协议故障 当你面对一台无法ping通的目标主机时&#xff0c;"请求超时"的提示就像一堵没有门的墙——它告诉你无法通行&#xff0c;却不会解释原因。作为运维工程师&#xff0c;我曾遇到…...

解锁Koikatu全部潜能的6个专业步骤:KK-HF Patch增强指南

解锁Koikatu全部潜能的6个专业步骤&#xff1a;KK-HF Patch增强指南 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch KK-HF Patch是针对Koikatu系列…...

用Unity 2D碰撞体+Effector,5分钟实现《星露谷物语》式的磁铁吸附效果

用Unity 2D碰撞体Effector实现《星露谷物语》式磁铁吸附效果 在《星露谷物语》这类农场模拟游戏中&#xff0c;角色靠近可收集物品时自动吸附的设计极大提升了操作流畅度。这种看似简单的交互背后&#xff0c;其实隐藏着Unity物理系统的巧妙运用。本文将手把手教你如何用2D碰撞…...

第29章 2023真题作文

目录 题目2023.11-论边缘计算及其应用 题目2023.11-论多源数据集成及应用 题目2023.11-论面向对象的建模及应用 题目2023.11-论软件的可靠性评价 题目2023.11-论边缘计算及其应用 边缘计算是在靠近物或数据源头的网络边缘侧&#xff0c;融合网络、计算、存储、应用核心能力…...

揭秘R3nzSkin:如何为英雄联盟打造个性化视觉体验

揭秘R3nzSkin&#xff1a;如何为英雄联盟打造个性化视觉体验 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin 你是否曾在英雄联盟对战中&#xff0c;因为默认视野限制而错过关键信息&#…...