MyBatis注解模式批量insert方法
生活随笔
收集整理的這篇文章主要介紹了
MyBatis注解模式批量insert方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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(); }?
轉載于:https://my.oschina.net/MrBamboo/blog/882880
總結
以上是生活随笔為你收集整理的MyBatis注解模式批量insert方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 2544最短路dijkstra模
- 下一篇: 微信小程序工具篇