回顧一下MyBatis逆向工程——自動生成程式碼

SnailClimb發表於2018-07-10

⭐⭐⭐⭐⭐最最最最最重要的事情:

我自己總結的Java學習的系統知識點以及面試問題,目前已經開源,會一直完善下去,歡迎建議和指導歡迎Star: github.com/Snailclimb/…

????我的Gitchat:從應屆程式設計師角度分析如何備戰大廠面試

前言

最近做的專案(SSM+Shiro)的資料庫表已經建立完成,一共有15張表,如果我們一個個去寫pojo/bean的程式碼以及各種sql語句的話未免太過麻煩而且很容易出錯,這個時候我們就需要MyBatis逆向工程去為我們生成這些基本的東西。

先來簡單的瞭解一下什麼是逆向工程。

一 什麼是逆向工程

官網解釋濃縮版

MyBatis逆向工程需要用到的就是MyBatis官方提供的MyBatis Generator(MBG)MBGMyBatisiBATIS的程式碼生成器,它將為所有版本的MyBatis以及版本2.2.0之後的iBATIS版本生成程式碼。MBG對簡單CRUD(增刪改查)的大部分資料庫操作產生重大影響。但是您仍然需要為連線查詢或儲存過程手動編寫SQL和物件程式碼。

簡要概括版:

建立好資料庫表之後,MBG可以根據資料庫表自動為您生成pojo類example類(用於新增條件,相當where語句後面的部分 )mapper檔案

關於Mapper介面以及Example的例項的講解可以檢視這一篇文章:《Mapper介面以及Example的例項》 blog.csdn.net/biandous/ar…

介紹完逆向工程是個什麼東西后,接下來我們就要開始學習如何使用它了?

二 使用MyBatis逆向工程

考慮到大家的基礎可能不同,所以我儘可能詳細一點。

2.1 新建Maven專案並新增相關依賴

1.新建Maven專案(普通的Java專案):

新建Maven專案

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逆向工程程式碼編寫

核心程式碼官網已經給出,地址為:www.mybatis.org/generator/r…

核心程式碼示例(推薦讀取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參考配置檔案官網已經給出,地址為:www.mybatis.org/generator/c…

MyBatis逆向工程配置檔案如下(註釋已經解釋的很詳細了,我這裡就不多做解釋了):

<?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類:

pojo及example類

mapper介面及mapper.xml:

mapper介面及mapper.xml

我們已經介紹了MyBatis逆向工程以及它的使用,下面我們簡單的總結與補充一下所學的知識。

三 總結

  • 什麼是逆向工程?

    MBG可以根據資料庫表自動為您生成pojo類example類(用於新增條件,相當where語句後面的部分 )mapper檔案`。

  • 如何使用逆向工程?

    pom檔案(新增相關jar包)->逆向工程核心程式碼編寫->建立generatorConfig.xml配置檔案(可以加上log4j日誌列印配置檔案)

如果你覺得我的文章對你有幫助話,歡迎關注我的微信公眾號:"Java面試通關手冊"(一個有溫度的微信公眾號,無廣告,單純技術分享,期待與你共同進步~~~堅持原創,分享美文,分享各種Java學習資源。)

回顧一下MyBatis逆向工程——自動生成程式碼

相關文章