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

先说点什么

mybatis-plus是一款增强版的mybatis,功能强大,可以很大程度的简化开发。

然而达梦数据库比较小众,虽然官方说mybatis-plus支持达梦数据库,但是使用起来遇到了很多问题。

这篇文章主要讲如何使用mybatis-plus访问达梦数据库,并使用逆向工程自动生成代码。

=。=对了 这是个使用spring boot的项目。

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

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

org.springframework.boot

spring-boot-starter-jdbc

org.projectlombok

lombok

true

io.springfox

springfox-swagger2

2.7.0

io.springfox

springfox-swagger-ui

2.7.0

com.baomidou

mybatis-plus-boot-starter

3.2.0

com.baomidou

mybatis-plus-generator

3.2.0

org.freemarker

freemarker

2.3.29

junit

junit

org.springframework

spring-test

5.2.0.RELEASE

compile

org.springframework.boot

spring-boot-test

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

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

然后配置pom文件:

com.dm

Dm7JdbcDriver

1.7

system

${project.basedir}/src/lib/Dm7JdbcDriver18.jar

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

(配置)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 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 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

*

该类型可以通过自己注册自动填充插件进行填充

*/

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值