在做Mybatis 逆向工程生成 Javabean 時,結果發現生成多了一個 xxxKey 實體類,經過一番百度後知道了生成這個實體類的原因是表中存在聯合主鍵,然後爲了便於代碼的重構,把實體和實體的關係隔絕到兩個類,互相不干擾。
- 生成類如圖
由於表 Answersheet 和表 Score 中都存在聯合主鍵,然後一個表直接生成對應的三個 JavaBean(xxx,xxxExample,xxxKey)。
如果想要正常生成,即不生成 xxxKey 實體類,只要在逆向工程的配置文件中的 context 標籤里加上這個 defaultModelType="flat" 屬性即可。(defaultModelType 爲控制生成類方式)。
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
- 加上之後再生成一次,結果發現這個 xxxKey 實體類沒有了
補充一下
最近用mybatis的逆向工程生成代碼的時候,發現的類多了一個 xxxWithBlos 的類,經過了解,這是因爲數據庫表中的一個字段是text 類型,而 mybatis 逆向工程生成類時,會爲這個字段單獨生成一個 xxxWithBlos 的類。
原因
text類型長度最大是65535,如果不用 blob 類型,就不能保證不溢出。
解決
同理,用以上解決生成xxxKey的方法即可。但是經過實踐本人用以下方式不知道爲什麼是不可以的,如果上面的方式無效,可以嘗試下這種,也許可以,當然下面這種辦法我是行不通的,是第一種可以通過,目前未知原因。
<!-- 數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://ip:port/DBName" userId="root"
password="root">
<!-- 加入以下 -->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>