解決Mybatis中mapper的ID沖突問(wèn)題
原因一:
在同一個(gè)mapper.xml中存在相同的ID
原因二:
同時(shí)使用了xml配置和注解配置
解決方案:只保留xml或者注解即可!!!
訂單數(shù)據(jù)按天分表,正常情況下每一天的表結(jié)構(gòu)都是一樣的,表名命名格式order_yyyyMMdd。
定義一個(gè)查詢(xún)?nèi)缦拢?/p>
<select parameterClass='java.util.HashMap' resultClass='com.xxx'> select * from order_$table_suffix$ where ...</select>
如果我查詢(xún)18年10月1日數(shù)據(jù),則傳參數(shù)table_suffix=20181001,如果我查詢(xún)18年10月2日數(shù)據(jù),則傳參數(shù)table_suffix=20181002.即可。
系統(tǒng)運(yùn)行了若干天,到了18年12月30日,order表添加了新的字段a。以后的訂單表都會(huì)添加該字段。對(duì)應(yīng)的實(shí)體類(lèi)也添加了對(duì)應(yīng)字段。應(yīng)該沒(méi)有問(wèn)題了,更新并重啟程序。先查詢(xún)今天的數(shù)據(jù),沒(méi)有問(wèn)題。在查詢(xún)之前的數(shù)據(jù),發(fā)現(xiàn)程序報(bào)錯(cuò)了,找不到字段a.
解決方法:修改id 為orderSelect 的查詢(xún)
<select remapResults='true' parameterClass='java.util.HashMap' resultClass='com.xxx'> select * from order_$table_suffix$ where ...</select>
對(duì)比發(fā)現(xiàn)添加了 remapResults='true'的配置
總結(jié) :mybatis 默認(rèn)remapResults屬性為false,會(huì)導(dǎo)致同一查詢(xún)id 查出來(lái)的字段一直都是固定的。設(shè)置為true的話(huà),則每次查詢(xún)查出來(lái)的列可以不相同,這樣才能應(yīng)對(duì)不同的表結(jié)構(gòu)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. MySQL設(shè)置用戶(hù)權(quán)限的簡(jiǎn)單步驟2. [Oracle]Data Guard數(shù)據(jù)庫(kù)災(zāi)難防護(hù)3. mysql之如何查找配置文件my.ini的位置4. MySQL高并發(fā)生成唯一訂單號(hào)的方法實(shí)現(xiàn)5. SQL Server查詢(xún)結(jié)果導(dǎo)出到EXCEL表格的圖文教程6. MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法7. MySQL多表查詢(xún)與7種JOINS的實(shí)現(xiàn)舉例8. Mybatis傳入List實(shí)現(xiàn)批量更新的示例代碼9. MySQL Binlog 日志處理工具對(duì)比分析10. SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢(xún)
