SpringBoot+MP操作DM8

1. 达梦数据库介绍

image-20230909080931842

达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的国产高性能数据库管理系统,简称DM。当前最新版本是8.0版本,简称DM8。(同时也是一款RDBMS,关系型数据库管理系统,和oracle比较像)

DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLAP和OLTP请求,从根本上提升了DM8产品的品质。

  • 达梦数据库官网:https://www.dameng.com/

  • 下载地址:https://eco.dameng.com/download/

  • 技术文档:https://eco.dameng.com/document/dm/zh-cn/start/index.html


2. 基于dokcer安装dm8

文档地址:https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html

1、下载dm8安装包:

wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar

image-20230909082633757


2、导入镜像:

docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar

导入完成后,可以使用 docker images 查看导入的镜像,结果显示如下:

image-20230909082258066


3、启动容器:

docker run -d -p 30236:5236 \
--restart=always \
--name dm8_test \
--privileged=true \
-e CASE_SENSITIVE=0 \
-e PAGE_SIZE=16 \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-e  EXTENT_SIZE=32 \
-e BLANK_PAD_MODE=1 \
-e LOG_SIZE=1024 \
-e UNICODE_FLAG=1 \
-e LENGTH_IN_CHAR=1 \
-e INSTANCE_NAME=dm8_test \
-v /data/dm8_test:/opt/dmdbms/data \
dm8_single:dm8_20230808_rev197096_x86_rh6_64

参数介绍:

  • -d: 表示容器以后台(detached)模式运行,意味着容器会在后台运行,而不会占用你的终端。

  • -p 30236:5236: 端口映射,将主机的端口30236映射到容器内部的端口5236。用于容器内部的应用程序与外部进行网络通信。

  • --restart=always:设置Docker在容器停止或崩溃时自动重新启动容器。

  • --name dm8_test: 给容器起个名字。

  • --privileged=true: 表示授予容器特权访问,允许容器执行更多的系统操作。

  • 环境变量参数(-e参数):

    • -e CASE_SENSITIVE=0 :设置大小写不敏感。

    • PAGE_SIZE=16: 页大小。

    • LD_LIBRARY_PATH=/opt/dmdbms/bin: 用于指定动态链接库的搜索路径, 一般设置为容器内部数据库的文件目录。

    • EXTENT_SIZE=32: 簇大小。

    • BLANK_PAD_MODE=1: 设置字符串比较时, 结尾空格填充模式是否兼容 ORACLE。 取值: 1 兼容; 0 不兼容。默认为 0。

    • LOG_SIZE=1024: 日志大小。

    • UNICODE_FLAG=1: 表示使用utf-8字符集。

    • LENGTH_IN_CHAR=1: VARCHAR 类型对象的长度是否以字符为单位。取值:1/Y表示是,0/N表示否,默认为0。

    • INSTANCE_NAME=dm8_test: 实例名称。

  • -v /data/dm8_test:/opt/dmdbms/data: 挂载数据卷,将主机上的/data/dm8_test目录映射到容器内部的/opt/dmdbms/data目录。用于在容器内部持久化存储数据。

  • dm8_single:dm8_20230808_rev197096_x86_rh6_64: 容器镜像名称。


容器启动完成后,使用 docker ps 查看镜像的启动情况,结果显示如下:

docker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

image-20230909085930603

容器启动完成后,可通过日志检查容器启动情况,命令如下:

docker logs -f  dm8_test

image-20230909090146258


4、进入容器,登录数据库:

docker exec -it dm8_01 bashcd /opt/dmdbms/bin# 执行登录命令
./disql SYSDBA/SYSDBA001

image-20230909093635012

  • 默认账号密码:SYSDBA/SYSDBA001

  • 达梦数据库常用命令:https://blog.csdn.net/wangguoqing_it/article/details/126400007

  • 达梦数据库常规数据类型:https://betheme.net/a/20657314.html?action=onClick


5、启动、停止、重启容器相关命令:

  • 启动容器:docker start dm8_test
  • 停止容器:docker stop dm8_test
  • 重启容器:docker restart dm8_test

3. 基础环境准备

环境:

  • JDK8

  • IDEA 2023.2

  • Maven 3.6.1

  • SpringBoot 2.7.13

  • Mybatis-Plus 3.5.2

  • Dm8JdbcDriver18 8.1.1.49

1、创建数据库表:

IDEA连接达梦数据库:https://blog.csdn.net/lps12345666/article/details/131745048

create schema dmdemo;create table dmdemo.tb_stu
(id BIGINT primary key ,name VARCHAR(20) not null,age INT not null
);

image-20230909111216976

2、创建springboot工程

3、导入相关依赖:

<?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><groupId>cn.z3inc</groupId><artifactId>springboot-dm8</artifactId><version>1.0-SNAPSHOT</version><description>SpringBoot+MP操作DM8</description><!-- springboot工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.13</version><relativePath/> <!-- lookup parent from repository --></parent><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--springmvc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- junit--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!--mybatisplus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--达梦数据库驱动--><dependency><groupId>com.dameng</groupId><artifactId>Dm8JdbcDriver18</artifactId><version>8.1.1.49</version></dependency><!--hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- 参数校验框架--><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId></dependency></dependencies><build><plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--打包时排除lombok--><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

4、修改application.yml配置:

server:port: 8778 #项目端口号servlet:context-path: /dm #项目访问路径spring:# 达梦数据库配置datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://192.168.159.103:30236/dmdemousername: SYSDBApassword: SYSDBA001# mp配置
mybatis-plus:mmapper-locations: classpath:mapper/*.xml #mapper配置文件存放目录type-aliases-package: cn.z3inc.pojo # 类型别名(实体类)configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #配置标准sql输出map-underscore-to-camel-case: true #开启驼峰映射#全局配置global-config:db-config:schema: dmdemo #达梦需要加上这个,这是mybatis-plus的配置,如果不加,则查询不到该模式下的数据id-type: assign_id #主键生成策略:雪花算法table-prefix: tb_  #表名前缀全局配置,表示加载以`tb_`开头的表名

5、使用mybatisx插件生成基础代码:

image-20230909111646086

image-20230909111622458

image-20230909112517730

image-20230909112430688


6、为实体类配置参数校验:

package cn.z3inc.pojo;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;import javax.validation.constraints.*;
import java.io.Serializable;@Data
@EqualsAndHashCode(callSuper = false) //它的equals()和hashCode()方法只比较当前类的字段,而不比较任何从父类继承来的字段。
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "TB_STU")  // 实体类与表名绑定
public class Student implements Serializable {private static final long serialVersionUID = 1L;/****/@TableIdprivate Long id;/*** 姓名*/@NotBlank(message = "姓名不能为空")private String name;/*** 年龄*/@NotNull@Min(0)@Max(120)private Integer age;}

image-20230909120332942


7、在启动类上配置mapper扫描和分页插件:

package cn.z3inc;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;@MapperScan("cn.z3inc.mapper") //包扫描配置
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}// 注册分页插件@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//1 创建MP拦截器对象MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();//2 添加分页拦截器mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());//注意:不同的数据库在开启分页功能的时候,需要设置成对应的数据库类型,默认支持mysql (个别数据库的方言不太一样)mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.DM));//达梦return mpInterceptor;}
}

8、创建Controller:

package cn.z3inc.controller;import cn.z3inc.service.StudentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 学生相关接口** @author 白豆五* @date 2023/9/9* @since JDK8*/
@RestController
@RequestMapping("/stu")
@Slf4j
@RequiredArgsConstructor // 简化构造方法注入的注解
public class StuController {private final StudentService studentService;
}

4. 测试

1、添加数据:

package cn.z3inc.controller;import cn.z3inc.pojo.Student;
import cn.z3inc.service.StudentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;/*** 学生相关接口** @author 白豆五* @date 2023/9/9* @since JDK8*/
@RestController
@RequestMapping
@Slf4j
@RequiredArgsConstructor // 简化构造方法注入的注解
@Validated //开启参数校验
public class StuController {private final StudentService studentService;@PostMapping("/save")public String save(@Valid @RequestBody Student student) {boolean flag = this.studentService.save(student);return flag ? "ok": "error";}
}

启动项目,测试:http://localhost:8778/dm/save

image-20230909121814130

image-20230909122523755


2、查所有:

@GetMapping("list")
public String list() {return JSONUtil.toJsonStr(studentService.list());
}

image-20230909135546040


2、批量添加:

@PostMapping("/bulkSave")
public void bulkSave() {// 离职小技巧:List<Student> studentList = new ArrayList<>();for (int i = 1; i <= 100000; i++) {Student stu = new Student();stu.setName("白豆" + i);stu.setAge(RandomUtil.randomInt(15, 30));studentList.add(stu);}System.out.println(studentList.size());long beginTime = System.currentTimeMillis();for (Student student : studentList) {studentService.save(student);}long endTime = System.currentTimeMillis();long spendTime = endTime - beginTime;System.out.println("用时:" + spendTime + "毫秒");}

4、分页

@GetMapping("page")
public /*List<Student>*/ String page(@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,@RequestParam(name = "pageSize", defaultValue = "5") Integer pageSize) {// 0.参数校验if (pageNum <= 0 || pageNum > 100) {pageNum = 1;}if (pageSize <= 0 || pageSize > 30) {pageSize = 5;}// 1.创建分页对象,设置分页参数IPage<Student> page = new Page(pageNum, pageSize);// 2.执行分页查询studentService.page(page, null);// 3.转成json字符串,返回return JSONUtil.toJsonStr(page);
}

image-20230909142252196

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

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

相关文章

红米Note12Turbo解锁BL刷入PixelExperience原生ROM系统详细教程

红米Note12Turbo的兄弟是国外POCO F5 机型&#xff0c;并且该机性价比非常高&#xff0c;国内外销量也还可以&#xff0c;自然不缺第三方ROM适配。目前大家心心念念的原生PixelExperience已成功发布&#xff0c;并且相对来说&#xff0c;适配程度较高&#xff0c;已经达到日用的…

python实现adb辅助点击屏幕工具

#!/usr/bin/env python # -*- coding: utf-8 -*-import re import os import time import subprocess import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk# 设置ADB路径&#xff08;根据你的系统和安装路径进行调整&#xff09; ADB_PATH C…

intellij debug模式提示 : Method breakpoints may dramatically slow down debugging

最近在搞一个搭建一个项目 , 项目搭建完之后发现启动不了 , 一直都是正在加载中 并且提示Method breakpoints may dramatically slow down debugging&#xff0c;百度之后才知道是打了方法断点的原因 , 之前不小心打了一个断点 解决办法 : 点击如下图所示的按钮 然后把有断点…

Linux_VMware_虚拟机磁盘扩容

来源文章 &#xff1a;VMware教学-虚拟机扩容篇_vmware虚拟机扩容_系统免驱动的博客-CSDN博客 由于项目逐步的完善&#xff0c;需要搭建的中间件&#xff0c;软件越来越多&#xff0c;导致以前虚拟机配置20G的内存不够用了&#xff0c;又不想重新创建新的虚拟机&#xff0c;退…

为什么说网络安全是风口行业?是it行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万&…

ucosii任务切换及任务同步

任务的切换 一、 运行态&#xff1a;占用CPU 二、 等待&#xff1a;调用Pend或延时函数后&#xff0c;释放CUP使用权。 三、 就绪&#xff1a;Pend条件满足&#xff08;消息到来、等待超时&#xff09;&#xff0c;延时时间完毕后&#xff08;由等待进入就绪&#xff09; 四、 …

LeetCode 297. Serialize and Deserialize Binary Tree【树,DFS,BFS,设计,二叉树,字符串】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

机器学习入门教学——决策树

1、简介 决策树算法是一种归纳分类算法&#xff0c;它通过对训练集的学习&#xff0c;挖掘出有用的规则&#xff0c;用于对新数据进行预测。决策树算法属于监督学习方法。决策树归纳的基本算法是贪心算法&#xff0c;自顶向下来构建决策树。 贪心算法&#xff1a;在每一步选择…

MR源码解析和join案例

MR源码解析 new Job(): 读取本地文件, xml配置job.start(): 启动线程job的run():线程方法 runTasks(): 传入对应的接口&#xff0c;启动map或者reduceMapTask类的run(): 设置map阶段的参数&#xff0c;初始化任务&#xff0c;创建上下文对象 创建读取器LineRecordReader判断是…

Visual Studio 新建类从默认internal改为public

前言 之前一直用的Resharp辅助编写C#代码&#xff0c;Resharp用起来的确方便不少&#xff0c;但是太消耗开发机内存了。重装电脑后&#xff0c;还是决定使用Visual Studio内置的功能。 默认情况下&#xff0c;Visual Studio 中生成一个类或接口是internal类型的&#xff0c;而…

EagleSDR USB HAT FT600

给EagleSDR做了个USB 3.0的子卡&#xff0c;采用FT600方案&#xff0c;实物如下&#xff1a; 用FT600DataStreamerDemoApp测试&#xff0c;速度如下&#xff1a; 由于FT600是16bit的接口&#xff0c;如果用FT601的32bit接口&#xff0c;性能应该还会有大幅提升。 测试代码很简…

Notepad++下载安装

自己在 找Notepad发现网上的网址参差不齐&#xff0c;自己找到的一个不错下载链接见文末&#xff01; Notepad 是一个免费的代码编辑器&#xff0c;专为在微软 Windows 环境下使用。它是一个开源项目&#xff0c;采用 GPL 许可证&#xff0c;并使用 C 编程语言结合 Win32 API 和…

数据驱动的数字营销与消费者运营

引言&#xff1a;基于海洋馆文旅企业在推广宣传中&#xff0c;如何通过指标体系量化分析广告收益对业务带来的收益价值的思考&#xff1f; 第一部分:前链路引流投放的策略与实战 1.1 动态广告的实现: 偶然与必然 动态广告是一种基于实时数据和用户行为的广告形式&#xff0c;它…

Mysql--事务

事务 开始之前&#xff0c;让我们先想一个场景&#xff0c;有的时候&#xff0c;为了完成某个工作&#xff0c;需要完成多种sql操作 比如转账 再比如下单 第一步 我的账户余额减少 第二步 商品的库存要减少 第三步 订单表中要新增一项 事务的本质&#xff0c;就是为了把多个操…

Mac 多版本jdk安装与切换

macOS上可以安装多个版本的jdk&#xff0c;方法如下&#xff1a; 1.下载jdk 在Oracle官网上下载不同版本的jdk&#xff1a; https://www.oracle.com/java/technologies/downloads/#java17 方案一 1.查看本机所有的jdk /usr/libexec/java_home -V3. 配置环境变量 打开bash_…

Excel文件生成与下载(SpringBoot项目)(easypoi)

说明 通过接口&#xff0c;导出表格。 使用SpringBoot框架和easypoi表格解析框架&#xff0c;生成Excel表格&#xff0c;并通过接口下载。 表格示例 依赖 版本 <easypoi.version>4.4.0</easypoi.version>依赖 <!-- easypoi --> <dependency><…

python知识:有效使用property装饰器

一、说明 Python是唯一有习语&#xff08;idioms&#xff09;的语言。这增强了它的可读性&#xff0c;也许还有它的美感。装饰师遵循Python的禅宗&#xff0c;又名“Pythonic”方式。装饰器从 Python 2.2 开始可用。PEP318增强了它们。下面是一个以初学者为中心的教程&#xff…

安科瑞精密配电多回路监控装置在轨道交通项目上的应用

行业背景 轨道交通作为城市公共交通系统的一部分&#xff0c;在过去几十年中得到了广泛的发展和扩张。它在解决城市交通拥堵、减少环境污染、提高城市可持续性等方面发挥了重要作用。随着科技的进步&#xff0c;轨道交通系统也在不断引入新的技术和创新&#xff0c;以提高运行…

WPF Material Design 初次使用

文章目录 前言相关资源快速开始快速开始说明地址 吐槽一下 前言 MD全称MaterialDesignInXamlToolkit&#xff0c;MaterialDesign和Bootstrap一样&#xff0c;都是一个UI风格库。相当于衣服中的休闲服&#xff0c;汉服&#xff0c;牛仔裤一样&#xff0c;就是风格不一样的Ui框架…

VR钢铁实训 | 铁前事业部虚拟仿真培训软件

随着科技的发展&#xff0c;虚拟现实技术在各个行业中的应用越来越广泛。在钢铁冶炼行业中&#xff0c;VR技术也逐渐得到了应用&#xff0c;其中铁前事业部虚拟仿真培训软件就是一项非常有优势的技术。 铁前事业部虚拟仿真培训软件是广州华锐互动打造的《钢铁生产VR虚拟培训系统…