新建一個工程
我們要新建一個java工程,這個工程專門用來使用逆向工程生成代碼的。
因爲在原來的工程中生成,但是有風險,因爲 MyBatis 是根據配置文件來生成的,如果生成的路徑中有相同的文件,那麼就會覆蓋原來的文件,這樣會有風險。
所以開發中一般都會新建一個 java 工程來生成,然後將生成的文件拷貝到自己的工程中,這也不麻煩,而且很安全。
項目結構如下:
導入所需的 jar 包
我這裏用的 maven ,依賴如下,數據庫驅動找自己對應的版本,可以自己弄個 lib 包,將他們的 jar 包放進去:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</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>
添加配置文件
配置文件的路徑可以在項目結構中看到,內容如下:
<?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>
<!--數據庫驅動-->
<!--
如果IDE(eclipse或者idea) 項目裏導入了jar包,那麼就不需要配置了jar包的絕對路徑了
<classPathEntry location="e:/project/mybatis/lib/mysql-connector-java-5.0.8-bin.jar"/>
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
</commentGenerator>
<!--數據庫鏈接地址賬號密碼-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/Blog?useSSL=false&serverTimezone=UTC"
userId="root"
password="root">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和
NUMERIC 類型解析爲java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成DataObject類存放位置 數據庫對應到java的類-->
<javaModelGenerator targetPackage="com.ncu.entity" targetProject="src/main/java">
<!-- enableSubPackages:是否讓schema作爲包的後綴 -->
<property name="enableSubPackages" value="true"/>
<!-- 從數據庫返回的值被清理前後的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="Mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成Dao類存放位置-->
<!--客戶端代碼, 生成易於使用的針對Model對象和XML配置文件的代碼
type="ANNOTATEDMAPPER", 生成Java Model和基於註解的Mapper對象
type="MIXEDMAPPER", 生成基於註解的Java Model 和相應的Mapper對象
type="XMLMAPPER", 生成SQLMap XML文件和獨立的Mapper接口
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.ncu.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 指定數據庫表 -->
<!-- 有些表的字段需要指定java類型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
<!--生成對應表及類名--> <!--table後面的方法比較累贅,一般自己編寫,用不到, 所以全部關閉-->
<table tableName="User" domainObjectName="UserDO"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<!--<property name="my.isgen.usekeys" value="true"/>-->
<!--<generatedKey column="id" sqlStatement="JDBC"/>-->
</table>
</context>
</generatorConfiguration>
需要注意,數據庫驅動的鏈接要改成自己的數據庫,其中實體類、映射文件的存放位置也要修改成自己的,即這兩個參數:targetPackage="Mapper" targetProject="src/main/resources"
,然後要對應上數據庫的表名tableName="User"
啓動函數
運行下面的函數,就能自動生成所需文件了:
public class Mybatis {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("src\\main\\resources\\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 {
Mybatis mybatis = new Mybatis();
mybatis.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}