**
mybatis-generator的用法和配置
**
总体架构如下
mybatis_generator.properties配置如下
########Oracle数据库配置
#jdbc_url=jdbc:oracle:thin:@192.168.232.132:1521:ORCL
#jdbc_driver=oracle.jdbc.driver.OracleDriver
#jdbc_username=TEST
#jdbc_password=123456
#MySQL数据库配置
jdbc_url=jdbc:mysql://localhost:3306/db1
jdbc_driver=com.mysql.jdbc.Driver
jdbc_username=root
jdbc_password=123456
#执行:右键 Run As ---->Maven build ---->Goals:mybatis-generator:generate
#或运行main方法
#输出目录
targetProject=src/main/java
#targetProject=E:/upload
#modelPackage,sqlMapperPackage,daoMapperPackage 通常一致
modelPackage=mybatisGenerator
sqlMapperPackage=mybatisGenerator
daoMapperPackage=mybatisGenerator
#要生成的表名
tableName=T_USER
#要生成的bean文件名前缀
domainObjectName=User
generatorConfig.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>
<!--generatorConfiguration标签包含三个子标签,properties,classPathEntry,context。 注意三个子标签的顺序不能更改。 -->
<!--properties用于指定外部属性元素,最多可以配置1个。 properties标签包含resource和url两个属性,只能使用其中一个来指定properties文件。
然后可以在配置文件中通过${property}引用。 -->
<properties resource="mybatis_generator.properties" />
<!--classPathEntry标签可以配置多个,也可不配置 常见用法通过location属性指定驱动的路径。 -->
<!-- <classPathEntry location="${jdbc_driverLocation}" /> -->
<!--context标签,重要!至少配置一个,也可配置多个 context标签用于指定生成一组对象环境,数据库、生成的类型和数据库中的表等。 -->
<context id="MBG" targetRuntime="MyBatis3"
defaultModelType="conditional">
<!-- 注意以下标签的顺序:property*,plugin*,commentGenerator?,jdbcConnection, javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,
javaClientGenerator?,table+ -->
<!-- 自动生成toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<!-- 自动生成equals方法和hashcode方法 -->
<!-- <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/> -->
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
<!-- 不希望生成的注释中包含时间戳 -->
<property name="suppressDate" value="true" />
<!-- 是否 自动为每一个生成的类创建一个构造方法 -->
<property name="constructorBased" value="false" />
<!-- 注释是否添加数据表的备注信息,默认false -->
<property name="addRemarkComments" value="false" />
</commentGenerator>
<!-- 数据库连接 -->
<jdbcConnection driverClass="${jdbc_driver}"
connectionURL="${jdbc_url}" userId="${jdbc_username}"
password="${jdbc_password}">
<!-- 针对oracle数据库 -->
<property name="remarksReporting" value="true"></property>
<!-- 针对mysql数据库 -->
<!-- <property name="useInformationSchema" value="true"></property> -->
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
和 NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成model模型,对应的包,存放位置可以指定具体的路径,如/ProjectName/src,也可以使用MAVEN来自动生成 -->
<javaModelGenerator targetPackage="${modelPackage}"
targetProject="${targetProject}">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<!-- <property name="enableSubPackages" value="true" /> -->
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="true" />
<!-- 是否根据数据库字段命名 -->
<property name="useActualColumnNames" value="true" />
<!-- 是否 自动为每一个生成的类创建一个构造方法 -->
<property name="constructorBased" value="false" />
<!-- 是否合并而非覆盖已有代码 -->
<property name="mergeable" value="true"></property>
</javaModelGenerator>
<!--对应的xml mapper文件 -->
<sqlMapGenerator targetPackage="${sqlMapperPackage}"
targetProject="${targetProject}">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<!-- <property name="enableSubPackages" value="true" /> -->
</sqlMapGenerator>
<!-- 对应的dao接口 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="${daoMapperPackage}" targetProject="${targetProject}">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<!-- <property name="enableSubPackages" value="true" /> -->
</javaClientGenerator>
<!-- 表名对应生成的实体 -->
<table tableName="${tableName}"
domainObjectName="${domainObjectName}" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法, 比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
<property name="useActualColumnNames" value="false" />
</table>
</context>
</generatorConfiguration>
pom文件配置如下
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>aa</groupId>
<artifactId>MybatisGenerator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatis-generator.version>1.3.7</mybatis-generator.version>
<mysql.version>5.1.26</mysql.version>
<oracle.version>12.2.0.1</oracle.version>
<mybatis.version>3.2.4</mybatis.version> </properties>
<dependencies> <dependency> <groupId>junit</groupId>
<artifactId>junit</artifactId> <version>3.8.1</version>
<scope>test</scope> </dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version> </dependency> <!-- Oracle连接 --> <dependency> <groupId>com.github.noraui</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.version}</version> </dependency>
<!-- <dependency> --> <!-- <groupId>com.oracle</groupId> -->
<!-- <artifactId>ojdbc6</artifactId> --> <!-- <version>${oracle.version}</version> --> <!-- </dependency> -->
<!-- log4j日志 --> <dependency> <groupId>apache-log4j</groupId>
<artifactId>log4j</artifactId> <version>1.2.8</version>
</dependency>
<dependency> <groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis-generator.version}</version> </dependency>
<dependency> <groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version> </dependency>
</dependencies> <build> <finalName>mybatis-generator</finalName>
<pluginManagement> <plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis-generator.version}</version>
<!-- 数据库驱动 -->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.github.noraui</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.version}</version>
</dependency>
</dependencies>
<!-- 自动生成 -->
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<!-- 指定文件位置好像不起作用,始终默认读取src/main/resources/generatorConfig.xml文件 -->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<!--允许移动生成的文件 -->
<verbose>true</verbose>
<!--允许覆盖生成的文件 -->
<overwrite>true</overwrite>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin> </plugins> </pluginManagement> </build>
</project>
java方法(启动即可生成代码)
package mybatisGenerator;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
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;
public class MybatisGeneratorUtil {
public static void main(String[] args) throws Exception {
MybatisGeneratorUtil mg = new MybatisGeneratorUtil();
mg.generator();
}
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// File configFile = new File("src/main/resources/generatorConfig.xml");
// //指定逆向工程配置文件
File configFile = new File(
this.getClass().getClassLoader().getResource("generatorConfig.xml").getPath().replaceAll("%20", " "));
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("生成完毕>>>>>>>>>>>>>>>>>>");
}
}