MyBatis Eclipse外掛安裝及generatorConfig.xml配置詳解
MyBatis Generator中文文件地址:
該中文文件由於儘可能和原文內容一致,所以有些地方如果不熟悉,看中文版的文件的也會有一定的障礙,所以本章根據該中文文件以及實際應用,使用通俗的語言來講解詳細的配置。
本文使用Markdown進行編輯,但是部落格顯示效果不好,所以建議移步這裡進行閱讀
本文是作為個人籌劃的《Mybatis最佳實踐》(gitbook)其中的一節。
本文中所有節點的連結都是對應的中文文件地址,可以點選檢視詳細資訊。
下載本文件的PDF版本
注:本文後面提到的**MBG**全部指代MyBatis Generator。
後續會專門為gitbook完善此部分
在MBG中,最主要也最重要的就是XML配置檔案,因此本篇文章主要的內容就是XML配置。
這裡按照配置的順序對配置逐個講解,更細的內容可以配合中文文件參照。
1. 配置檔案頭
<?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">
使用最新版的MBG需要使用上面的xml頭,配置檔案必須包含上面的DOCTYPE
。
generatorConfiguration
節點沒有任何屬性,直接寫節點即可,如下:
<generatorConfiguration> <!-- 具體配置內容 --> </generatorConfiguration>
3. <generatorConfiguration>
子元素
從這段開始,就是配置的主要內容,這些配置都是generatorConfiguration
元素的子元素。
包含以下子元素(有嚴格的順序):
這個元素用來指定外部的屬性元素,不是必須的元素。
元素用於指定一個需要在配置中解析使用的外部屬性檔案,引入屬性檔案後,可以在配置中使用 ${property}
這種形式的引用,通過這種方式引用屬性檔案中的屬性值。
對於後面需要配置的**jdbc資訊**和targetProject
屬性會很有用。
這個屬性可以通過resource
或者url
來指定屬性檔案的位置,這兩個屬性只能使用其中一個來指定,同時出現會報錯。
-
resource
:指定**classpath**下的屬性檔案,使用類似com/myproject/generatorConfig.properties
這樣的屬性值。 -
url
:可以指定檔案系統上的特定位置,例如file:///C:/myfolder/generatorConfig.properties
這個元素可以0或多個,不受限制。
這個元素的作用是將MBG執行時需要用到的jar包(或zip格式)新增到**classpath**下。
最常見的用法是,當**classpath**下面**沒有**JDBC驅動的時候,我們通常通過這個屬性指定驅動的路徑,例如:
<classPathEntry location="E:\mysql\mysql-connector-java-5.1.29.jar"/>
如果需要用到其他的jar包,也可以這麼配置,例如如果你開發了一個MBG的外掛,你就可以通過這種方式加入到**classpath**
這裡注意上面重點強調的 沒有,一般在專案中使用的時候,**classpath**下面都有JDBC驅動,因此從專案中啟動的時候不需要配置該項。
建議:由於該引數使用了絕對路徑,因此不利用在不同電腦上通用,因此建議最好把需要的jar包放到專案的**classpath**下,避免每個人都得單獨配置路徑。
在MBG的配置中,至少需要有一個<context>
元素。
<context>
元素用於指定生成一組物件的環境。例如指定要連線的資料庫,要生成物件的型別和要處理的資料庫中的表。執行MBG的時候還可以指定要執行的<context>
。
該元素只有一個**必選屬性**id
,用來唯一確定一個<context>
元素,該id
屬性可以在執行MBG的使用。
此外還有幾個**可選屬性**:
-
defaultModelType
:**這個屬性很重要**,這個屬性定義了MBG如何生成**實體類**。
這個屬性有以下可選值:conditional
:*這是預設值*,這個模型和下面的hierarchical
類似,除了如果那個單獨的類將只包含一個欄位,將不會生成一個單獨的類。 因此,如果一個表的主鍵只有一個欄位,那麼不會為該欄位生成單獨的實體類,會將該欄位合併到基本實體類中。flat
:該模型為每一張表只生成一個實體類。這個實體類包含表中的所有欄位。**這種模型最簡單,推薦使用。**hierarchical
:如果表有主鍵,那麼該模型會產生一個單獨的主鍵實體類,如果表還有BLOB欄位, 則會為表生成一個包含所有BLOB欄位的單獨的實體類,然後為所有其他的欄位生成一個單獨的實體類。 MBG會在所有生成的實體類之間維護一個繼承關係。
-
targetRuntime
:此屬性用於指定生成的程式碼的執行時環境。該屬性支援以下可選值:MyBatis3
:*這是預設值*MyBatis3Simple
Ibatis2Java2
Ibatis2Java5
一般情況下使用預設值即可,有關這些值的具體作用以及區別請檢視中文文件的詳細內容。
-
introspectedColumnImpl
:該引數可以指定擴充套件org.mybatis.generator.api.IntrospectedColumn
該類的實現類。該屬性的作用可以檢視擴充套件MyBatis Generator。
一般情況下,我們使用如下的配置即可:
<context id="Mysql" defaultModelType="flat">
如果你希望不生成和Example
查詢有關的內容,那麼可以按照如下進行配置:
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
使用MyBatis3Simple
可以避免在後面的<table>
中逐個進行配置(後面會提到)。
MBG配置中的其他幾個元素,基本上都是<context>
的子元素,這些子元素(有嚴格的配置順序)包括:
其中<property>
屬性比較特殊,後面講解的時候都會和父元素一起進行講解。在講解<property>
屬性前,我們先看看**什麼是分隔符?**。
這裡通過一個例子說明。假設在Mysql資料庫中有一個表名為user
info
,你沒有看錯,中間是一個空格,這種情況下如果寫出select
* from user info
這樣的語句,肯定是要報錯的,在Mysql中的時候我們一般會寫成如下的樣子:
select * from `user info`
這裡的使用的**反單引號(`)**就是**分隔符**,**分隔符**可以用於**表名**或者**列名**。
下面繼續看<property>
支援的屬性:
autoDelimitKeywords
beginningDelimiter
endingDelimiter
javaFileEncoding
javaFormatter
xmlFormatter
由於這些屬性比較重要,這裡一一講解。
首先是autoDelimitKeywords
,當表名或者欄位名為SQL關鍵字的時候,可以設定該屬性為true,MBG會自動給表名或欄位名新增**分隔符**。
然後這裡繼續上面的例子來講beginningDelimiter
和endingDelimiter
屬性。
由於beginningDelimiter
和endingDelimiter
的預設值為雙引號("
),在Mysql中不能這麼寫,所以還要將這兩個預設值改為**反單引號(`)**,配置如下:
<property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/>
屬性javaFileEncoding
設定要使用的Java檔案的編碼,預設使用當前平臺的編碼,只有當生產的編碼需要特殊指定時才需要使用,一般用不到。
最後兩個javaFormatter
和xmlFormatter
屬性**可能會**很有用,如果你想使用模板來定製生成的java檔案和xml檔案的樣式,你可以通過指定這兩個屬性的值來實現。
接下來分節對其他的子元素逐個進行介紹。
該元素可以配置0個或者多個,不受限制。
<plugin>
元素用來定義一個外掛。外掛用於擴充套件或修改通過MyBatis
Generator (MBG)程式碼生成器生成的程式碼。
外掛將按在配置中配置的順序執行。
該元素最多可以配置1個。
這個元素非常有用,相信很多人都有過這樣的需求,就是希望MBG生成的程式碼中可以包含**註釋資訊**,具體就是生成表或欄位的備註資訊。
使用這個元素就能很簡單的實現我們想要的功能。這裡先介紹該元素,介紹完後會舉例如何擴充套件實現該功能。
該元素有一個可選屬性type
,可以指定使用者的實現類,該類需要實現org.mybatis.generator.api.CommentGenerator
介面。而且必有一個預設的構造方法。這個屬性接收預設的特殊值DEFAULT
,會使用預設的實現類org.mybatis.generator.internal.DefaultCommentGenerator
。
預設的實現類中提供了兩個可選屬性,需要通過<property>
屬性進行配置。
suppressAllComments
:**阻止**生成註釋,預設為false
suppressDate
:**阻止**生成的註釋包含時間戳,預設為false
一般情況下由於MBG生成的註釋資訊沒有任何價值,而且有時間戳的情況下每次生成的註釋都不一樣,使用**版本控制**的時候每次都會提交,因而一般情況下我們都會遮蔽註釋資訊,可以如下配置:
<commentGenerator> <property name="suppressAllComments" value="true"/> <property name="suppressDate" value="true"/> </commentGenerator>
接下來我們簡單舉例實現生成包含表字段註釋資訊的註釋
因為系統提供了一個預設的實現類,所以對我們來說,自己實現一個會很容易,最簡單的方法就是複製預設實現類程式碼到一個新的檔案中,修改類名如MyCommentGenerator
,在你自己的實現類中,你可以選擇是否繼續支援上面的兩個屬性,你還可以增加對其他屬性的支援。
我們通過下面一個方法的修改來了解,其他幾個方法請自行修改(寫本章的時候我也沒有完全實現該類,所以不提供完整原始碼了):
@Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (introspectedColumn.getRemarks() != null && !introspectedColumn.getRemarks().equals("")) { field.addJavaDocLine("/**"); field.addJavaDocLine(" * " + introspectedColumn.getRemarks()); addJavadocTag(field, false); field.addJavaDocLine(" */"); } }
這個方法是給欄位添加註釋資訊的,其中IntrospectedColumn
包含了欄位的完整資訊,通過getRemarks
方法可以獲取欄位的註釋資訊。上面這個方法修改起來還是很容易的。除了欄位的註釋外還有Getter
和Setter
,以及類的註釋。此外還有生成XML的註釋,大家可以根據預設的實現進行修改。
完成我們自己的實現類後,我們還需要做如下配置:
<commentGenerator type="com.github.abel533.mybatis.generator.MyCommentGenerator"/>
<jdbcConnection>
用於指定資料庫連線資訊,該元素必選,並且只能有一個。
配置該元素只需要注意如果JDBC驅動不在**classpath**下,就需要通過<classPathEntry>
元素引入jar包,這裡**推薦**將jar包放到**classpath**下。
該元素有兩個必選屬性:
driverClass
:訪問資料庫的JDBC驅動程式的完全限定類名connectionURL
:訪問資料庫的JDBC連線URL
該元素還有兩個可選屬性:
userId
:訪問資料庫的使用者IDpassword
:訪問資料庫的密碼
此外該元素還可以接受多個<property>
子元素,這裡配置的<property>
屬性都會新增到JDBC驅動的屬性中。
這個元素配置起來最容易,這裡舉個簡單例子:
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password=""> </jdbcConnection>
該元素最多可以配置一個。
這個元素的配置用來指定JDBC型別和Java型別如何轉換。
該元素提供了一個可選的屬性type
,和<commentGenerator>
比較型別,提供了預設的實現DEFAULT
,一般情況下使用預設即可,需要特殊處理的情況可以通過其他元素配置來解決,不建議修改該屬性。
該屬性還有一個可以配置的<property>
元素。
可以配置的屬性為forceBigDecimals
,該屬性可以控制是否強制DECIMAL
和NUMERIC
型別的欄位轉換為Java型別的java.math.BigDecimal
,預設值為false
,一般不需要配置。
預設情況下的轉換規則為:
- 如果
精度>0
或者長度>18
,就會使用java.math.BigDecimal
- 如果
精度=0
並且10<=長度<=18
,就會使用java.lang.Long
- 如果
精度=0
並且相關推薦
MyBatis Eclipse外掛安裝及generatorConfig.xml配置詳解
MyBatis Generator中文文件地址: 該中文文件由於儘可能和原文內容一致,所以有些地方如果不熟悉,看中文版的文件的也會有一定的障礙,所以本章根據該中文文件以及實際應用,使用通俗的語言來講解詳細的配置。 本文使用Markdown進行編輯,但是部落格顯示效果不好,所以建議移
Mybatis關聯查詢之一對多XML配置詳解
但是有些地方沒有解釋詳細,自己研究了一會,決定將之詳細化 首先是有兩張表,頭行結構。相當於是一張老師表一張學生表。 邏輯結構就是一個老師有多個學生,我們在查詢的時候想要的結果是查出所有的老師的
windows下 hadoop2.4.0 eclipse 外掛安裝及配置
一、環境說明 hadoop 版本:2.4.0 hadoop 安裝環境:centos6 centos主機IP地址:192.168.0.207 eclipse版本:Luna eclipse 安裝環境:windows10
MyBatis Eclipse外掛安裝
MyBatis Generator中文文件地址: 該中文文件由於儘可能和原文內容一致,所以有些地方如果不熟悉,看中文版的文件的也會有一定的障礙,所以本章根據該中文文件以及實際應用,使用通俗的語言來講解詳細的配置。 本文使用Markdown進行編輯,但是部落格顯示效果不好,所以建議移步這裡進行閱
eclipse的安裝及tomcat的配置
eclipse (整合開發環境) Eclipse 是一個開放原始碼的、基於Java的可擴充套件開發平臺。就其本身而言,它只是一個框架和一組服務,用於通過外掛元件構建開發環境。幸運的是,Eclipse 附帶了一個標準的外掛集,包括Java開發工具(Java De
Mybatis關聯查詢之一對多和多對一XML配置詳解
平時在開發過程中dao、bean和XML檔案都是自動生成的,很少寫XML的配置關係,今天記錄一下mybatis的關聯查詢中的多對一和一對多的情況。 首先是有兩張表(學生表Student和老師Teacher表),為了更易懂,這裡只設置了最簡單的幾個必要欄位。表結構如下圖
mybatis之mybatis-config.xml 配置詳解
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-con
log4j.xml配置詳解及log4j日誌使用詳解
log4j 有兩種配置方法,大家熟知的是properties檔案但是最近的專案實施中,每次去使用者那裡裝系統,都要苦惱於log檔案放在不同位置,要改property檔案就要重打jar包,麻煩的緊。而如果採用 xml配置的方法,直接放在WEB-INFO下,要修改路徑,很方便。查
mybatis-generator包的generatorConfig.xml檔案詳解
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Co
Tomcat Service.xml配置詳解及優化
Service.xml Server.xml配置檔案用於對整個容器進行相關的配置。 <Server>元素:是整個配置檔案的根元素。表示整個Catalina容器。 屬性: className:實現了org.apache.catalina.Server介面
setting.xml 配置詳解
校驗 找不到 順序 裁剪 全局 -- mls leg 觸發 文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用戶配置: ${user.home}/.m2/settings.xml note:用戶配置優先於全局配置。${user.home}
web.xml配置詳解
知識 其他 location 參數 pin systems doctype doc clu web.xml配置詳解 引文: 對於一個J2EE領域的程序員而言,基本上每天都會和web應用打交道。 什麽是web應用?最簡單的web應用什麽樣?給你一個web應用你該從何入手
Web.xml配置詳解之context-param
ltr 完成 數據庫 數據 鍵值對 art str htm 方法 轉自:http://blog.csdn.net/liaoxiaohua1981/article/details/6759206 格式定義: [html] view plaincopy
SpringMVC原理及非註解配置詳解
ges 控制器 sof 靈活 size 實現 query -c requests 1. Spring介紹 Spring MVC是Spring提供的一個強大而靈活的web框架。借助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡單
tomcat中server.xml配置詳解
連接超時 兩個 數據大小 value soc 訪客 ace sed 器) Tomcat Server的結構圖如下:該文件描述了如何啟動Tomcat Server。 <Server port="8005" shutdown="SHUTDOWN"> &
tomcat中server.xml配置詳解(轉載)(一)
重要 lis 結構 更多 tle 處理請求 服務器端 sta 設置 轉載自:https://www.cnblogs.com/starhu/p/5599773.html tomcat中server.xml配置詳解 Tomcat Server的結構圖如下:(該文件描述了如何
tomcat中server.xml配置詳解(轉載)(二)
lin power servlet容器 secure redirect tar 屬性 限制 man 轉載自:https://www.cnblogs.com/starhu/p/5599773.html 一:<Connector>元素 由Connector接口定義.
Java學習02-web.xml配置詳解
log 用戶授權 相對 lte 聯合 page int config 定制 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSche
elasticsearch簡單的安裝以及集群配置詳解
nod image acl down IE rec 外網地址 imu 集群 首先要確保有java8的環境,安裝方法如下(centos) 1 wget --no-check-certificate --no-cookies --header "Cookie: oracle
Spring 入門 web.xml配置詳解
.net .html tle spring tail pri .com http https Spring 入門 web.xml配置詳解 https://www.cnblogs.com/cczz_11/p/4363314.html https://blog.csdn.ne