2019獨角獸企業重金招聘Python工程師標準>>>
方法一:script標簽方式
@Insert("<script>insert into xxx (channelId,siteId) " +"values " +"<foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\" >(#{item.channelId},#{item.siteId})" +"</foreach></script>")public int addxxx(@Param("list")List<xxxBean> xxxBean);
方法二:SQL直接生成 ? 注意該方法經過實際使用出現問題!!!!!!!!!!!!!!!!!!!!.
當批量插入的字段中包涵中文時,這樣拼接的中文參數是沒有' '包裹的.存儲的時候就會出錯.因此該方式只適合存儲字段中只有數字的情況,當然也可以在拼接的時候將''拼接上,但是很容易出錯
@InsertProvider(type=SqlProvider.class,method="addccc")
public int addxxxx(@Param("aBean")List<xxxBean> xxxBean);
public String addccc(Map<String,Object> map){List<xxxBean> channelList = (List<xxxBean>)map.get("aBean");StringBuilder sql = new StringBuilder("insert into table").append(" (channelId, siteId) ").append("values ");for (int i=0;i<channelList.size();i++) {sql.append("(").append(channelList.get(i).getChannelId()).append(",").append(channelList.get(i).getSiteId()).append(")");if(i < channelList.size() - 1){sql.append(",");}}return sql.toString();}
方法三: 拼接下標取值的SQL 試用了下,沒問題,有待觀察
需要得到以下格式的SQL:
insert into user (name,sex)
values
(#{userBeans[0].name},#{userBeans[0].sex}),(#{userBeans[1].name},#{userBeans[1].sex})
public String insertUserByList(Map<String,Object> map){List<User> alarmInBeans = (List<userBeans>)map.get("userBeans");StringBuilder sql = new StringBuilder("insert into user (name, sex) values");// #{userBeans[0].name}// 拼接出這樣的格式的最終sql通過#{}取值// 需要用來格式化的字符串模板MessageFormat mf = new MessageFormat("(#'{'userBeans[{0}].name}, #'{'alarmInBeans[{0}].sex})");for (int i = 0; i < alarmInBeans.size(); i++) {// 將{0}替換為object數組的第一個元素sql.append(mf.format(new Object[] { i }));if (i < alarmInBeans.size() - 1) {sql.append(",");}}return sql.toString();
}
?