开开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
利用MyBatis逆向工程技术,开发者可以很方便生成持久层需要基本内容。如pojo(entity),mapper以及maper对应的xml文件。
下面是我自己构建一个简单 MyBatis 逆向工程的过程。
1.理解逆向工程
通过已经存在物理数据库,生成在基于MyBatis开发过程中需要的部分代码。如pojo类,mapper类,基本的mapper.xml语句。
这样,在新建一个项目,或者新建一个业务数据库表时,开发者可以集中精力在业务或实际功能的开发中,不会被繁琐的配置所困扰。
(在我刚刚学习java的时候,维护的老项目需要增加新的功能,这个功能需要建新的物理表,在后面进行开发时就是全手写pojo,mapper,mapper.xml,效率及其低下)
2.准备工作
既然是逆向工程,那么肯定是一个真正的java项目。我调研了一下,目前也有一些可以在当前项目直接生成相关文件的方法,但是我个人认为,在一个业务项目中还是不要引入其他的jar包,比如mybatis-generator这种,我觉得对于业务环境是一种污染。再者,需要在当前的项目中新建generatorConfig.xml这样的配置文件,对于业务项目同样是没有必要的,万一哪个地方写错了或者后面删除无用的代码出错了,也非常的麻烦。因此,从我个人的角度而言,独立的逆向工程在实践上虽然有些繁琐,但是可取。
首先,需要基于 maven 建立一个java项目,完成基本的pom配置,此时再引入依赖。
<!-- 引入log4j日志依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
<!-- 阿里开源数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<!--pagehelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- mybatis 逆向生成工具 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
理解起来也好说,既然是跟数据库相关,肯定需要连接数据库、数据源,pagehelper 是一个开源的翻页工具,tk.mybatis 是与生成mapper有关的jar包。
3.项目结构
项目结构如图所示:
注意:
- com.bigShop 需要与正真的项目包名相同,后续方便替换;
4. generatorConfig.xml 文件配置
文字配置:
<!-- 通用mapper所在目录 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.[packageName].BaseMapper.BaseMaapper"/>
</plugin>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://[url]:3306/[databaseName]"
userId="[userId]"
password="[passwd]">
</jdbcConnection>
<!-- 对应生成的pojo所在包 -->
<javaModelGenerator targetPackage="com.[packageName].pojo" targetProject="src/main/java"/>
<!-- 对应生成的mapper所在目录 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<!-- 配置mapper对应的java映射 -->
<javaClientGenerator targetPackage="com.[packageName].mapper" targetProject="src/main/java" type="XMLMAPPER"/>
<!-- 数据库表 -->
<table tableName="tableName"></table>
</context>
5. GeneratorDisplay 主类
package com.bigShop;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class GeneratorDisplay {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorDisplay generatorSqlmap = new GeneratorDisplay();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
直接运行就完事了。