一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - mybatis-generator自動生成dao、mapping、bean配置操作

mybatis-generator自動生成dao、mapping、bean配置操作

2020-08-27 14:25S1ow Java教程

這篇文章主要介紹了mybatis-generator自動生成dao、mapping、bean配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
<?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>
<!-- 可以用于加載配置項或者配置文件,在整個配置文件中就可以使用${propertyKey}的方式來引用配置項
  resource:配置資源加載地址,使用resource,MBG從classpath開始找,比如com/myproject/generatorConfig.properties   
  url:配置資源加載地質,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties.
  注意,兩個屬性只能選址一個;
  另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定義的properties都可以直接在generatorConfig.xml中使用
<properties resource="" url="" />
 -->
 
 <!-- 在MBG工作的時候,需要額外加載的依賴包
   location屬性指明加載jar/zip包的全路徑
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
 -->
 
<!--
  context:生成一組對象的環境
  id:必選,上下文id,用于在生成錯誤時提示
  defaultModelType:指定生成對象的樣式
    1,conditional:類似hierarchical;
    2,flat:所有內容(主鍵,blob)等全部生成在一個對象中;
    3,hierarchical:主鍵生成一個XXKey對象(key class),Blob等單獨生成一個對象,其他簡單屬性在一個對象中(record class)
  targetRuntime:
    1,MyBatis3:默認的值,生成基于MyBatis3.x以上版本的內容,包括XXXBySample;
    2,MyBatis3Simple:類似MyBatis3,只是不生成XXXBySample;
  introspectedColumnImpl:類全限定名,用于擴展MBG
-->
<context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple" >
 
  <!-- 自動識別數據庫關鍵字,默認false,如果設置為true,根據SqlReservedWords中定義的關鍵字列表;
    一般保留默認值,遇到數據庫關鍵字(Java關鍵字),使用columnOverride覆蓋
   -->
  <property name="autoDelimitKeywords" value="false"/>
  <!-- 生成的Java文件的編碼 -->
  <property name="javaFileEncoding" value="UTF-8"/>
  <!-- 格式化java代碼 -->
  <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
  <!-- 格式化XML代碼 -->
  <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
 
  <!-- beginningDelimiter和endingDelimiter:指明數據庫的用于標記數據庫對象名的符號,比如ORACLE就是雙引號,MYSQL默認是`反引號; -->
  <property name="beginningDelimiter" value="`"/>
  <property name="endingDelimiter" value="`"/>
 
  <!-- 必須要有的,使用這個配置鏈接數據庫
    @TODO:是否可以擴展
   -->
  <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql:///pss" userId="root" password="admin">
    <!-- 這里面可以設置property屬性,每一個property屬性都設置到配置的Driver上 -->
  </jdbcConnection>
 
  <!-- java類型處理器
    用于處理DB中的類型到Java中的類型,默認使用JavaTypeResolverDefaultImpl;
    注意一點,默認會先嘗試使用Integer,Long,Short等來對應DECIMAL和 NUMERIC數據類型;
  -->
  <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
    <!--
      true:使用BigDecimal對應DECIMAL和 NUMERIC數據類型
      false:默認,
        scale>0;length>18:使用BigDecimal;
        scale=0;length[10,18]:使用Long;
        scale=0;length[5,9]:使用Integer;
        scale=0;length<5:使用Short;
     -->
    <property name="forceBigDecimals" value="false"/>
  </javaTypeResolver>
 
 
  <!-- java模型創建器,是必須要的元素
    負責:1,key類(見context的defaultModelType);2,java類;3,查詢類
    targetPackage:生成的類要放的包,真實的包受enableSubPackages屬性控制;
    targetProject:目標項目,指定一個存在的目錄下,生成的內容會放到指定目錄中,如果目錄不存在,MBG不會自動建目錄
   -->
  <javaModelGenerator targetPackage="com._520it.mybatis.domain" targetProject="src/main/java">
    <!-- for MyBatis3/MyBatis3Simple
      自動為每一個生成的類創建一個構造方法,構造方法包含了所有的field;而不是使用setter;
     -->
    <property name="constructorBased" value="false"/>
 
    <!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認為false -->
    <property name="enableSubPackages" value="true"/>
 
    <!-- for MyBatis3 / MyBatis3Simple
      是否創建一個不可變的類,如果為true,
      那么MBG會創建一個沒有setter方法的類,取而代之的是類似constructorBased的類
     -->
    <property name="immutable" value="false"/>
 
    <!-- 設置一個根對象,
      如果設置了這個根對象,那么生成的keyClass或者recordClass會繼承這個類;在Table的rootClass屬性中可以覆蓋該選項
      注意:如果在key class或者record class中有root class相同的屬性,MBG就不會重新生成這些屬性了,包括:
        1,屬性名相同,類型相同,有相同的getter/setter方法;
     -->
    <property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/>
 
    <!-- 設置是否在getter方法中,對String類型字段調用trim()方法 -->
    <property name="trimStrings" value="true"/>
  </javaModelGenerator>
 
 
  <!-- 生成SQL map的XML文件生成器,
    注意,在Mybatis3之后,我們可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
      或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的話,這個元素就必須配置
    targetPackage/targetProject:同javaModelGenerator
   -->
  <sqlMapGenerator targetPackage="com._520it.mybatis.mapper" targetProject="src/main/resources">
    <!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認為false -->
    <property name="enableSubPackages" value="true"/>
  </sqlMapGenerator>
 
 
  <!-- 對于mybatis來說,即生成Mapper接口,注意,如果沒有配置該元素,那么默認不會生成Mapper接口
    targetPackage/targetProject:同javaModelGenerator
    type:選擇怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
      1,ANNOTATEDMAPPER:會生成使用Mapper接口+Annotation的方式創建(SQL生成在annotation中),不會生成對應的XML;
      2,MIXEDMAPPER:使用混合配置,會生成Mapper接口,并適當添加合適的Annotation,但是XML會生成在XML中;
      3,XMLMAPPER:會生成Mapper接口,接口完全依賴XML;
    注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
  -->
  <javaClientGenerator targetPackage="com._520it.mybatis.mapper" type="ANNOTATEDMAPPER" targetProject="src/main/java">
    <!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認為false -->
    <property name="enableSubPackages" value="true"/>
 
    <!-- 可以為所有生成的接口添加一個父接口,但是MBG只負責生成,不負責檢查
    <property name="rootInterface" value=""/>
     -->
  </javaClientGenerator>
 
  <!-- 選擇一個table來生成相關文件,可以有一個或多個table,必須要有table元素
    選擇的table會生成一下文件:
    1,SQL map文件
    2,生成一個主鍵類;
    3,除了BLOB和主鍵的其他字段的類;
    4,包含BLOB的類;
    5,一個用戶生成動態查詢的條件類(selectByExample, deleteByExample),可選;
    6,Mapper接口(可選)
    tableName(必要):要生成對象的表名;
    注意:大小寫敏感問題。正常情況下,MBG會自動的去識別數據庫標識符的大小寫敏感度,在一般情況下,MBG會
      根據設置的schema,catalog或tablename去查詢數據表,按照下面的流程:
      1,如果schema,catalog或tablename中有空格,那么設置的是什么格式,就精確的使用指定的大小寫格式去查詢;
      2,否則,如果數據庫的標識符使用大寫的,那么MBG自動把表名變成大寫再查找;
      3,否則,如果數據庫的標識符使用小寫的,那么MBG自動把表名變成小寫再查找;
      4,否則,使用指定的大小寫格式查詢;
    另外的,如果在創建表的時候,使用的""把數據庫對象規定大小寫,就算數據庫標識符是使用的大寫,在這種情況下也會使用給定的大小寫來創建表名;
    這個時候,請設置delimitIdentifiers="true"即可保留大小寫格式;
    可選:
    1,schema:數據庫的schema;
    2,catalog:數據庫的catalog;
    3,alias:為數據表設置的別名,如果設置了alias,那么生成的所有的SELECT SQL語句中,列名會變成:alias_actualColumnName
    4,domainObjectName:生成的domain類的名字,如果不設置,直接使用表名作為domain類的名字;可以設置為somepck.domainName,那么會自動把domainName類再放到somepck包里面;
    5,enableInsert(默認true):指定是否生成insert語句;
    6,enableSelectByPrimaryKey(默認true):指定是否生成按照主鍵查詢對象的語句(就是getById或get);
    7,enableSelectByExample(默認true):MyBatis3Simple為false,指定是否生成動態查詢語句;
    8,enableUpdateByPrimaryKey(默認true):指定是否生成按照主鍵修改對象的語句(即update);
    9,enableDeleteByPrimaryKey(默認true):指定是否生成按照主鍵刪除對象的語句(即delete);
    10,enableDeleteByExample(默認true):MyBatis3Simple為false,指定是否生成動態刪除語句;
    11,enableCountByExample(默認true):MyBatis3Simple為false,指定是否生成動態查詢總條數語句(用于分頁的總條數查詢);
    12,enableUpdateByExample(默認true):MyBatis3Simple為false,指定是否生成動態修改語句(只修改對象中不為空的屬性);
    13,modelType:參考context元素的defaultModelType,相當于覆蓋;
    14,delimitIdentifiers:參考tableName的解釋,注意,默認的delimitIdentifiers是雙引號,如果類似MYSQL這樣的數據庫,使用的是`(反引號,那么還需要設置context的beginningDelimiter和endingDelimiter屬性)
    15,delimitAllColumns:設置是否所有生成的SQL中的列名都使用標識符引起來。默認為false,delimitIdentifiers參考context的屬性
    注意,table里面很多參數都是對javaModelGenerator,context等元素的默認屬性的一個復寫;
   -->
  <table tableName="userinfo" >
 
    <!-- 參考 javaModelGenerator 的 constructorBased屬性-->
    <property name="constructorBased" value="false"/>
 
    <!-- 默認為false,如果設置為true,在生成的SQL中,table名字不會加上catalog或schema; -->
    <property name="ignoreQualifiersAtRuntime" value="false"/>
 
    <!-- 參考 javaModelGenerator 的 immutable 屬性 -->
    <property name="immutable" value="false"/>
 
    <!-- 指定是否只生成domain類,如果設置為true,只生成domain類,如果還配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 -->
    <property name="modelOnly" value="false"/>
 
    <!-- 參考 javaModelGenerator 的 rootClass 屬性
    <property name="rootClass" value=""/>
     -->
 
    <!-- 參考javaClientGenerator 的 rootInterface 屬性
    <property name="rootInterface" value=""/>
    -->
 
    <!-- 如果設置了runtimeCatalog,那么在生成的SQL中,使用該指定的catalog,而不是table元素上的catalog
    <property name="runtimeCatalog" value=""/>
    -->
 
    <!-- 如果設置了runtimeSchema,那么在生成的SQL中,使用該指定的schema,而不是table元素上的schema
    <property name="runtimeSchema" value=""/>
    -->
 
    <!-- 如果設置了runtimeTableName,那么在生成的SQL中,使用該指定的tablename,而不是table元素上的tablename
    <property name="runtimeTableName" value=""/>
    -->
 
    <!-- 注意,該屬性只針對MyBatis3Simple有用;
      如果選擇的runtime是MyBatis3Simple,那么會生成一個SelectAll方法,如果指定了selectAllOrderByClause,那么會在該SQL中添加指定的這個order條件;
     -->
    <property name="selectAllOrderByClause" value="age desc,username asc"/>
 
    <!-- 如果設置為true,生成的model類會直接使用column本身的名字,而不會再使用駝峰命名方法,比如BORN_DATE,生成的屬性名字就是BORN_DATE,而不會是bornDate -->
    <property name="useActualColumnNames" value="false"/>
 
 
    <!-- generatedKey用于生成生成主鍵的方法,
      如果設置了該元素,MBG會在生成的<insert>元素中生成一條正確的<selectKey>元素,該元素可選
      column:主鍵的列名;
      sqlStatement:要生成的selectKey語句,有以下可選項:
        Cloudscape:相當于selectKey的SQL為: VALUES IDENTITY_VAL_LOCAL()
        DB2    :相當于selectKey的SQL為: VALUES IDENTITY_VAL_LOCAL()
        DB2_MF  :相當于selectKey的SQL為:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
        Derby   :相當于selectKey的SQL為:VALUES IDENTITY_VAL_LOCAL()
        HSQLDB   :相當于selectKey的SQL為:CALL IDENTITY()
        Informix :相當于selectKey的SQL為:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1
        MySql   :相當于selectKey的SQL為:SELECT LAST_INSERT_ID()
        SqlServer :相當于selectKey的SQL為:SELECT SCOPE_IDENTITY()
        SYBASE   :相當于selectKey的SQL為:SELECT @@IDENTITY
        JDBC   :相當于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty屬性
    <generatedKey column="" sqlStatement=""/>
     -->
 
    <!--
      該元素會在根據表中列名計算對象屬性名之前先重命名列名,非常適合用于表中的列都有公用的前綴字符串的時候,
      比如列名為:CUST_ID,CUST_NAME,CUST_EMAIL,CUST_ADDRESS等;
      那么就可以設置searchString為"^CUST_",并使用空白替換,那么生成的Customer對象中的屬性名稱就不是
      custId,custName等,而是先被替換為ID,NAME,EMAIL,然后變成屬性:id,name,email;
      注意,MBG是使用java.util.regex.Matcher.replaceAll來替換searchString和replaceString的,
      如果使用了columnOverride元素,該屬性無效;
    <columnRenamingRule searchString="" replaceString=""/>
     -->
 
 
     <!-- 用來修改表中某個列的屬性,MBG會使用修改后的列來生成domain的屬性;
       column:要重新設置的列名;
       注意,一個table元素中可以有多個columnOverride元素哈~
     -->
     <columnOverride column="username">
       <!-- 使用property屬性來指定列要生成的屬性名稱 -->
       <property name="property" value="userName"/>
 
       <!-- javaType用于指定生成的domain的屬性類型,使用類型的全限定名
       <property name="javaType" value=""/>
       -->
 
       <!-- jdbcType用于指定該列的JDBC類型
       <property name="jdbcType" value=""/>
       -->
 
       <!-- typeHandler 用于指定該列使用到的TypeHandler,如果要指定,配置類型處理器的全限定名
         注意,mybatis中,不會生成到mybatis-config.xml中的typeHandler
         只會生成類似:where id = #{id,jdbcType=BIGINT,typeHandler=com._520it.mybatis.MyTypeHandler}的參數描述
       <property name="jdbcType" value=""/>
       -->
 
       <!-- 參考table元素的delimitAllColumns配置,默認為false
       <property name="delimitedColumnName" value=""/>
       -->
     </columnOverride>
 
     <!-- ignoreColumn設置一個MGB忽略的列,如果設置了改列,那么在生成的domain中,生成的SQL中,都不會有該列出現
       column:指定要忽略的列的名字;
       delimitedColumnName:參考table元素的delimitAllColumns配置,默認為false
       注意,一個table元素中可以有多個ignoreColumn元素
     <ignoreColumn column="deptId" delimitedColumnName=""/>
     -->
  </table>
 
</context>
 
</generatorConfiguration>

補充知識:Springboot整合mybatis繼承mapper接口,擴展自己的dao接口

這里主要介紹Mybatis-Generator自動生成model、mapper后,如何在已有的基礎上去擴展,寫一些比較復雜的接口以及我自己遇到的坑。

前景

依靠自己在項目上的經驗和網上查找的資料,自己搭建了springboot項目,集成mybatis后,通過測試,發現一切OK。但是mybatis自動生成的mapper里面的接口只是一些基礎的接口,所以需要去擴展它。為防止下次表如果有變動再重新生成mapper文件會造成原有的接口被覆蓋,只能自己另寫一個文件,**dao。

準備

mybatis自動生成的mapper文件我放在了com.example.mapper包底下,然后另外新建一個包com.example.dao里面放繼承mapper的文件。

mybatis-generator自動生成dao、mapping、bean配置操作

然后在里面寫自己需要的接口

mybatis-generator自動生成dao、mapping、bean配置操作

接下來就是我遇到的坑。

在resources文件夾下,找不到新建包的按鈕。所以我拷貝了別的文件夾下面的包,然后修改了一下包名(mybatis自動生成的mapper.xml的包也是拷貝的,一開始沒有任何異常)

mybatis-generator自動生成dao、mapping、bean配置操作

自動生成的包名叫mybatis.mapping,相對應userDao的包名叫mybatis.mapping.dao,寫好查詢語句后,準備測試。

mybatis-generator自動生成dao、mapping、bean配置操作

測試之前我還專門檢查了一遍,確認沒有問題。

結果報了org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

百度了一下,解決方法無非檢查命名是否有誤和一致。確認真的無誤后,還是一樣報錯。

這時候無意打開resources所在的文件夾,發現,另一個包出現問題,原本mybatis.mapping.dao應該是mybatis/mapping/dao,然后卻是有一個叫mybatis.mapping.dao的文件夾

mybatis-generator自動生成dao、mapping、bean配置操作

把它刪掉,重新在mybatis/mapping/dao下新建userDao.xml文件就可以運行了。

mybatis-generator自動生成dao、mapping、bean配置操作

以上這篇mybatis-generator自動生成dao、mapping、bean配置操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/yf275908654/article/details/49815377

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩一区二区中文字幕 | 俄罗斯13一14处出血视频在线 | 2021最新国产成人精品免费 | 俄罗斯年轻男同gay69 | 日本hd18| 无限在线观看视频大全免费高清 | 国产精品久久免费观看 | 操大肥b| 国产99视频精品免视看7 | 欧美成人在线影院 | 日本午夜影院 | 欧美色精品天天在线观看视频 | 久久re6热在线视频 久久AV喷吹AV高潮欧美 | 国产激情在线 | 羞羞污视频 | 亚洲男人的天堂成人 | 国产亚洲综合成人91精品 | 精品国产三级av在线 | 久久一本岛在免费线观看2020 | 饭冈加奈子黑人解禁在线播放 | 四虎影院入口 | 521色香蕉网在线观看免费 | 午夜久久精品 | 99精品久久99久久久久久 | 幸福草电视剧演员表介绍 | 好大好爽好硬我要喷水了 | 日韩视频免费看 | 国产精品青青青高清在线密亚 | 久久久影院亚洲精品 | 国产成人综合久久精品红 | k逼| 亚洲第一天堂无码专区 | 啪啪免费网址 | 小舞丝袜调教喷水沦为肉奴 | 久久亚洲精品AV成人无码 | 日韩基地1024首页 | 日本人护士免费xxxx视频 | 欧美日本一道高清二区三区 | 波多野结中文字幕在线69视频 | 女教师的一级毛片 | 日本中文字幕在线视频站 |