解決Mybatis中mapper的ID沖突問題

mapper 的id沖突原因:

原因一:

在同一個mapper.xml中存在相同的ID

原因二:

同時使用瞭xml配置和註解配置

解決方案:

隻保留xml或者註解即可!!!

Mybatis mapper文件下同一id 查詢結果列不同問題

場景描述:

訂單數據按天分表,正常情況下每一天的表結構都是一樣的,表名命名格式order_yyyyMMdd。

定義一個查詢如下:

<select id="orderSelect" parameterClass="java.util.HashMap" resultClass="com.xxx">
    select * from order_$table_suffix$
    where ...
</select>

如果我查詢18年10月1日數據,則傳參數table_suffix=20181001,如果我查詢18年10月2日數據,則傳參數table_suffix=20181002.即可。

系統運行瞭若幹天,到瞭18年12月30日,order表添加瞭新的字段a。以後的訂單表都會添加該字段。對應的實體類也添加瞭對應字段。應該沒有問題瞭,更新並重啟程序。先查詢今天的數據,沒有問題。在查詢之前的數據,發現程序報錯瞭,找不到字段a.

解決方法:

修改id 為orderSelect 的查詢

<select id="orderSelect" remapResults="true" parameterClass="java.util.HashMap" resultClass="com.xxx">
    select * from order_$table_suffix$
    where ...
</select>

對比發現添加瞭 remapResults=”true”的配置

總結 :

mybatis 默認remapResults屬性為false,會導致同一查詢id 查出來的字段一直都是固定的。設置為true的話,則每次查詢查出來的列可以不相同,這樣才能應對不同的表結構。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: