⭐⭐⭐⭐⭐最最最最最重要的事情:
我自己總結的Java學習的系統知識點以及面試問題,目前已經開源,會一直完善下去,歡迎建議和指導歡迎Star:
https://github.com/Snailclimb/Java-Guide我的Gitchat: 從應屆程式員角度分析如何備戰大廠面試
前言
最近做的項目(
SSM+Shiro
)的資料庫表已經建立完成,一共有15張表,如果我們一個個去寫
pojo/bean
的代碼以及各種sql語句的話未免太過麻煩而且很容易出錯,這個時候我們就需要
MyBatis
逆向工程去為我們生成這些基本的東西。
先來簡單的了解一下什麼是逆向工程。
一 什麼是逆向工程
官網解釋濃縮版:
MyBatis
逆向工程需要用到的就是MyBatis官方提供的
MyBatis Generator(MBG)
。
MBG
是
MyBatis
和
iBATIS
的代碼生成器,它将為所有版本的
MyBati
s以及版本2.2.0之後的
iBATIS
版本生成代碼。
MBG
對簡單
CRUD(增删改查
)的大部分資料庫操作産生重大影響。但是您仍然需要為連接配接查詢或存儲過程手動編寫SQL和對象代碼。
簡要概括版:
建立好資料庫表之後,
MBG
可以根據資料庫表自動為您生成
pojo類
、
example類(用于添加條件,相當where語句後面的部分 )
mapper檔案
關于Mapper接口以及Example的執行個體的講解可以檢視這一篇文章:《Mapper接口以及Example的執行個體》
https://blog.csdn.net/biandous/article/details/65630783介紹完逆向工程是個什麼東西後,接下來我們就要開始學習如何使用它了?
二 使用MyBatis逆向工程
考慮到大家的基礎可能不同,是以我盡可能詳細一點。
2.1 建立Maven項目并添加相關依賴
1.建立Maven項目(普通的Java項目):
2.添加相關依賴(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>mybatis-generator</groupId>
<artifactId>sql-mapper</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sql-mapper</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--log4j -->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--MyBatis Generator -->
<!-- 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>
<!--mysql-connector-java -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
</project>
2.2 項目建立完成之後的目錄結構
2.3 MyBatis逆向工程代碼編寫
核心代碼官網已經給出,位址為:
http://www.mybatis.org/generator/running/runningWithJava.html核心代碼示例(推薦讀取xml配置檔案的形式,還有一種基于Java的配置這裡就不做示範):
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//讀取xml配置檔案,推薦使用這種方式
File configFile = new File("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);
本項目中使用代碼MyBatisGeneratorApp.java:
public class MyBatisGeneratorApp {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置檔案
File configFile = new File("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 {
MyBatisGeneratorApp generatorSqlmap = new MyBatisGeneratorApp();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.4 MyBatis逆向工程配置檔案以及log4j配置檔案編寫
MyBatis GeneratorXML參考配置檔案官網已經給出,位址為:
http://www.mybatis.org/generator/configreference/xmlconfig.htmlMyBatis逆向工程配置檔案如下(注釋已經解釋的很詳細了,我這裡就不多做解釋了):
<?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>
<!--資料庫連接配接的資訊:驅動類、連接配接位址、使用者名、密碼 ,加上“useSSL=false”是因為我SSL連接配接資料庫出現了錯誤 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/kpi_project?useSSL=false"
userId="root" password="xxx">
</jdbcConnection>
<!-- 預設false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL
和 NUMERIC 類型解析為java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成pojo類的位置 -->
<javaModelGenerator targetPackage="pojo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
<!-- 從資料庫傳回的值被清理前後的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射檔案生成的位置 -->
<sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\java">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="mapper" targetProject=".\src\main\java">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定資料庫表 -->
<table schema="" tableName="com_role"></table>
<table schema="" tableName="com_rule"></table>
<table schema="" tableName="kpi_assess"></table>
<table schema="" tableName="kpi_assign"></table>
<table schema="" tableName="kpi_complain"></table>
<table schema="" tableName="kpi_index"></table>
<table schema="" tableName="kpi_institute"></table>
<table schema="" tableName="kpi_peformance"></table>
<table schema="" tableName="kpi_result"></table>
<table schema="" tableName="kpi_score"></table>
<table schema="" tableName="sys_permission"></table>
<table schema="" tableName="sys_role"></table>
<table schema="" tableName="sys_role_perm"></table>
<table schema="" tableName="sys_user"></table>
<table schema="" tableName="sys_user_role"></table>
</context>
</generatorConfiguration>
我的log4j的配置檔案如下:
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
2.5 運作結果
pojo及example類:
mapper接口及mapper.xml:
我們已經介紹了MyBatis逆向工程以及它的使用,下面我們簡單的總結與補充一下所學的知識。
三 總結
- 什麼是逆向工程?
MBG
可以根據資料庫表自動為您生成
pojo類
、
example類(用于添加條件,相當where語句後面的部分 )
、
mapper檔案`。
- 如何使用逆向工程?
pom檔案(添加相關jar包)->逆向工程核心代碼編寫->建立generatorConfig.xml配置檔案(可以加上log4j日志列印配置檔案)
如果你覺得我的文章對你有幫助話,歡迎關注我的微信公衆号:"Java面試通關手冊"(一個有溫度的微信公衆号,無廣告,單純技術分享,期待與你共同進步~~~堅持原創,分享美文,分享各種Java學習資源。)