1. 程式人生 > 程式設計 >Mybatis 動態表名+Map引數傳遞+批量操作詳解

Mybatis 動態表名+Map引數傳遞+批量操作詳解

需求:

之前專案一個變動,需要對3張mysql資料庫表資料進行清洗,3張表表名不同,表結構完全相同,需要對這3張表進行相同的增、改、查動作,一開始比較緊急先對一張表進行操作,後來複製了3個一樣的 service、dao、mapper等。後來對程式碼進行優化,研究了一下動態表名的處理。

1,查詢操作:

查詢操作只需要傳入動態表名的時候,傳遞引數仍然是map

mapper.xml內,需要使用statementType="STATEMENT",採用非預編譯模式

mapper.xml內,動態表名的獲取使用 ${tableName}

Mybatis 動態表名+Map引數傳遞+批量操作詳解

2,批量插入操作:

查詢操作只需要傳入動態表名的時候,傳遞引數仍然是map

mapper.xml內,不需要使用statementType="STATEMENT",否則會在執行時報錯提示語法錯誤(具體原因不是很清楚)。

動態表名的獲取使用 ${tableName}, 而insert 的 collection 屬性名為傳入引數的map內的key名,不需要任何修飾符。

list內容使用 #{item.guid}來獲取,而不是$。

Mybatis 動態表名+Map引數傳遞+批量操作詳解

補充知識:mybatis動態傳入表名並返回map,返回空間點的座標

mybatis學習中

動態傳入表名並返回某幾個欄位map,取某個空間表的shape欄位的座標。程式碼如下

xml檔案

<select id="selectLocationByPrimaryKey" 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 動態表名+Map引數傳遞+批量操作詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。