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);
	}

 

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