Mybatis逆向工程自动生成代码文件
Mybatis逆向工程自动生成代码文件
一般来说都会新建另外一个项目,用于生成代码文件,然后拷贝到需要的项目中。新建maven项目用于生成代码文件,项目目录如下所示:
pom.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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nhu</groupId>
<artifactId>MyMavenGenerator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
<build/>
</project>
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>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@192.168.1.196:1521:orcl"
userId="nhu_yzd"
password="123">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.nhu.po"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.nhu.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.nhu.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 有些表的字段需要指定java类型-->
<table tableName="TABCKINCOME"></table>
<table tableName="TABCKUSED"></table>
<table tableName="TABDEPTINCOME"></table>
<table tableName="TABDEPTUSED"></table>
<table tableName="TABPRODUCTS"></table>
<table tableName="TABPRODUCTSTYPE"></table>
<table tableName="TABUNIT"></table>
<table tableName="TABUSERS"></table>
</context>
</generatorConfiguration>
log4j.properties中的配置如下所示:
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014
\u7248\u6743\u58F0\u660E\uFF1A\u672C\u6587\u4E3ACSDN\u535A\u4E3B\u300CJokerZhan\u300D\u7684\u539F\u521B\u6587\u7AE0\uFF0C\u9075\u5FAA CC 4.0 BY-SA \u7248\u6743\u534F\u8BAE\uFF0C\u8F6C\u8F7D\u8BF7\u9644\u4E0A\u539F\u6587\u51FA\u5904\u94FE\u63A5\u53CA\u672C\u58F0\u660E\u3002
\u539F\u6587\u94FE\u63A5\uFF1Ahttps://blog.csdn.net/JokerZhan/article/details/82942488
在com.nhu.main中新建一个java类:GeneratorMain.java 用于生成配置自动生成代码:
package com.nhu.main;
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 GeneratorMain {
public void generator() throws Exception {
//warnings为用于放置生成过程中警告信息的集合对象
List<String> warnings = new ArrayList<String>();
//指定是否覆盖重名文件
boolean overwrite = true;
// 指定配置文件
File configFile = new File("generatorConfig.xml");
//配置解析类
ConfigurationParser cp = new ConfigurationParser(warnings);
//配置解析类解析配置文件并生成Configuration 配置对象
Configuration config = cp.parseConfiguration(configFile);
//负责如何处理重复文件
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//逆向工程对象
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行逆向文件生成操作
myBatisGenerator.generate(null);
}
// 执行main方法以生成代码
public static void main(String[] args) {
try {
GeneratorMain generatorSqlmap = new GeneratorMain();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行上图代码后,F5刷新项目便可以看到自动生成的代码文件:
将自动生成的代码文件拷贝到需要的项目中即可。
注意:在oracle数据库中是不分大小写的,如果要区分必须要加上引号。用Navicat的可视化界面进行新增的表会自动在表名上加上引号,如 "TabUser" 。这会导致mybatis无法识别表名,从而无法进行逆向工程操作。建议在oracle中建表和表字段时,手动写create语句,并且全部用大写并且不加引号。