ssm框架-批量修改的實現方式
阿新 • • 發佈:2019-02-02
實列一:
需求:可以有多選框選擇多個裝置,分配給同一個責任人管理。(多對一,前端傳來的資料是用,隔開的 eg:1,2,3 8)
分析:因為是多選,裝置需要封裝成List集合再將資料傳入到Controller層,然後進行業務處理
單表操作
第一步:編寫實體類,用於controller接受資料(專案中用到了tkmybatis所以不用寫get/set),將裝置id封裝成list
第二步:編寫controller層(ApiResult公司專案統一要求返回的自定義型別,讀者可根據需求修改返回型別)@Data @EqualsAndHashCode(callSuper = false) @NoArgsConstructor public class HWChangeUser { private List<Integer> devid; private Integer moduleid; private Integer ownid; }
//批量修改責任人 @PostMapping("/hw/LKTHWChangeDevOwn") @Permissions("item:hw:update:LKTHWUpdateDev") public ApiResult LKTHWChangeUsersDev(HWChangeUser hWChangeUser) throws MyException { return ApiResult.resultInfo("1", "成功", lktService.changeDevOwn(hWChangeUser)); }
第三步:編寫service層,返回Integer型別
Integer changeDevOwn(HWChangeUser hWChangeUser);
第四步:編寫serviceimpl層
@Override
public Integer changeDevOwn(HWChangeUser hWChangeUser) {
return lKTMapper.changeDevOwn(hWChangeUser);
}
第五步:編寫Mapper層 @Param一定要加不然Mapper.xml會找不到傳來的屬性值,呼叫該介面會報錯
Integer changeDevOwn(@Param("hWChangeUser") HWChangeUser hWChangeUser);
第六步:編寫Mapper.xml寫SQL語句(重點) hWChangeUser要與Mapper層@Param(hWChangeUser)一致
另外parameterType="java.util.List可以不寫。因為在mapper介面中採用註解@Param(hWChangeUser)的方式將引數註解進去
<update id="changeDevOwn" parameterType="java.util.List">
UPDATE t_device_hw SET
own_id=#{hWChangeUser.ownid} WHERE id in
<foreach collection="hWChangeUser.devid" index="index" item="item"
open="(" separator="," close=")">
#{item}
</foreach>
</update>
實列二:
需求:選擇多個裝置關聯上多個視訊(多對多,前端傳來的資料是用,隔開的 eg:1,2,3 4,5,6)
分析:因為是多選,裝置和視訊需要封裝成List集合再將資料傳入到Controller層,然後進行業務處理
多表操作
第一步:編寫實體類,用於controller接受資料(專案中用到了tkmybatis所以不用寫get/set),將裝置id和視訊封裝成list@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
public class DevRelationVideoParam{
private List<Integer> devId;
private Integer moduleid;
private List<Integer> videoId;
private Integer ownid;
}
第二步:編寫controller層(ApiResult公司專案統一要求返回的自定義型別,讀者可根據需求修改返回型別) // 裝置關聯攝像頭
@PostMapping("/video/devConectVideo")
@Permissions("video:devConectVideo")
public ApiResult devConectVideo(DevRelationVideoParam param) throws MyException {
Integer result = videoService.devConectVideo(param);
return ApiResult.resultInfo("1", "成功", result);
}
第三步:編寫service層,返回Integer型別 //裝置分配到攝像機
Integer devConectVideo(DevRelationVideoParam param) throws MyException;
第四步:編寫serviceimpl層 // 多個裝置分配到多個攝像頭
@Override
public Integer devConectVideo(DevRelationVideoParam param) throws MyException {
for (int i = 0; i < param.getDevId().size(); i++) {
for (int j = 0; j < param.getVideoId().size(); j++) {
tDevVideoRelationMapper.delDevVideorelationship(param); //刪除傳入進來的視訊和表中的資料一樣了
TDevVideoRelation tDevVideoRelation = new TDevVideoRelation();
tDevVideoRelation.setDeviceid(param.getDevId().get(i));
tDevVideoRelation.setVideoid(param.getVideoId().get(j));
tDevVideoRelation.setIsdelete(0);
tDevVideoRelation.setModuleid(param.getModuleid());
tDevVideoRelationMapper.insert(tDevVideoRelation); //直接呼叫tkmybatis的insert方法(傳入實體類)
}
}
return 1;
}
第五步:編寫Mapper層 @Param一定要加不然Mapper.xml會找不到傳來的屬性值,呼叫該介面會報錯public interface TDevVideoRelationMapper extends Mapper<TDevVideoRelation>{
//把重複分配的攝像頭從攝像頭裝置關聯表中刪除
Integer delDevVideorelationship(@Param("param") DevRelationVideoParam param);
public interface InsertMapper<T> {
/**
* 儲存一個實體,null的屬性也會儲存,不會使用資料庫預設值
*
* @param record
* @return
*/
@InsertProvider(type = BaseInsertProvider.class, method = "dynamicSQL")
int insert(T record);//直接呼叫tkmybatis的insert方法 不用寫xml檔案了
}
第六步:編寫Mapper.xml寫SQL語句(重點) param要與Mapper層@Param(param)一致(刪除和資料庫表中一樣的資料,避免重複)
<mapper namespace="com.hot.manage.db.video.TDevVideoRelationMapper">
<delete id="delDevVideorelationship">
DELETE FROM t_dev_video_relation WHERE
deviceid=#{param.devId} AND videoid=#{param.videoId} AND
moduleid=#{param.moduleid}
</delete>
</mapper>