本小結講解管理用戶的增刪改查實現,
首先是添加用戶,如下圖所示,可以看到添加用戶的同時也要給用戶分配角色,至少給用戶分配一個或者是多個角色
頁面js部分:
$.ajax({ //幾個參數需要注意一下 type: "POST",//方法類型 dataType: "json",//預期服務器返回的數據類型 url: "/admin/admin-user-add.action" ,//url data: $('#form1').serialize(), success: function (data) { //console.log(data.result);//打印服務端返回的數據(調試用) if (data.result == 'SUCCESS'||data.result == 200) { $("loginName").val(''); layer.msg("添加成功",{icon:1,time:2000}); }else { layer.msg("添加失敗:"+data.result.toString(),{icon:5,time:2000}); } }, error : function() { layer.msg(data.result.toString()); } });
adminController
/** * 添加管理員 * @param adminUser pojo對象 * @param errors 驗證錯誤對象 * @return */ @AccessPermissionsInfo("admin:add") @RequestMapping(value = "/admin-user-add.action",method = RequestMethod.POST) @ResponseBody public Map<String,Object> regAdminUser(@Valid AdminUser adminUser, HttpServletRequest request, Errors errors,Model model){ Map<String,Object> resultMap = new HashMap<String ,Object>(); //如果有錯誤return當前注冊頁面 if(errors.hasErrors()) { resultMap.put("result","參數不合法"); } List<Role> roleList = roleService.findAllRoleList(); model.addAttribute("roleList",roleList); logger.info("roleIds:"+request.getParameterValues("roleIds")); if(request.getParameterValues("roleIds")==null ||request.getParameterValues("roleIds").length<=0){ resultMap.put("result","請給用戶分配至少一個角色"); }else { String[] roleIds = request.getParameterValues("roleIds"); //logger.info("regAdminUser方法被調用:"+adminUser.toString()); //先查詢數據庫是否存在該用戶,如果不存在就執行注冊用戶 AdminUser adminUser1 = adminUserService.findAdminUserByLoginName(adminUser.getLoginName().toString()); if(adminUser1!=null){ resultMap.put("result","用戶名已存在"); }else { //密碼加密 String encryptPassword = new PasswordEncryption().encryption(adminUser.getPassword(), adminUser.getLoginName().toString()); adminUser.setPassword(encryptPassword); int count = adminUserService.addAdminUser(adminUser,roleIds); if (count > 0) { resultMap.put("result","SUCCESS"); } } } return resultMap; }
看一下adminUserService.addAdminUser(adminUser,roleIds);方法:
adminUser:用戶信息
roleIds:角色編號數組
admiUserServiceImpl部分:
/** * 添加管理用戶 * * @param adminUser 管理用戶信息 * @param roleIds 管理用戶角色組 * @return */ @Override public int addAdminUser(AdminUser adminUser, String[] roleIds) { //先增加用戶 int successCount = adminUserDao.addAdminUser(adminUser); //獲取到新增用戶的ID int userId = Integer.parseInt(adminUser.getId().toString()); //然后循環遍歷角色數組增加用戶角色關系 for(String roleId :roleIds) { successCount += roleDao.addUserRoleRelations(userId,roleId); } return successCount; }
持久層部分:
AdminUserMapper.xml
<!--對應AdminUserDao接口文件中的addAdminUser方法,參數類型adminUser,使用主鍵自增,返回新增主鍵--> <insert id="addAdminUser" parameterType="adminUser" useGeneratedKeys="true" keyProperty="id" keyColumn="id" > <!--order="BEFORE"會在insert語句之前執行,使用selectKey元素自定義主鍵的生成 返回要插入的ID,如果沒有記錄,返回ID為1,否則返回最后的ID+1(每次插入遞增1),這樣可以自定義ID編號規則--> <selectKey keyProperty="id" resultType="int" order="BEFORE" statementType="PREPARED" > SELECT if(MAX(id)=NULL,1,MAX(id)+1) FROM t_admin </selectKey> <!--注意這里使用了動態插入sql--> INSERT INTO t_admin <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="LoginName != null">LoginName,</if> <if test="password != null">password, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=BIGINT},</if> <if test="LoginName != null">#{LoginName,jdbcType=VARCHAR},</if> <if test="password != null">#{password,jdbcType=VARCHAR}, </if> </trim> </insert>
RoleMapper.xml
<!--對應RoleDao接口中的addUserRoleRelations方法--> <insert id="addUserRoleRelations"> <!--order="BEFORE"會在insert語句之前執行,使用selectKey元素自定義主鍵的生成 返回要插入的ID,如果沒有記錄,返回ID為1,否則返回最后的ID+1(每次插入遞增1),這樣可以自定義ID編號規則--> <selectKey keyProperty="adminRoleId" resultType="int" order="BEFORE" statementType="PREPARED" > SELECT if(MAX(adminRoleId)=NULL,1,MAX(adminRoleId)+1) FROM t_admin_role </selectKey> INSERT INTO t_admin_role(adminRoleId,adminId,roleId) VALUES (#{adminRoleId},#{userId},#{roleId}) </insert>
刪除用戶
adminUserController
/** * 刪除管理用戶 * @param request * @return */ @AccessPermissionsInfo("admin:delete") @RequestMapping(value = "/admin-user-delete.action",method = RequestMethod.POST) @ResponseBody public Map<String,Object> deleteAdminUser(HttpServletRequest request) { String str_ids = request.getParameter("ids"); str_ids = str_ids.replace("/","");//替換掉/ String[] ids = str_ids.split(","); // 用,分割 //logger.info(Arrays.toString(ids)); Map<String,Object> resultMap = new HashMap<String,Object>(); if(ids==null||ids.length<=0) { resultMap.put("result","參數異常"); }else { AdminUser adminUser = (AdminUser)request.getSession().getAttribute("adminUser"); if(adminUser!=null){ int count = adminUserService.deleteAdminUserByIds(ids); if(count>0){ resultMap.put("result","SUCCESS"); }else { resultMap.put("result","操作失敗"); } }else { resultMap.put("result","登錄超時,請重新登錄"); } } return resultMap; }
AdminUserServiceImpl
/** * 批量刪除管理用戶 * * @param ids 管理用戶的編號組 * @return */ @Override public int deleteAdminUserByIds(String[] ids) { //先根據用戶的編號刪除該用戶關聯的角色信息 int successCount = roleDao.deleteAdminUserRoleRelation(ids); //然后再刪除用戶 successCount+=adminUserDao.deleteAdminUserByIds(ids); return successCount; }
持久層
<!--批量刪除管理用戶的角色關聯信息,對應RoleDao接口文件中的deleteAdminUserByIds方法,參數:數組,返回值為執行條數--> <delete id="deleteAdminUserRoleRelation" parameterType="java.util.Arrays"> DELETE FROM t_admin_role WHERE adminId in <foreach item="item" index="index" collection="array" open="(" separator="," close=")" > #{item} </foreach> </delete>
<!--批量刪除管理用戶,對應AdminUserDao接口文件中的deleteAdminUserByIds方法,參數:數組,返回值為執行條數--> <delete id="deleteAdminUserByIds" parameterType="java.util.Arrays"> DELETE FROM t_admin WHERE id in <foreach item="item" index="index" collection="array" open="(" separator="," close=")" > #{item} </foreach> </delete>
修改用戶:
AdminUserController
/** * 編輯管理員 * @param request * @param model * @return */ @AccessPermissionsInfo("admin:edit") @RequestMapping(value = "/admin-user-edit.action",method = RequestMethod.POST) @ResponseBody public Map<String,Object> editAdminUser(HttpServletRequest request,Model model){ Map<String,Object> resultMap = new HashMap<String ,Object>(); List<Role> roleList = roleService.findAllRoleList(); model.addAttribute("roleList",roleList); logger.info("roleIds:"+request.getParameterValues("roleIds")); if(request.getParameter("id")==null||request.getParameter("loginName")==null){ resultMap.put("result","用戶參數不合法"); }else if(request.getParameterValues("roleIds")==null ||request.getParameterValues("roleIds").length<=0){ resultMap.put("result","請給用戶分配至少一個角色"); }else { String[] roleIds = request.getParameterValues("roleIds"); String id = request.getParameter("id").toString(); String loginName = request.getParameter("loginName").toString(); //先查詢數據庫是否存在該用戶 AdminUser adminUser1 = adminUserService.findAdminUserByLoginName(loginName); //如果存在該用戶並且編號相等,就執行更新操作 if(adminUser1!=null&&adminUser1.getId().toString().equals(id)){ int count = adminUserService.editAdminUser(adminUser1,roleIds); if (count > 0) { resultMap.put("result","SUCCESS"); } }else { resultMap.put("result","沒有這個用戶"); } } return resultMap; }
AdminUserServiceImpl
/** * 編輯管理員用戶信息 * * @param adminUser 管理用戶信息 * @param roleIds 角色組 * @return */ @Override public int editAdminUser(AdminUser adminUser, String[] roleIds) { //先刪除用戶關聯的所有角色 int successCount = roleDao.deleteAdminUserRoleRelationById(adminUser.getId().toString()); //然后循環遍歷角色數組增加用戶角色關系 for(String roleId :roleIds) { successCount += roleDao.addUserRoleRelations(adminUser.getId(),roleId); } return successCount; }
持久層:
RoleMapper.xml
<!--對應RoleDao接口文件中的deleteAdminUserRoles方法--> <delete id="deleteAdminUserRoleRelationById" parameterType="string" > DELETE FROM t_admin_role WHERE adminId = #{adminId} </delete>
<!--對應RoleDao接口中的addUserRoleRelations方法--> <insert id="addUserRoleRelations"> <!--order="BEFORE"會在insert語句之前執行,使用selectKey元素自定義主鍵的生成 返回要插入的ID,如果沒有記錄,返回ID為1,否則返回最后的ID+1(每次插入遞增1),這樣可以自定義ID編號規則--> <selectKey keyProperty="adminRoleId" resultType="int" order="BEFORE" statementType="PREPARED" > SELECT if(MAX(adminRoleId)=NULL,1,MAX(adminRoleId)+1) FROM t_admin_role </selectKey> INSERT INTO t_admin_role(adminRoleId,adminId,roleId) VALUES (#{adminRoleId},#{userId},#{roleId}) </insert>