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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - 詳解Mybatis逆向工程中使用Mysql8.0版本驅(qū)動(dòng)遇到的問題

詳解Mybatis逆向工程中使用Mysql8.0版本驅(qū)動(dòng)遇到的問題

2021-06-03 11:36Dmego的博客 Java教程

今天在使用 8.0.12 版的 mysql 驅(qū)動(dòng)時(shí)遇到了各種各樣的坑。這篇文章主要介紹了詳解Mybatis逆向工程中使用Mysql8.0版本驅(qū)動(dòng)遇到的問題,感興趣的小伙伴們可以參考一下

前言

今天在使用 8.0.12 版的 mysql 驅(qū)動(dòng)時(shí)遇到了各種各樣的坑,在使用 jdbc 連接上遇到的問題可以參考我的上一篇博客。我在使用 mybatis 逆向工程生成各種 mapper , pojo , dao 時(shí),遇到了一個(gè)困惑我好幾個(gè)小時(shí)的錯(cuò)誤,這個(gè)錯(cuò)誤是

result maps collection already contains value for baseresultmap

產(chǎn)生這個(gè)錯(cuò)誤可能有各種原因。但是這里我只說我的原因及解決過程。

初步探索

我在網(wǎng)上查閱了大量的博客文章,對(duì)于產(chǎn)生這類錯(cuò)誤的原因最多的是:生成了多次 mapper , dao 以及 pojo 文件。也就是多次運(yùn)行了生成這些文件的方法。造成 xxxmapper.xml 中出現(xiàn)了重復(fù)的 resultmap 。但是我這里把這些文件刪除后,再重新生成還是會(huì)報(bào)這個(gè)錯(cuò)。所以肯定不是多次生成的問題。

于是我打開了出現(xiàn)問題的那個(gè) mapper.xml 文件,搜索 baseresultmap 發(fā)現(xiàn)其作為 resultmap 的 id 居然出現(xiàn)了三次,還有很多其他的 sql 標(biāo)簽的 id 也有很多重復(fù)的。我將這些重復(fù)的都刪除,再次運(yùn)行,成功了,沒有出現(xiàn)錯(cuò)誤。而且利用這些生成的 mapper 做后面的功能也沒有任何問題。這就非常奇怪,為什么會(huì)多生成這些代碼呢,我繼續(xù)在網(wǎng)上找相關(guān)的文章。

深入探索

好不容易找到一篇博客中提到 :升級(jí)到 mysql 8.0 驅(qū)動(dòng)后的使用 mybatis 逆向工程生成的文件或不一樣,具體的怎么不一樣也沒有說。看到這里,我猜會(huì)不會(huì)是驅(qū)動(dòng)版本造成的,于是我將 pom.xml 里的 mysql 驅(qū)動(dòng)版本調(diào)整到了 5.1.10。刪干凈文件,再次生成后,發(fā)現(xiàn)之前出錯(cuò)的那個(gè) mapper.xml 里的 以 baseresultmap 作為 id 的 resultmap 只有一個(gè)了,其他的 resultmap 中 id 也是唯一的。為了檢驗(yàn)這次生成的到底有沒有用。我啟動(dòng) tomact 運(yùn)行程序。發(fā)現(xiàn)正常啟動(dòng),后續(xù)的功能也沒有問題。

最終解決

但是如果使用 5.0 版本的驅(qū)動(dòng)連接 mysql 8.0 在項(xiàng)目中可能會(huì)遇到難以預(yù)料的問題,所以我并沒有就此將驅(qū)動(dòng)版本改變。我繼續(xù)在網(wǎng)上通過換各種關(guān)鍵詞來搜尋解決方案。幾個(gè)小時(shí)過去了,還是沒有任何結(jié)果。最后被迫去看了 [mybatis generator] 的官方英文文檔。中文文檔已經(jīng)看過了,沒有找到相關(guān)的內(nèi)容。在閱讀英文文檔中,我在database specific information (使用注意事項(xiàng))下面的 mysql使用注意事項(xiàng) 中似乎找到了相關(guān)的內(nèi)容。其原內(nèi)容如下:

if you are using version 8.x of connector/j you may notice that the generator attempts to generate code for tables in the mysql information schemas (sys, information_schema, performance_schema, etc.) this is probably not what you want! to disable this behavior, add the property “nullcatalogmeanscurrent=true” to your jdbc url.

for example:

?
1
2
3
4
<jdbcconnection driverclass="com.mysql.jdbc.driver" connectionurl="jdbc:mysql://localhost/my_schema"
    userid="my_user" password="my_password">
  <property name="nullcatalogmeanscurrent" value=true" />
</jdbcconnection>

上面的英文文檔翻譯過來就是:

如果您使用的是connector / j的8.x版,您可能會(huì)注意到生成器嘗試為mysql信息模式(sys,information_schema,performance_schema等)中的表生成代碼。這可能不是您想要的! 要禁用此行為,請(qǐng)將屬性“nullcatalogmeanscurrent = true”添加到j(luò)dbc

的確,我發(fā)現(xiàn)使用 8.0 版的驅(qū)動(dòng)比使用 5.0 版時(shí)不僅 mapper.xml 文件中多生成了好多代碼,而且還多生成了一個(gè) xxxwithblobs 的 pojo 文件。雖然還是不太理解上面說的問題,但是我還是添加 nullcatalogmeanscurrent 屬性。然后重新生成了相關(guān)的 mapper , pojo , dao 。打開之前出現(xiàn)問題的 mapper.xml 文件,和使用 5.0 版的驅(qū)動(dòng)生成的代碼一樣,以 baseresultmap 作為 id 的 resultmap 只有一個(gè)了。再次啟動(dòng) tomact,成功啟動(dòng),沒有任何問題,測(cè)試其他業(yè)務(wù)功能,也沒有任何問題。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://dmego.me/2018/10/10/mysql8-mybatis-geneator.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 都市后宫小说 | 日本福利网 | 非洲特级特黄aa大片 | 激情五色月 | 午夜一区二区免费视频 | 无码人妻丰满熟妇啪啪网不卡 | chinese圣水黄金调教 | 久草高清在线 | 欧美色影视 | gayxxx视频| 久久伊人电影 | 91美女在线视频 | 免费一区视频 | 视频大全在线观看免费 | 小sao货水好多真紧h的视频 | 亚洲AV蜜桃永久无码精品红樱桃 | 色综合合久久天天综合绕视看 | 日韩成人在线网站 | 国产日韩欧美在线观看不卡 | 国产一二在线观看视频网站 | 1769亚洲欧美资源站 | 日剧整部剧护妻狂魔免费观看全集 | 免费在线视频观看 | 国产免费小视频在线观看 | 2020最新版的ab片 | 国产成人小视频在线观看 | 国产麻豆传媒在线观看 | 狠狠色综合久久婷婷 | 欧美一区二区三区在线观看免费 | 日本色吧 | 色综合网亚洲精品久久 | 男人v天堂| 成年人视频在线免费观看 | 成 人免费va视频 | 国产一区二区三区久久精品小说 | 国产成人亚洲影视在线 | h版在线观看 | 久久久黄色片 | fuqer老师| 国产偷窥女洗浴在线观看亚洲 | 日本大尺度动漫在线观看缘之空 |