Mybatis 動態(tài)表名+Map參數傳遞+批量操作詳解
需求:
之前項目一個變動,需要對3張mysql數據庫表數據進行清洗,3張表表名不同,表結構完全相同,需要對這3張表進行相同的增、改、查動作,一開始比較緊急先對一張表進行操作,后來復制了3個一樣的 service、dao、mapper等。后來對代碼進行優(yōu)化,研究了一下動態(tài)表名的處理。
1,查詢操作:
查詢操作只需要傳入動態(tài)表名的時候,傳遞參數仍然是map
mapper.xml內,需要使用statementType='STATEMENT',采用非預編譯模式
mapper.xml內,動態(tài)表名的獲取使用 ${tableName}
2,批量插入操作:
查詢操作只需要傳入動態(tài)表名的時候,傳遞參數仍然是map
mapper.xml內,不需要使用statementType='STATEMENT',否則會在運行時報錯提示語法錯誤(具體原因不是很清楚)。
動態(tài)表名的獲取使用 ${tableName}, 而insert 的 collection 屬性名為傳入參數的map內的key名,不需要任何修飾符。
list內容使用 #{item.guid}來獲取,而不是$。
補充知識:mybatis動態(tài)傳入表名并返回map,返回空間點的坐標
mybatis學習中
動態(tài)傳入表名并返回某幾個字段map,取某個空間表的shape字段的坐標。代碼如下
xml文件
<select statementType='STATEMENT' resultType='java.util.HashMap' parameterType='java.util.Map'> select t.shape.minx as X,t.shape.miny as Y from ${sourceObj} t where OBJECTID = ${featureId} </select>
注意statementType必須,且值必須是大寫的STATEMENT,參數傳入為多個,用map。
dao文件
public void selectLocByPK(String sourceObj, Long featureId) {params.put('sourceObj', 'sde.'+sourceObj);params.put('featureId', featureId);Map map = this.getSqlSessionTemplate().selectOne('selectLocationByPrimaryKey', params);Double x = (Double)map.get('X');Double y = (Double)map.get('Y');System.out.println(x+','+y);}
注意查詢的是sde用戶下的表名是參數傳遞的sourceObj,因為用其他用戶連接的數據庫 所以查詢其他用戶下的表的時候必須用用戶名加表名。當然前提你這個用戶有查詢其他用戶表的權限。params類型是HashMap。xml文件中取值時候必須要跟此地方綁定的key值一直,不然取到為null.此處key為xml文件的時候查詢列的別名。
只是一條數據,多條數據可以用selectList 方法 返回List ,xml基本不用變。
以上這篇Mybatis 動態(tài)表名+Map參數傳遞+批量操作詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。
相關文章:
1. Mybatis在sqlite中無法讀寫byte[]類問題的解決辦法2. SQLite3 命令行操作指南3. Mybatis分頁PageHelper插件代碼實例4. SQL Server數據庫判斷最近一次的備份執(zhí)行結果(最新推薦)5. 解決db2事務日志已滿及日志磁盤空間已滿問題辦法詳解6. mybatis plus動態(tài)數據源切換及查詢過程淺析7. SQLite教程(二):C/C++接口簡介8. MyBatis SELECT基本查詢實現(xiàn)方法詳解9. 解決mybatis中的mapper命名問題10. gearman中worker常駐后臺,導致MySQL server has gone away的解決方法
