麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

springMVC 接收數(shù)組參數(shù),mybatis 接收數(shù)組參數(shù),mybatis批量插入/批量刪除案例

2019-11-15 00:38:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
sPRingMVC 接收數(shù)組參數(shù),mybatis 接收數(shù)組參數(shù),mybatis批量插入/批量刪除案例

案例是給一個(gè)用戶(hù)賦予多個(gè)權(quán)限,多個(gè)權(quán)限用其對(duì)應(yīng)的主鍵 id 為參數(shù),組成了 一個(gè)id數(shù)組,傳給springMVC,然后springMVC傳給mybatis,然后mybatis批量插入。其實(shí)類(lèi)似的場(chǎng)景還有批量刪除多個(gè),也是類(lèi)似的。

1. 前臺(tái)頁(yè)面

        <thead><tr><th>權(quán)限選擇</th><th>name</th><th>permission</th></tr></thead>                  <c:forEach var="priv" items="${list }">                       <tr class="odd gradeX">                      <td><input type="checkbox" name="priv_id" value="${priv.id}" /></td>                      <td><c:out value="${priv.name}"/></td>                      <td><c:out value="${priv.permission}"/></td>                    </tr>                  </c:forEach>

2. jquery獲得選中的項(xiàng)的id值:

            //jquery獲取復(fù)選框值                var priv_ids =[];//定義一個(gè)數(shù)組                $('input[name="priv_id"]:checked').each(function(){    // 遍歷每一個(gè)name為priv_id的復(fù)選框,其中選中的執(zhí)行函數(shù)                    priv_ids.push($.trim($(this).val()));    // 將選中的值添加到數(shù)組priv_ids中                });            console.log(priv_ids);            var indata = {userId:user_id, privIds:priv_ids};            $.post("/ems/priv/setPrivilege", indata, function(data){                if(data != null && data.result == 'ok'){                    console.log(data.msg);                    alert(data.msg);                }else{                    alert(data.msg);                }            }, 'json');

提交的json格式的數(shù)據(jù):var indata = {userId:user_id, privIds:priv_ids};

其中的 priv_ids 是一個(gè)有 id 組成的數(shù)組。

3. springMVC接收數(shù)組參數(shù):

    @RequestMapping(value="/setPrivilege")    @ResponseBody    public void setPrivilege(@RequestParam(value = "privIds[]") Integer[] privIds, Integer userId, PrintWriter writer){        int result = this.privilegeService.setPrivilegeForUser(privIds, userId);        Map<String, String> map = new HashMap<>();        if(result > 0){            map.put("result", "ok");            map.put("msg", "設(shè)置成功");            writer.write(JSON.toJSONString(map));        }    }

我們看到使用了:@RequestParam(value = "privIds[]") Integer[] privIds 來(lái)獲取前臺(tái)傳來(lái)的數(shù)組參數(shù)。

springMVC接收參數(shù)時(shí),最好不要使用 int, long等原始類(lèi)型,而應(yīng)該使用它們對(duì)應(yīng)的包裝類(lèi)型,不然當(dāng)傳入的參數(shù)為空時(shí),會(huì)報(bào)錯(cuò),而包裝類(lèi)型可以使用null表示傳入的空值。

4. service層的處理,很簡(jiǎn)單,直接使用map向mybatis傳遞參數(shù):

@Service("privilegeService")@Transactionalpublic class PrivilegeServiceImpl implements PrivilegeService {    @Autowired    private PrivilegeMapper privilegeMapper;    @Override    @Transactional(readOnly=true)    public List<Privilege> getAllPrivilege() {        return privilegeMapper.getAllPrivilege();    }    @Override    public int setPrivilegeForUser(Integer[] privIds, Integer userId) {        Map<String, Object> map = new HashMap<>();        map.put("privIds", privIds);        map.put("userId", userId);        return this.privilegeMapper.setPrivilegeForUser(map);    }}

5. 最后看 mybatis 的 xml 中的sql如何寫(xiě):

  <insert id="setPrivilegeForUser" parameterType="map">      insert into user_privilege(user_id, privilege_id) values       <foreach collection="privIds" index="index" item="item" separator=",">          ( #{userId}, #{item} )      </foreach>  </insert>

我們看到使用了 foreach 來(lái)循環(huán)傳遞進(jìn)來(lái)的數(shù)組 privIds,最后組成的sql語(yǔ)句如下所示:

insert into user_privilege(user_id, privilege_id) values (3, 1),(3,2),(3,3),(3,4) 

user_id 不變,而privilege_id 是數(shù)組 privIds 中的循環(huán)出來(lái)的 id 值。其實(shí)就是數(shù)據(jù)庫(kù)的批量插入。

6. 批量刪除多個(gè)的處理

刪除時(shí),和前面批量插入處理也是極其類(lèi)似的,只在最后mybatis中xml中sql的寫(xiě)法有點(diǎn)區(qū)別:

  <delete id="deleteByIds" parameterType="java.util.List">      delete from user_privilege where id in      <foreach collection="list" index="index" item="item" open="(" separator="," close=")">           #{item}         </foreach>    </delete>

比較批量刪除和批量插入,可以看出 foreach 中的 open="(" 和 close=")" 只在循環(huán)的開(kāi)始和結(jié)束會(huì)加上,而 separator="," 是每循環(huán)一次,就加一次逗號(hào)。

7. 批量插入傳入對(duì)象List的例子:

<insert id="batchInsertStudent" parameterType="java.util.List">      insert into student (id,name,sex,tel,address) values    <foreach collection="list" item="item" index="index" separator="," >          (#{item.id},#{item.name},#{item.sex},#{item.tel},#{item.address})      </foreach>  </insert> 

其實(shí)掌握了 批量插入和批量刪除,批量更新也是一樣的。


上一篇:HelloBlogGarden

下一篇:對(duì)象引用

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久一区国产 | 干一夜综合 | 北京一级毛片 | 夜夜夜操操操 | 精品国产乱码久久久久久丨区2区 | 精品国产一区二区亚洲人成毛片 | 亚洲人成中文字幕在线观看 | 亚洲网站免费观看 | 日韩av有码在线 | 精品无码久久久久久国产 | 国产亚洲精品成人 | 免费国产一级淫片 | 精品免费在线视频 | 99这里精品 | 羞羞视频免费入口网站 | 深夜小视频在线观看 | 精品国产一区二区三区四区阿崩 | 日韩午夜片 | 成人午夜激情网 | 欧美一级高清免费 | 日韩视频一二区 | 91麻豆精品国产91久久久无需广告 | 亚洲精品午夜国产va久久成人 | 久久一区国产 | 91成人影库| 国产一级毛片高清视频完整版 | 国产精品99久久久久久久女警 | 欧美成人小视频 | 国产91一区二区三区 | 高清在线国产 | 圆产精品久久久久久久久久久 | 嫩呦国产一区二区三区av | 视频一区二区在线观看 | 国产99精品视频 | 成人免费入口 | 国产成人精品一区二区仙踪林 | www.guochan| 亚洲午夜久久久精品一区二区三区 | 91香蕉影视 | 欧美精品一二三区 | 狠狠操视频网站 |