一、什么是反向生成工程
反向生成工程,可以针对数据库表自动生成MyBatis执行所需要的代码,比如实体类代码、mapper.xml、mapper接口等,可以提高开发效率。
本文将介绍如何使用IDEA+Maven实施反向生成工程。
二、使用方法
1、创建Maven项目
创建好的项目目录结构如下:
2、配置Maven的pop.xml文件
下载反向工程说需要的jar包,pop.xml文件代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyBatisGenerator1</groupId>
<artifactId>MyBatisGenerator1</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>MyBatisGenerator1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--MyBatis版本-->
<mybatis-version>3.4.5</mybatis-version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis-version}</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
</dependencies>
<build>
<finalName>MyBatisGenerator1</finalName>
</build>
</project>
3、反向工程配置文件
这个配置文件就是generatorConfig.xml,里面配置了数据库的连接属性、需要反向生成的数据库表及其属性。操作步骤有:
(1)添加要生成的数据库表
(2)实体类、mapper接口Java类所在的包路径
(3)SQL语句的mapper.xml文件所在路径
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="default" targetRuntime="Mybatis3" >
<!-- optional,旨在创建class时,对注释进行控制 -->
<commentGenerator type="generator.MyCommentGenerator">
<!--<property name="suppressDate" value="true"/>-->
<!--<property name="suppressAllComments" value="true"/>-->
</commentGenerator>
<!--配置数据库连接-->
<!--<jdbcConnection-->
<!--driverClass="${jdbc.driverClass}"-->
<!--connectionURL="${jdbc.connectionURL}"-->
<!--userId="${jdbc.userId}"-->
<!--password="${jdbc.password}">-->
<!--<!– 针对oracle数据库 –>-->
<!--<!–<property name="remarksReporting" value="true"></property>–>-->
<!--<!– 针对mysql数据库 –>-->
<!--<property name="useInformationSchema" value="true"></property>-->
<!--</jdbcConnection>-->
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/testmysql"
userId="root"
password="root">
</jdbcConnection>
<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
targetPackage 指定生成的model生成所在的包名
targetProject 指定在该项目下所在的路径
-->
<javaModelGenerator targetPackage="com.charlie.ssm.demo.entity"
targetProject="src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="false"/>
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<javaClientGenerator targetPackage="com.charlie.ssm.demo.entity"
targetProject="src/main/java" type="XMLMAPPER" >
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--
指定生成的数据表
tableName:数据库表名称
domainObjectName:生成的实体类名称
mapperName:SQL语句的XML文件名称
-->
<!--<table tableName="tb_user" domainObjectName="UserEntity" mapperName="UserDao"-->
<!--enableCountByExample="false" enableUpdateByExample="false"-->
<!--enableDeleteByExample="false" enableSelectByExample="false"-->
<!--selectByExampleQueryId="false">-->
<!--</table>-->
<table tableName="tb_user" domainObjectName="UserEntity" mapperName="UserDao"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
4、运行程序生成代码
运行MainGenerator的main方法,就可运行反向工程,注意反向工程的配置文件路径要正确。
运行代码如下:
/**
* 运行此方法重新生成mybatis相关的文件,慎用
* 运行之后会覆盖com.dao 以及com.entity的类,但是对应的mapper/*.xml中的数据库操作
*/
public class MainGenerator {
/**
* MyBatis反向生成工程
* @param args
*/
public static void main(String[] args) {
try {
System.out.println("MyBatis反向生成");
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
//配置文件
File configFile = new
File("./src/main/resources/generator/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);
System.out.println("执行完毕");
} catch (Exception e) {
e.printStackTrace();
}
}
}