springboot使用达梦数据库(DM8)整合MybatisPlus
作者:mmseoamin日期:2023-12-19

标题springboot使用达梦数据库(DM8)整合MybatisPlus

一、目的:

在idea中开发spring boot项目,用到的数据库是达梦数据库,想要使用 MybatisPlus 自动生成实体类和服务,并且通过 MybatisPlus 完成一些简单的数据库CRUD

二、配置:

ps:这里的 MybatisPlus 版本必须要是3.0以上

2.1、pom



    dm.jdbc
    DmJdbcDriver18
    1.8
    system
    ${project.basedir}/lib/DmJdbcDriver18.jar



    com.baomidou
    mybatis-plus-boot-starter
    3.5.2


    com.baomidou
    mybatis-plus-generator
    3.5.2

ps:其中需要将达梦数据库的依赖添加到指定目录下,不然达梦的依赖无法生效。至于该 jar包 的位置在达梦数据库安装的文件目录中可以找到

springboot使用达梦数据库(DM8)整合MybatisPlus,在这里插入图片描述,第1张

位置参考:

springboot使用达梦数据库(DM8)整合MybatisPlus,在这里插入图片描述,第2张

2.2、逆向工程工具类

package com.xxxx;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import org.junit.jupiter.api.Test;
/**
 * @className: MybatisPlusGeneraotr
 * @description: mybatis plus代码生成器
 **/
public class MybatisPlusGeneraotr {
    @Test
    void mybatisPlusGenerator() {
        FastAutoGenerator
                // 数据源配置
                .create(
                        "jdbc:dm://localhost:5236/SYSDBA?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8",
                        "SYSDBA",     // 达梦数据库模式名
                        "xyz123..."		// 密码
                )
                // 全局配置
                .globalConfig(
                        builder -> {
                            builder
                                    .author("xxx")              // 作者
                                    .outputDir(System.getProperty("user.dir") + "/src/main/java")    // 指定输出目录
                                    .commentDate("yyyy-MM-dd")                                // 注释的日期
                                    // 修改Date类型为LocalDateTime
                                    //.dateType(DateType.ONLY_DATE)
                                    .enableSwagger()
                                    .disableOpenDir();                                            // 禁止打开输出目录,默认:true
                        }
                )
                // 包配置
                .packageConfig(
                        builder -> {
                            builder
                                  //.moduleName(System.getProperty("user.dir").substring(System.getProperty("user.dir").lastIndexOf("\\") + 1))   // 设置父包模块名
                                    .parent(this.getClass().getPackageName() + ".base")           // 父包名
                                    .entity("pojo.entity")                                          // 实体类包名
                                    //.pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper"))   // 设置 mapperXml 生成路径
                                    .other("utils"); // 自定义文件包名
                        }
                )
                // 策略配置
                .strategyConfig(
                        builder -> {
                            builder
                                    // 在这里添加数据库表名
                                    .addInclude("BBZQ_ROLE")                       // 设置需要生成的表名,多个表之间可以用逗号隔开
                                    // .addExclude("BBZQ_USER","BBZQ_USER_LOG")
                                    .controllerBuilder().enableRestStyle()          // controller配置策略
                                    .serviceBuilder().formatServiceFileName("%sService")            // service配置策略
                                    .mapperBuilder().enableBaseColumnList().enableBaseResultMap().enableMapperAnnotation()     // mapper配置策略
                                    .entityBuilder().enableLombok().enableRemoveIsPrefix().disableSerialVersionUID().enableTableFieldAnnotation()       // 实体配置策略
                                    .logicDeleteColumnName("is_deleted")        		  // 逻辑删除字段名
                                    .naming(NamingStrategy.underline_to_camel)            // 数据库表映射到实体的命名策略,下划线转驼峰
                                    .columnNaming(NamingStrategy.underline_to_camel)      // 数据库表字段映射的命名策略,下划线转驼峰
                                    .addTableFills(    // 添加表字段填充,"create_time"自动填充为插入时间,"update_time"自动填充为修改时间
                                            new Column("create_time", FieldFill.INSERT),
                                            new Column("update_time", FieldFill.INSERT_UPDATE)
                                    )
                                    .idType(IdType.AUTO);
                        }
                )
                // 模板配置
                .templateEngine(new VelocityTemplateEngine())    // 使用的是默认的 Velocity 引擎模板
                // 执行
                .execute();
    }
}

2.3、数据库连接部分

server:
  port: 7069
spring:
  config:
    activate:
      on-profile: xx
  # 达梦数据库连接配置
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: dm.jdbc.driver.DmDriver
    #    url: jdbc:dm://127.0.0.1:5236/SYSDBA?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
    url: jdbc:dm://localhost:5236/SYSDBA?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
    username: SYSDBA
    password: xyz123...

2.4、达梦数据库的一些要求

这里想要实现,需要保证达梦数据库的表名和字段名全部都是大写,因为如果是小写的话,在查询的时候需要加上双引号,而 MybatisPlus 生成 sql 的过程中是不会自动添加双引号的,这样就会出问题,如下

springboot使用达梦数据库(DM8)整合MybatisPlus,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqTDcdUd-1685441611387)(C:\Users\NG-PC\AppData\Roaming\Typora\typora-user-images\image-20230530175626863.png)],第3张

三、实现效果:

3.1、执行逆向工程方法

springboot使用达梦数据库(DM8)整合MybatisPlus,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FQEefl8W-1685441611388)(C:\Users\NG-PC\AppData\Roaming\Typora\typora-user-images\image-20230530180048697.png)],第4张

3.2、效果:

这里的效果图是我执行了多个表之后的结果

springboot使用达梦数据库(DM8)整合MybatisPlus,在这里插入图片描述,第5张

3.3、测试 mybatisPlus 是否可用

测试前数据库数据:

springboot使用达梦数据库(DM8)整合MybatisPlus,在这里插入图片描述,第6张

执行测试工具类:

package com.xx;
import com.xx.base.mapper.BbzqRoleMapper;
import com.xx.base.pojo.entity.BbzqRole;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
@SpringBootTest(classes = ApiApplication.class)
public class dmTest {
    @Autowired
    private BbzqRoleMapper bbzqRoleMapper;
    @Test
    public void teacher() throws ParseException {
        List teachers = bbzqRoleMapper.selectList(null);
        teachers.forEach(System.out::println);
        System.out.println("==================================");
        BbzqRole bbzqRole = new BbzqRole();
        bbzqRole.setId("566666666");
        bbzqRole.setRoleName("zhouzhou");
        bbzqRole.setRoleCode("8858");
        String createTime = "2022-02-02 02:02:02";
        String updateTime = "2023-03-03 03:03:03";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        bbzqRole.setCreateTime(formatter.parse(createTime));
        bbzqRole.setUpdateTime(formatter.parse(updateTime));
        bbzqRoleMapper.insert(bbzqRole);
        teachers = bbzqRoleMapper.selectList(null);
        teachers.forEach(System.out::println);
    }
}

springboot使用达梦数据库(DM8)整合MybatisPlus,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vPQAxbUa-1685441611391)(C:\Users\NG-PC\AppData\Roaming\Typora\typora-user-images\image-20230530180839068.png)],第7张

测试后数据库数据:

springboot使用达梦数据库(DM8)整合MybatisPlus,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y88MUeQk-1685441611392)(C:\Users\NG-PC\AppData\Roaming\Typora\typora-user-images\image-20230530180904030.png)],第8张

至此,成功!

再次在提一次: 达梦数据库中的表和字段都必须大写 不过好像听说在创建或迁移数据的工程中设置达梦数据库不区分大小写也可以,不过没有尝试过