Mybatis-逆向工程-利用資料庫直接生成java程式碼
1.什麼是逆向工程?
在專案開發過程中如果資料庫中表太多的話,難免會很麻煩,所以mybatis官方提供了一個逆向工程,可以針對單表自動生成mybatis執行所需要的程式碼(包括mapper.xml、mapper.java、po..)。一般在開發中,常用的逆向工程方式是通過資料庫的表生成java程式碼。
2.使用逆向工程
使用官方網站的mapper自動生成工具mybatis-generator-core-1.3.2來生成po類和mapper對映檔案。
作用:mybatis官方提供逆向工程,可以使用它通過資料庫中的表來自動生成Mapper介面和對映檔案(單表增刪改查)和Po類.
首先建立一個JavaProject專案,建立一個lib資料夾,用來存放需要帶入的jar包,然後選中所匯入的包,右鍵buildpath,新增到系統中。
匯入的jar包有:
log4j-1.2.17.jar
mybatis-3.2.7.jar
mybatis-generator-core-1.3.2.jar
mysql-connector-java-5.1.7-bin.jar
結構如圖所示:
- 第一步:mapper生成配置檔案:
直接在專案下建立逆向工程的配置檔案generator.xml,其中配置mapper生成的詳細資訊,注意改以下幾點:
- 1、 新增要生成的資料庫表
- 2、 po檔案所在包路徑
- 3、 mapper檔案所在包路徑
- 4、 配置當前電腦環境的資料庫資訊,包括資料庫名和密碼
generator.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="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
password="linmeng">
</jdbcConnection>
<!-- 預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true時把JDBC DECIMAL
和 NUMERIC 型別解析為java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO類的位置 -->
<javaModelGenerator targetPackage="cn.itheima.pojo"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
<!-- 從資料庫返回的值被清理前後的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper對映檔案生成的位置
最好是跟自己的專案包命名相同,這樣在自動生成之後即可直接使用
-->
<sqlMapGenerator targetPackage="cn.itheima.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper介面生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.itheima.mapper" targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定資料庫表 -->
<table tableName="user"></table>
<table tableName="orders"></table>
<!-- 有些表的欄位需要指定java型別 <table schema="" tableName=""> <columnOverride column=""
javaType="" /> </table> -->
</context>
</generatorConfiguration>
- 第二步:使用java類生成mapper檔案:
直接在專案下建立一個java檔案,用來按照上面的配置檔案來自動生成需要的java程式碼
例項用的是Generator.java
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 Generator {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定 逆向工程配置檔案
File configFile = new File("generator.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 {
Generator generatorSqlmap = new Generator();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
直接執行這個java檔案,然後重新整理專案,即可看到,專案下已經包含了所生成的mapper.xml檔案和pojo類程式碼。
這裡可以看出有個細節,每個po類多了一個東西,就是xxxExample.java,這個類是給使用者自定義sql使用的。
- 第三步:拷貝生成的mapper檔案到工程中指定的目錄中
逆向工程注意事項
- Mapper檔案內容不覆蓋而是追加
XXXMapper.xml檔案已經存在時,如果進行重新生成則mapper.xml檔案內容不被覆蓋而是進行內容追加,結果導致mybatis解析失敗。
解決方法:刪除原來已經生成的mapper xml檔案再進行生成。
Mybatis自動生成的po及mapper.java檔案不是內容而是直接覆蓋沒有此問題。
- Table schema問題
下邊是關於針對oracle資料庫表生成程式碼的schema問題:
Schma即資料庫模式,oracle中一個使用者對應一個schema,可以理解為使用者就是schema。
當Oralce資料庫存在多個schema可以訪問相同的表名時,使用mybatis生成該表的mapper.xml將會出現mapper.xml內容重複的問題,結果導致mybatis解析錯誤。
解決方法:在table中填寫schema,如下:<table schema="XXXX" tableName=" " >
XXXX即為一個schema的名稱,生成後將mapper.xml的schema字首批量去掉,如果不去掉當oracle使用者變更了sql語句將查詢失敗。
快捷操作方式:mapper.xml檔案中批量替換:“from XXXX.”為空
Oracle查詢物件的schema可從dba_objects中查詢,如下:
select * from dba_objects