MyBatis-plus+达梦数据库实现自动生成代码的示例

先说点什么

mybatis-plus是一款增强版的mybatis,功能强大,可以很大程度的简化开发。
然而达梦数据库比较小众,虽然官方说mybatis-plus支持达梦数据库,但是使用起来遇到了很多问题。
这篇文章主要讲如何使用mybatis-plus访问达梦数据库,并使用逆向工程自动生成代码。
=。=对了 这是个使用spring boot的项目。

(配置)POM文件,引入所需要的依赖

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <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>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.7.0</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.7.0</version>
    </dependency>

    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.2.0</version>
    </dependency>
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generator</artifactId>
      <version>3.2.0</version>
    </dependency>

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.29</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.0.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-test</artifactId>
    </dependency>

  </dependencies>

(配置)达梦的驱动包,配置数据源

在达梦数据库的安装目录下有驱动包,我们先把jar包丢进来,放到lib这个文件夹下:

然后配置pom文件:

 <dependency>
      <groupId>com.dm</groupId>
      <artifactId>Dm7JdbcDriver</artifactId>
      <version>1.7</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/src/lib/Dm7JdbcDriver18.jar</systemPath>
    </dependency>

到现在,所有需要的依赖就都已经导入了。

(配置)application.properties文件

spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver

mybatis-plus.configuration.cache-enabled=true
mybatis-plus.mapper-locations=classpath*:mappers/*.xml
mybatis-plus.type-aliases-package=com.example.demo.extity.*
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.auto-mapping-behavior=full
mybatis-plus.global-config.banner=false

创建Mybatis-Plus自动生成代码的配置类

在配置数据源的时候要注意,如果不设置数据源的类型是达梦数据库,会无法识别。
经历了开心的看源码环节,我们发现Mybatis中有个枚举类DbType来标识数据库的类型,其中有达梦数据库的类型。(=。=竟然有)
所以我们在配置类里传个参数就好了。(=。= 不然可能就凉了)

dsc.setDbType(DbType.DM);

配置类代码:

public class MysqlGenerator {

  public static String scanner(String tip) {
    Scanner scanner = new Scanner(System.in);
    StringBuilder help = new StringBuilder();
    help.append("请输入" + tip + ":");
    System.out.println(help.toString());
    if (scanner.hasNext()) {
      String ipt = scanner.next();
      if (StringUtils.isNotEmpty(ipt)) {
        return ipt;
      }
    }
    throw new MybatisPlusException("请输入正确的" + tip + "!");
  }

  public static void main(String[] args) {
    // 代码生成器
    AutoGenerator mpg = new AutoGenerator();
    // 全局配置
    GlobalConfig gc = new GlobalConfig();
    String projectPath = System.getProperty("user.dir");
    gc.setOutputDir(projectPath + "/src/main/java");
    gc.setAuthor("kning");
    gc.setOpen(false);
    gc.setSwagger2(true);
    gc.setIdType(IdType.AUTO);
    gc.setBaseResultMap(true);
    mpg.setGlobalConfig(gc);

    //达梦数据库的配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setDbType(DbType.DM);
    dsc.setSchemaName("SYSDBA");
    dsc.setUrl("");
    dsc.setDriverName("dm.jdbc.driver.DmDriver");
    dsc.setUsername("");
    dsc.setPassword("");
    mpg.setDataSource(dsc);

    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setModuleName(scanner("模块名"));
    pc.setParent("com.example");
    mpg.setPackageInfo(pc);

    // 自定义配置
    InjectionConfig cfg = new InjectionConfig() {
      @Override
      public void initMap() {
        // to do nothing
      }
    };
    List<FileOutConfig> focList = new ArrayList<>();
    focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
      @Override
      public String outputFile(TableInfo tableInfo) {
        // 自定义输入文件名称
        return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
            + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
      }
    });
    cfg.setFileOutConfigList(focList);
    mpg.setCfg(cfg);
    mpg.setTemplate(new TemplateConfig().setXml(null));

		// 策略配置
    StrategyConfig strategy = new StrategyConfig();
    strategy.setNaming(NamingStrategy.underline_to_camel);
    strategy.setColumnNaming(NamingStrategy.underline_to_camel);
    strategy.setEntityLombokModel(true);
    strategy.setInclude(scanner("表名"));
    strategy.setSuperEntityColumns("id");
    strategy.setControllerMappingHyphenStyle(true);
    strategy.setTablePrefix(pc.getModuleName() + "_");
    strategy.setEntityLombokModel(true);
    mpg.setStrategy(strategy);
    // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
    mpg.setTemplateEngine(new FreemarkerTemplateEngine());
    mpg.execute();
  }
}

Mybatis-plus生成代码

首先我们在数据库里创建一张表,就叫教师(teacher)表好了。达梦数据库似乎要求表名尽量是大写的。

然后插入一点数据方便测试。

运行测试类,输入模块名和表名,达梦数据库要求表名是大写的。

不出意外,我们就生成成功了。=。=不要问为什么有个students,因为自己测试用的这个。

测试一下

我们来简单写个测试类,其功能是查出教师表的所有数据,然后插入一条教师信息,然后在查一次:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class teacherTest {
  @Autowired
  private TeacherMapper teacherMapper;

  @Test
  public void teacher(){
    List<Teacher> teachers = teacherMapper.selectList(null);
    teachers.forEach(System.out::println);

    System.out.println("==================================");

    Teacher teacher = new Teacher();
    teacher.setId(6);
    teacher.setName("zhou");
    teacher.setAge(58);
    teacherMapper.insert(teacher);

    teachers = teacherMapper.selectList(null);
    teachers.forEach(System.out::println);
  }
}

=。=看样子我们成功了。

到这里,我们就成功的使用Mybatis-plus成功的生成了代码。

Mybatis-plus主键生成可能出现的问题

让我们来看看错误信息:

org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: java.sql.SQLException: 违反列[ID]非空约束
### The error may exist in com/example/demo/mapper/TeacherMapper.java (best guess)
### The error may involve com.example.demo.mapper.TeacherMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO TEACHER ( NAME, AGE ) VALUES ( ?, ? )
### Cause: java.sql.SQLException: 违反列[ID]非空约束

很显然,是主键插入时的问题。
我们看一下mybatis-plus生成的实体类。

@TableId(value = "ID", type = IdType.AUTO)
  private Integer id;

其中ID的属性设置为自动,然而如果达梦数据库建表的时候如果没有设置主键为自增。=。= 那没准就凉了。
我们看一下mybatis-plus支持哪些属性:

@Getter
public enum IdType {
  /**
   * 数据库ID自增
   */
  AUTO(0),
  /**
   * 该类型为未设置主键类型(将跟随全局)
   */
  NONE(1),
  /**
   * 用户输入ID
   * <p>该类型可以通过自己注册自动填充插件进行填充</p>
   */
  INPUT(2),

  /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
  /**
   * 全局唯一ID (idWorker)
   */
  ID_WORKER(3),
  /**
   * 全局唯一ID (UUID)
   */
  UUID(4),
  /**
   * 字符串全局唯一ID (idWorker 的字符串表示)
   */
  ID_WORKER_STR(5);

  private final int key;

  IdType(int key) {
    this.key = key;
  }
}

可以看出,解决这个问题最简单的方法就是,修改IdType,使用NONE,自己传入id(主键)。
同样的,在自动生成代码的阶段,我们曾经设置过

gc.setIdType(IdType.AUTO);

在这里更改可以直接更改自动生成的代码,甚至也可以选择UUID等方式。
当然,这样并不好,所以也可以修改数据库表,设置ID为自增。
在刚刚的teacher表中执行下面这条语句,就可以修改主键id的属性为自增了。

ALTER TABLE TEACHER ADD ID identity (1,1);

然后在运行代码,多半就成了。

到此这篇关于MyBatis-plus+达梦数据库实现自动生成代码的示例的文章就介绍到这了,更多相关MyBatis-plus 自动生成代码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用mybatis-plus-generator进行代码自动生成的方法

    为了解放程序员的双手,减少重复性代码的编写,推荐使用插件:mybatis-plus-generator 进行代码自动生成.下面我将详细介绍通过mybatis-plus-generator 插件自动生成 controller.service.mapper.serviceImpl相关代码. 项目工程目录总览如下: 1. 使用 idea 创建 maven 项目,引入相关依赖,项目pom文件如下所示: <?xml version="1.0" encoding="UTF-8&qu

  • MyBatis-plus+达梦数据库实现自动生成代码的示例

    先说点什么 mybatis-plus是一款增强版的mybatis,功能强大,可以很大程度的简化开发. 然而达梦数据库比较小众,虽然官方说mybatis-plus支持达梦数据库,但是使用起来遇到了很多问题. 这篇文章主要讲如何使用mybatis-plus访问达梦数据库,并使用逆向工程自动生成代码. =.=对了 这是个使用spring boot的项目. (配置)POM文件,引入所需要的依赖 <dependencies> <dependency> <groupId>org.s

  • mybatis plus自动生成代码的示例代码

    写一个简单的mybatis plus插件自动生成代码的例子 pom.xml 添加配置 <!-- mybatis plus 插件--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>

  • mybatis-plus自动生成代码的示例代码

    一.介绍 本教程将介绍如何使用 mybatis-plus 工具自动给我们生成 Controller.Service.Entity.Mapper.Mapper.xml 层代码 要求: ① 生成的Controller类,需要继承 BaseController ② 生成的Entity 类,需要继承 BaseEntity ③ 生成的 Service,默认名称下是以 I 开头的接口, 在生成Service层代码中需要把这个 I 去掉 二.实现步骤 ① 在数据库中创建好 数据库 与 要生成代码对应的表 这里

  • 使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法

    MyBatis简介: MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 相关阅读:MyBatis入门学习教程(一)-MyBatis快速入门 使用过Mybatis的同学都知道,针对每一个项目中使用到的数据库表都需要建

  • MyBatis框架之mybatis逆向工程自动生成代码

    Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件. 逆向工程 1.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po..) 企业实际开发中,常用的逆向工程方式: 由于数据库的表生成java代码. 2.下载逆向工程 my

  • Spring和MyBatis整合自动生成代码里面text类型遇到的坑

    Spring和MyBatis整合以后,使用自动生成代码工具生成dao和mapper配置文件,生成步骤如下(以Intelli idea为例). 1.编写生成代码配置文件generatorConfig.xml. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator

  • IDEA Maven Mybatis generator 自动生成代码(实例讲解)

    IDEA Maven Mybatis generator 自动生成代码的实例讲解 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` varchar(100) NOT NULL, `username` varchar(20) DEFAULT NULL, `password` varchar(20) DEFAULT

  • Centos7 安装达梦数据库的教程

    1 准备工作 安装好Linux操作系统这里选择的是Linux 7: [root@slave1 software]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 关闭防火墙 和 Selinux: [root@slave1 software]# systemctl stop firewalld [root@slave1 software]# systemctl disable firewalld [root@slave1

  • Mybatis generator自动生成代码插件实例解析

    mybatis自动生成代码(实体类.Dao接口等)是很成熟的了,就是使用mybatis-generator插件. 它是一个开源的插件,使用maven构建最好,可以很方便的执行 插件官方简介: http://www.mybatis.org/generator/index.html 插件的GitHub地址: https://github.com/mybatis/generator 如何使用mybatis-generator插件呢?只需要三步: 1.修改pom.xml配置文件 网上大部分说法都要添加依

  • SpringBoot整合Mybatis Generator自动生成代码

    目录 1.创建SpringBoot项目 2. mybatis-generator-maven插件的配置 3. 项目结构构建 4. application.yml配置 5. generatorConfig.xml配置 7. 选择 Mybatis Generator 启动,自动在dao.entity.mapper包下生成代码 Mybatis是目前主流的ORM框架,相比于hibernate的全自动,它是半自动化需要手写sql语句.接口.实体对象,后来推出的Generator自动生成代码,可以帮我们提高

随机推荐