本小结讲解管理用户的增删改查实现,

首先是添加用户,如下图所示,可以看到添加用户的同时也要给用户分配角色,至少给用户分配一个或者是多个角色

页面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 == ) {
$("loginName").val('');
layer.msg("添加成功",{icon:,time:});
}else
{
layer.msg("添加失败:"+data.result.toString(),{icon:,time:});
}
},
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<=){
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 > ) {
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),这样可以自定义ID编号规则-->
<selectKey keyProperty="id" resultType="int" order="BEFORE" statementType="PREPARED" >
SELECT if(MAX(id)=NULL,,MAX(id)+) 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),这样可以自定义ID编号规则-->
<selectKey keyProperty="adminRoleId" resultType="int" order="BEFORE" statementType="PREPARED" >
SELECT if(MAX(adminRoleId)=NULL,,MAX(adminRoleId)+) 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<=)
{
resultMap.put("result","参数异常");
}else
{
AdminUser adminUser = (AdminUser)request.getSession().getAttribute("adminUser");
if(adminUser!=null){
int count = adminUserService.deleteAdminUserByIds(ids);
if(count>){
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<=){
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 > ) {
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),这样可以自定义ID编号规则-->
<selectKey keyProperty="adminRoleId" resultType="int" order="BEFORE" statementType="PREPARED" >
SELECT if(MAX(adminRoleId)=NULL,,MAX(adminRoleId)+) FROM t_admin_role
</selectKey> INSERT INTO t_admin_role(adminRoleId,adminId,roleId)
VALUES (#{adminRoleId},#{userId},#{roleId})
</insert>

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

  1. JavaEE权限管理系统的搭建(四)--------使用拦截器实现登录认证和apache shiro密码加密

    RBAC 基于角色的权限访问控制(Role-Based Access Control)在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.在一个 ...

  2. JavaEE权限管理系统的搭建(一)--------项目中用到的知识点概括

    转战Java有一段时间了,.net 已不再开发的新的工程,基本上在维护,最近大半年时间在学习Java,今天抽空将学习的到的知识,应用到了一个权限管理系统的小项目中,特此记录一下.代码如有不对之处,希望 ...

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

    如下图所示,添加角色的同时,要给角色分配权限菜单,关于权限数的显示,我实现了两种方式,普通方式和Ztree方式, 普通方式展示树: 主要代码部分: /** * 进入角色添加页面 * @param mo ...

  4. JavaEE权限管理系统的搭建(六)--------使用拦截器实现菜单URL的跳转权限验证和页面的三级菜单权限按钮显示

    本小结讲解,点击菜单进行页面跳转,看下图,点击管理员列表后会被认证拦截器首先拦截,验证用户是否登录,如果登录就放行,紧接着会被权限验证拦截器再次拦截,拦截的时候,会根据URL地址上找到对应的方法,然后 ...

  5. JavaEE权限管理系统的搭建(五)--------RBAC权限管理中的权限菜单的显示

    上一小节实现了登录的实现,本小节实现登录后根据用户名查询当前用户的角色所关联的所有权限,然后进行菜单的显示.登录成功后,如下图所示,管理设置是一级菜单,管理员列表,角色管理,权限管理是二级菜单. 先来 ...

  6. JavaEE权限管理系统的搭建(三)--------springmvc和mabatis整合环境搭建

    本节介绍如何环境的搭建和配置: 首先要在父工程引入jar包依赖: <!-- 通过属性定义指定jar的版本 --> <properties> <spring.version ...

  7. JavaEE权限管理系统的搭建(二)--------聚合工程项目的创建和依赖关系

    本项目是一个聚合工程,所以要先搭建一个聚合工程的框架 搭建完成的项目结构图如下: 首先创建父项目:pom类型 子模块:web层的搭建,war类型 把这个两个目录标记为对应的类型 其他子模块:和serv ...

  8. Windows 2012 R2上搭建IIS管理用户的隔离模式FTP

    Windows 2012 R2上搭建IIS管理用户的隔离模式FTP Windows自带的FTP现在可以提供基于非OS用户的管理,这提高了安全性.即使FTP用户名和密码泄露,也不会对操作系统造成进一步的 ...

  9. springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装

    springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...

随机推荐

  1. temp脚本

    !/bin/bash source ${HOME_DIR}/script/ideploy_dm.inc source ${HOME_DIR}/script/comm_lib home_dir=$(cd ...

  2. 深入理解JavaScript系列(37):设计模式之享元模式

    介绍 享元模式(Flyweight),运行共享技术有效地支持大量细粒度的对象,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 享元模式可以避免大量非常相似类的开销,在程序设 ...

  3. 在 UWP 应用中创建、使用、调试 App Service (应用服务)

    在 Windows 10 中微软为 UWP 引入了 App Service (即应用服务)这一新特性用以提供应用间交互功能.提供 App Service 的应用能够接收来自其它应用传入的参数进行处理后 ...

  4. 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)

    一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称.它可以把数据持久保存,是一种持久化机制. 1.持久化 持久化就是将程序中的数据在瞬时状态和 ...

  5. 如何用 windows+github搭建一个优美的hexo博客

    1.Hexo简单介绍 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页. 风一般的速度Hexo基于Nod ...

  6. 2015-08-19(i++与++i的思考)

    今天看到一个很有趣的东西,关于表达式优先级的问题.如下. ; int j=(i++)+(i++); j的值是多少? 分析:编译器是从左往右编译也就是说编译器先做(i++) 1.(i++)由于是++所以 ...

  7. 使用python简单创建一个用户和商城小程序

    整体思路: 1.用户功能:购买.显示余额.列表清单.输入 2.商家功能:修改和添加商品 创建两个接口: 用户: #Author: Gordon #读取文档,生成goodsf = open('goods ...

  8. 如何保护好我们的比特币(bitcoin)

    转自:http://8btc.com/thread-819-1-1.html 随着比特币(BTC)的使用者越来越多:价格也很高(2013年,1比特币价格长期在100美元以上):同时比特币没有一个中央机 ...

  9. java实现12306的45分钟内支付,45分钟后取消订单功能?

    java实现12306的45分钟内支付,45分钟后取消订单功能? - 回答作者: 匿名用户 https://zhihu.com/question/27254071/answer/35948645

  10. java面试题之----String的intern

    When---什么时候需要了解String的intern方法: 面试的时候(蜜汁尴尬)!虽然不想承认,不过面试的时候经常碰到这种高逼格的问题来考察我们是否真正理解了String的不可变性.String ...