JavaEE權限管理系統的搭建(七)--------管理用戶的增刪改


 

本小結講解管理用戶的增刪改查實現,

 

首先是添加用戶,如下圖所示,可以看到添加用戶的同時也要給用戶分配角色,至少給用戶分配一個或者是多個角色

 

 

頁面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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM