SSM框架实现一对多添加(修改)多条数据

以前在做SSM框架的时候,遇到的一个比较经典的案例,一个角色Role对应多个权限Module,那么如何在添加角色信息的时候将一个角色对应的多个权限也同时添加到两个表关联的中间表中呢。

 

1.添加角色信息。同时添加权限。这种方法是适合在添加角色和对应权限的时候使用,因为添加角色信息时候我们一般是传入一个角色的对象,所以我们在循环的时候就可以直接把RoleId取出来。

当然了我们虽然解决了这个逻辑方法,把对应的多条数据都放入一个list方便执行,但是sql语句也是我们要解决的问题,在循

环添加多条数据的时候我们sql要利用SQL语句的循环方法。foreach

<insert id="insertIntoM_R">
		<foreach item="m" collection="list" separator=";">
		insert into module_role(
		roleId,moduleId
		) values(#{m.roleId},#{m.moduleId})
		</foreach>
	</insert>
@Override
	public void insertRoleandModule(Role role,int[] moduleId) {
		// TODO Auto-generated method stub
        //先将一个角色存入到角色表中
		roleMapper.saveRole(role);

		System.out.println(moduleId);

		List<Module_Role> list=new ArrayList<Module_Role>();
        //循环传入的权限id
		for(int i:moduleId){
         //调用中间表model
			Module_Role r=new Module_Role();

            //循环设置权限id对应一个角色
			r.setModuleId(i);
			r.setRoleId(role.getRoleId());
            //把中间表信息循环加入list
			list.add(r);
		}
        //将对应的角色id和权限id 将入到中间表中
		roleMapper.insertIntoM_R(list);
		
	}

2、更新角色信息表,同时更新角色表和权限表的关联中间表。更新信息时我们传入的是角色信息的id根据id更新。那么循环的时候我们就可以直接把roleid   set到我们的中间表就可以了。

同样的更新修改多数据也需要我们用到sql语句的循环语句。

<update id="updateSetM_R">
		<foreach item="m" collection="list" separator=";">
		insert into module_role(
		roleId,moduleId
		) values(#{m.roleId},#{m.moduleId})
		</foreach>
	</update>
@Override
	public void updateRoleandModule(Integer roleId,int[] moduleId) {
		// TODO Auto-generated method stub
		
	//声明一个list
		List<Module_Role> list=new ArrayList<Module_Role>();
	//循环传过来的权限集合 moduleId
		for(int i:moduleId){
	//调用中间表model
			Module_Role mr=new Module_Role();
	//把角色id权限id set到中间表
			mr.setRoleId(roleId);
			mr.setModuleId(i);
	//循环添加到list
			list.add(mr);
			System.out.println(list);
		}
		
    //执行更新多条数据
		roleMapper.updateSetM_R(list);
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章