<!--批量增長測試--> <insert id="insertList" parameterType="java.util.List"> insert into t_enterprise_water_ele ( /*方法一*/ -- WATER_ELE_ID, -- ENTERPRISE_ID, -- ENTERPRISE_USCC, -- ENTERPRISE_NAME, -- YEARMONTH, -- WATER_SIZE, -- WATER_AMOUNT, -- ELE_SIZE, -- ELE_AMOUNT, -- STATUS, -- OPERATOR, -- OPERATE_TIME /*方法二*/ <include refid="Base_Column_List"/> ) VALUES <foreach collection="list" item="item" index="index" separator=","> ( #{item.waterEleId,jdbcType=VARCHAR}, #{item.enterpriseId,jdbcType=VARCHAR}, #{item.enterpriseUscc,jdbcType=VARCHAR}, #{item.enterpriseName,jdbcType=VARCHAR}, #{item.yearmonth,jdbcType=VARCHAR}, #{item.waterSize,jdbcType=DECIMAL}, #{item.waterAmount,jdbcType=VARCHAR}, #{item.eleSize,jdbcType=DOUBLE}, #{item.eleAmount,jdbcType=VARCHAR}, #{item.status,jdbcType=INTEGER}, #{item.operator,jdbcType=VARCHAR}, #{item.operateTime,jdbcType=TIMESTAMP} ) </foreach> </insert>
int insertList(List<WaterEle> list);
foreach的主要用在構建in條件中,它能夠在SQL語句中進行迭代一個集合。 foreach元素的屬性主要有 item,index,collection,open,separator,close。 item表示集合中每個元素進行迭代時的別名 index指定一個名字,用於表示在迭代過程當中,每次迭代到的位置 open表示該語句以什麼開始 separator表示在每次進行迭代之間以什麼符號做爲分隔 符 close表示以什麼結束 在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,可是在不一樣狀況 下,該屬性的值是不同的,主要有一下3種狀況: 1.若是傳入的是單參數且參數類型是一個List的時候,collection屬性值爲list 2.若是傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值爲array 3.若是傳入的參數是多個的時候,咱們就須要把它們封裝成一個Map了,固然單參數也能夠封裝成map
使用批量插入執行的SQL語句應該等價於:java
insert into redeem_code (batch_id, code, type, facevalue,create_user,create_time) values (?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? )
int deleteByBatch(@Param(value = "array")String[] array);
int deleteByBatch(@Param(value = "list")List
<delete id="deleteByBatch" parameterType="java.lang.String"> delete from t_enterprise_output_value where OUTPUT_ID IN <foreach collection="array" item="outputId" open="(" separator="," close=")"> #{outputId} </foreach> </delete>
由於表中沒有fileIds字段,因此若是傳map進入的話,須要在map中定義該字段數組
map.put("fileIds","1,2,3");
//美圓符$直接注入(原樣注入)app
<delete id="deleteByPrimaryKey" parameterType="java.util.Map"> DELETE FROM t_attachment WHERE FILE_ID IN (${fileIds}) </delete>
DELETE FROM t_attachment WHERE FILE_ID IN (1,2,3)
適用於表中該字段是int或者bigint類型,不適用於varchar。測試
DELETE FROM t_attachment WHERE FILE_ID IN ("1","2","3")
code
數組/集合 -->(1,2,3,4) String userIdList = formData.get("userIdList"); String[] users = userIdList.split(","); String str = ""; for (String user : users) { str += "\"" + user + "\"" + ","; } String substring = str.substring(0, str.lastIndexOf(",")); System.out.println(substring);
若是刪除不是以主鍵爲條件,而是多個條件同時成立才能夠刪除 userIds能夠是數組或者list或者map 上面的SYSCODE和ROLE_ID,能夠直接傳遞 int deleteByUserIdSysRoleBatch(@Param(value="sysCode") String sysCode,@Param(value="roleId") String roleId,@Param(value="userIds")int[] userIds); int deleteByUserIdSysRoleBatch(@Param(value="sysCode") String sysCode,@Param(value="roleId") String roleId,@Param(value="userIds")List<Integer> userIds);
<delete id="deleteByUserIdSysRoleBatch"> delete from t_user_role where SYSCODE = #{sysCode,jdbcType=VARCHAR} AND ROLE_ID = #{roleId,jdbcType=VARCHAR} AND USER_ID IN <foreach collection="userIds" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </delete>
<delete id="deleteByRole" parameterType="java.util.Map"> DELETE FROM t_user_role <where> <if test="userIdList != null"> USER_ID IN (#{userIdList,jdbcType=VARCHAR}) </if> <if test="roleId != null"> AND ROLE_ID=#{roleId,jdbcType=VARCHAR} </if> <if test="sysCode != null"> AND SYSCODE=#{sysCode} </if> </where> </delete>
<select id="selectOrder" parameterType="java.util.Map" resultMap="OrderMap"> SELECT * FROM t_ WHERE ORDER_ID in <foreach collection="list" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </select>
<select id="selectOrder" parameterType="java.util.Map" resultMap="OrderMap"> SELECT * FROM t_ WHERE ORDER_ID in (${orderList}) </select>
==> Preparing: SELECT * FROM t_order WHERE ORDER_ID in (?) ==> Parameters: 1,2,5(String) <== Columns: ORDER_ID, GOODS_ID, UNIT_PRICE, SOLD_NUM, ORDER_STATUS, OPERATOR, OPERATE_TIME <== Row: 1, 356346093, 43.00, 3, 109002, yyadmin, 2017-12-16 21:01:20.0 <== Total: 1
注意"1,2,5"傳過來的是String類型,實際sql語句以下:orm
SELECT * FROM t_order WHERE ORDER_ID in (#{orderList}) SELECT * FROM t_order WHERE ORDER_ID in ('1,2,5')只能查到一條
將mapper.xml中的sql語句改成xml
SELECT * FROM t_order WHERE ORDER_ID in (${orderList}) SELECT * FROM t_order WHERE ORDER_ID in (1,2,5)就能夠所有查到。
SELECT * FROM t_order WHERE ORDER_ID in (#{orderList}) SELECT * FROM t_order WHERE ORDER_ID in ('1,2,5')查詢不到
將mapper.xml中的sql語句改成字符串
SELECT * FROM t_order WHERE ORDER_ID in (${orderList}) SELECT * FROM t_order WHERE ORDER_ID in ('1','2','5')就能夠所有
'1,2,5'轉爲'1','2','5'步驟以下:get
String categoryIdList = (String) formData.get("categoryIdList"); if (!StringUtils.isEmpty(categoryIdList)) { String[] split = categoryIdList.split(","); String sqlParamter = ""; for (String s : split) { sqlParamter += "'" + s + "',"; } String substring = sqlParamter.substring(0, sqlParamter.length() - 1); formData.put("categoryIdList", substring); }
連接:https://www.jianshu.com/p/041bec8ae6d3