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>

原文地址:https://www.cnblogs.com/shaojiang/p/10349227.html

时间: 2024-08-05 20:18:23

JavaEE权限管理系统的搭建(七)--------管理用户的增删改的相关文章

JavaEE权限管理系统的搭建(八)--------角色的增删改

如下图所示,添加角色的同时,要给角色分配权限菜单,关于权限数的显示,我实现了两种方式,普通方式和Ztree方式, 普通方式展示树: 主要代码部分: /** * 进入角色添加页面 * @param model * @return */ @AccessPermissionsInfo("role:add") @RequestMapping(value = "/role-add.action",method = RequestMethod.GET) public Strin

JavaEE权限管理系统的搭建(三)

本节介绍如何环境的搭建和配置: 首先要在父工程引入jar包依赖: 1 <!-- 通过属性定义指定jar的版本 --> 2 <properties> 3 <spring.version>4.2.4.RELEASE</spring.version> 4 <hibernate.version>5.0.7.Final</hibernate.version> 5 <struts2.version>2.3.24</struts2

JavaEE权限管理系统的搭建(五)

上一小节实现了登录的实现,本小节实现登录后根据用户名查询当前用户的角色所关联的所有权限,然后进行菜单的显示.登录成功后,如下图所示,管理设置是一级菜单,管理员列表,角色管理,权限管理是二级菜单. 先来看一下,AdminUser类,Role类,Permission类 AdminUser类 package com.supin51.domain; import org.apache.ibatis.type.Alias; import org.hibernate.validator.constraint

JavaEE权限管理系统的搭建(二)

本项目是一个聚合工程,所以要先搭建一个聚合工程的框架 搭建完成的项目结构图如下: 首先创建父项目:pom类型 子模块:web层的搭建,war类型 其他子模块:和service 层类似,都是属于jar类型,这里以service层为例: 最终项目结构如下所示: 添加模块之间的依赖关系,例如: web模块依赖于-------->service,domain,utils,interceptor service模块依赖于-------->dao,domain,utils dao模块依赖于--------

权限管理系统数据库搭建

一:权限管理系统 系统设计思路:当用户点击超链接是用过滤器把这个请求拦截下来,检查下有没有访问权限,若有则放行,反之不放行难点:对权限数据对象的管理,数据库表的设计和表之间的关系 数据库设计:权限表(privilege):一个权限对应多个资源,是一对多的关系,为了不丢失关系,所以一般要在多的一方定义外键列资源表(resource):添加分类,删除分类,修改分类,查找分类角色表(role):可以理解为现实生活中的身份,管理员,经理等用户表(user):可以理解为现实生活中的一个人 *用户角色表(u

AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作

博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户,请参阅:AD 域服务简介(二)- Java 获取 AD 域用户 一.前言 在日常的开发中,为了实现单点登录,需要对域用户进行增删改查操作,以维持最新的用户信息,确保系统的安全. 二.Java 对 AD 域用户的增删改查操作 package com.moonxy.ad; import java.uti

搭建第一个web项目:实现用户的增删改查

好久没写这个web的代码了,再不写估计以前的也忘记的差不多了,赶紧复习下,顺便把自己的想法慢慢实现了. 最近在公司发现以前的项目有用easyUI搭建的.赶紧copy回来学习下. 感觉写日志真的很有必要,自己总结的肯定要比每次从网上查阅来的靠谱.每次搭建一个基本的web项目都都要查ssh的配置真的很忧伤啊,有木有!!! 把jar包的截图截了一下,要不总是记不清该用到的基本jar有啥. 其中Struts中用到的jar有:commons-fileupload.jar  commons-io.jar  

搭建第一个web项目:实现用户的增删改查(二)

最近学了点java和微信的东西,公司这个项目有搭建不起来,在公司有时间的时候就学点Android了,放了个端午假期又颓废了一段时间,这个增删改还没有整理好,我勒个去啊. 不过最近慢慢整理项目的时候,发现了一些思路,对以后和像我一样的新手来说也许有不少的帮助. 1.不要一味心思的去赶紧实现自己的想法,其实一步一步,从简单的来,慢慢测试,也许更节约时间. 这次就是急着去扩展easyUI的dialog,模仿公司的扩展方法,可是一直不成功.反而先做一个简单的dialog,慢慢一步步调试,就会发现自己犯的

1.hibernate七步走完成增删改查

一.hibernate框架介绍如下 1.框架=模板 2.Hibernate是对象模型与关系数据库模型之间的桥梁 3.hibernate持久化概念 什么是ORM ORM是对象关系映射,是一种数据持久化操作(增删改查), 它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过javabean对象去操作数据库中数据. 4.hiberante概念 hibernate就是采用orm对象关系映射技术的持久化开发框架. 5.hibernate优缺点及使用场合 1.优点 hibernate很强大