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.mapper-locations=classpath*:mappers/*.xml
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.String());
if (scanner.hasNext()) {
String ipt = ();
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 = Property("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("ample");
mpg.setPackageInfo(pc);
// ⾃定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/l.ftl") {
@Override
public String outputFile(TableInfo tableInfo) {
// ⾃定义输⼊⽂件名称
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + EntityName() + "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.ModuleName() + "_");
strategy.setEntityLombokModel(true);
mpg.setStrategy(strategy);
/
/ 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
}
}
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 ample.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 ⾃动⽣成代码内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论