实列一:

需求:可以有多选框选择多个设备,分配给同一个责任人管理。(多对一,前端传来的数据是用,隔开的   eg:1,2,3    8)

分析:因为是多选,设备需要封装成List集合再将数据传入到Controller层,然后进行业务处理

单表操作

第一步:编写实体类,用于controller接受数据(项目中用到了tkmybatis所以不用写get/set),将设备id封装成list

@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
public class HWChangeUser {
	
	private List<Integer> devid;

        private Integer moduleid;
	
	private Integer ownid;
	
}
第二步:编写controller层(ApiResult公司项目统一要求返回的自定义类型,读者可根据需求修改返回类型)
	//批量修改责任人
		@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>
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐