文章目录
建议配合视频学习食用(4-1~5-1):
https://www.bilibili.com/video/BV1rr4y1F7Y2?p=1
12.用户管理(这里的用户指的是能登录后台的用户)
12.1 添加用户管理页面(同10.4)
userManager.jsp
<%--
Created by IntelliJ IDEA.
User: 12917
Date: 2022/1/19
Time: 14:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<!-- 获取CSRF Token -->
<meta name="_csrf" content="${_csrf.token}"/>
<!-- 获取CSRF头,默认为X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/statics/layui/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/statics/layui/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<!-- 搜索条件 -->
<fieldset class="table-search-fieldset">
<legend>搜索信息</legend>
<div style="margin: 10px 10px 10px 10px">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">用户姓名</label>
<div class="layui-input-inline">
<input type="text" name="userName" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">真实姓名</label>
<div class="layui-input-inline">
<input type="text" name="realName" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">用户性别</label>
<div class="layui-input-inline">
<select name="sex" autocomplete="off" class="layui-input">
<option value="">请选择性别</option>
<option value="1">男</option>
<option value="2">女</option>
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">所属部门</label>
<div class="layui-input-inline">
<select name="deptId" autocomplete="off" id="s_deptId" class="layui-input">
<option value="">请选择部门</option>
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">开始日期</label>
<div class="layui-input-inline">
<input type="text" name="startDate" id="startTime" autocomplete="off" class="layui-input" readonly>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">结束日期</label>
<div class="layui-input-inline">
<input type="text" name="endDate" id="endTime" autocomplete="off" class="layui-input" readonly>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block" style="text-align: center">
<button type="submit" class="layui-btn" lay-submit lay-filter="data-search-btn"><i class="layui-icon layui-icon-search"></i>搜索</button>
<button type="reset" class="layui-btn layui-btn-warm"><i class="layui-icon layui-icon-refresh-1"></i>重置</button>
</div>
</div>
</form>
</div>
</fieldset>
<!-- 表格工具栏 -->
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"><i class="layui-icon layui-icon-add-1"></i>添加 </button>
</div>
</script>
<!-- 数据表格 -->
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<!-- 行工具栏 -->
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete"><i class="layui-icon layui-icon-close"></i>删除</a>
<button class="layui-btn layui-btn-xs layui-btn-warm" lay-event="resetPwd"><i class="layui-icon layui-icon-refresh"></i>重置密码 </button>
<button class="layui-btn layui-btn-xs" lay-event="grantRole"><i class="layui-icon layui-icon-edit"></i>分配角色 </button>
</script>
<!-- 添加和修改窗口 -->
<div style="display: none;padding: 5px" id="addOrUpdateWindow">
<form class="layui-form" style="width:90%;" id="dataFrm" lay-filter="dataFrm">
<!-- 隐藏域,保存用户id -->
<input type="hidden" name="id" id="id">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">登陆名称</label>
<div class="layui-input-block">
<input type="text" name="userName" id="userName" lay-verify="required" autocomplete="off" placeholder="请输入登陆名称" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">用户姓名</label>
<div class="layui-input-block">
<input type="text" name="realName" id="realName" lay-verify="required" autocomplete="off" placeholder="请输入用户姓名" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">邮箱</label>
<div class="layui-input-block">
<input type="text" name="email" id="email" lay-verify="required|email" autocomplete="off" placeholder="请输入电子邮箱" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">联系方式</label>
<div class="layui-input-block">
<input type="text" name="phone" id="phone" lay-verify="required|phone" autocomplete="off" placeholder="请输入联系方式" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">入职日期</label>
<div class="layui-input-block">
<input type="text" name="hireDate" id="hireDate" readonly lay-verify="required" autocomplete="off" placeholder="请选择入职日期" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">所属部门</label>
<div class="layui-input-block">
<select name="deptId" id="deptId" class="layui-input">
<option value="">请选择部门</option>
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">用户性别</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="1" title="男" checked>
<input type="radio" name="sex" value="2" title="女" >
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">用户状态</label>
<div class="layui-input-block">
<input type="radio" name="status" value="1" title="正常" checked>
<input type="radio" name="status" value="2" title="异常" >
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">用户备注</label>
<div class="layui-input-block">
<textarea class="layui-textarea" name="remark" id="remark"></textarea>
</div>
</div>
<div class="layui-form-item layui-row layui-col-xs12">
<div class="layui-input-block" style="text-align: center;">
<button type="button" class="layui-btn" lay-submit lay-filter="doSubmit"><span class="layui-icon layui-icon-add-1"></span>提交</button>
<button type="button" class="layui-btn layui-btn-warm" ><span class="layui-icon layui-icon-refresh-1"></span>重置</button>
</div>
</div>
</form>
</div>
<!-- 用户分配角色弹出层 -->
<div style="display: none;padding: 5px" id="selectUserRoleDiv">
<table class="layui-hide" id="roleTable" lay-filter="roleTable"></table>
</div>
</div>
</div>
<script src="${pageContext.request.contextPath}/statics/layui/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'table','laydate','jquery'], function () {
var $ = layui.jquery,
form = layui.form,
laydate = layui.laydate,
table = layui.table;
//获取<meta>标签中封装的CSRF Token
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
//将头中的CSRF Token信息进行发送
$(document).ajaxSend(function (e,xhr,options) {
xhr.setRequestHeader(header,token);
});
//渲染日期组件
laydate.render({
elem: '#startTime', //指定元素
type: 'date'
});
laydate.render({
elem: '#endTime', //指定元素
type: 'date'
});
laydate.render({
elem: '#hireDate' //指定元素
});
//渲染表格组件
var tableIns = table.render({
elem: '#currentTableId',
url: '${pageContext.request.contextPath}/admin/user/list',
toolbar: '#toolbarDemo',
cols: [[
{field: 'id', width: 100, title: '用户编号', align: "center"},
{field: 'userName', width: 100, title: '登录名', align: "center"},
{field: 'realName', width: 100, title: '真实姓名', align: "center"},
{field: 'phone', width: 120, title: '联系方式', align: "center"},
{field: 'sex', width: 60, title: '性别', align: "center",templet:function (d) {
return d.sex == 1 ? "<font color='blue'>男</font>" : "<font color='red'>女</font>";
}},
{field: 'dept', width: 100, title: '所属部门', align: "center",templet:function (d) {
return d.dept.deptName;
}},
{field: 'hireDate', width: 100, title: '入职日期', align: "center"},
{field: 'status', width: 80, title: '状态', align: "center",templet:function (d) {
return d.status == 1 ? "<font color='blue'>正常</font>" : "<font color='red'>异常</font>";
}},
{title: '操作', minWidth: 120, toolbar: '#currentTableBar', align: "center"}
]],
page: true,
done: function (res, curr, count) {
//判断当前页码是否是大于1并且当前页的数据量为0
if (curr > 1 && res.data.length == 0) {
var pageValue = curr - 1;
//刷新数据表格的数据
tableIns.reload({
page: {curr: pageValue}
});
}
}
});
//监听模糊查询
form.on("submit(data-search-btn)",function (data) {
tableIns.reload({
where:data.field,//查询条件
page:{
curr:1
}
});
return false;
})
//发送请求查询部门列表(将数据追加到部门下拉列表中)
$.get("/admin/dept/findDeptList",function(result){
var html = "";
for (let i = 0; i < result.length; i++) {
html +="<option value='"+result[i].id+"'>"+result[i].deptName+"</option>";
}
//将网页代码追加到下拉列表中
$("[name='deptId']").append(html);
//重新渲染下拉列表
form.render("select");
},"json");
//监听表格头部工具栏事件
table.on("toolbar(currentTableFilter)",function (obj) {
switch (obj.event) {
case 'add':
openAddWindow();
break;
}
});
//监听表格行工具栏事件
table.on("tool(currentTableFilter)",function (obj) {
switch (obj.event) {
case 'edit':
openUpdateWindow(obj.data);
break;
case 'delete':
deleteById(obj.data);
break;
case 'resetPwd':
resetPwd(obj.data);
break;
case 'grantRole':
grantRole(obj.data);
break;
}
});
//定义变量,分别保存提交地址和窗口索引
var url,mainIndex;
/**
* 打开添加窗口
*/
function openAddWindow() {
mainIndex = layer.open({
type:1,
title:"添加用户",
area: ["800px", "500px"],//窗口宽高
content: $("#addOrUpdateWindow"),//引用的内容窗口
success:function () {
//提交地址
url = "/admin/user/addUser";
//清空表单数据
$("#dataFrm")[0].reset();
}
});
}
/**
* 打开修改窗口
*/
function openUpdateWindow(data) {
mainIndex = layer.open({
type:1,
title:"修改用户",
area: ["800px", "500px"],//窗口宽高
content: $("#addOrUpdateWindow"),//引用的内容窗口
success:function () {
//提交地址
url = "/admin/user/updateUser";
//表单数据回显
form.val("dataFrm",data);
}
});
}
//监听表单提交事件
form.on("submit(doSubmit)",function (data) {
//发送请求
$.post(url,data.field,function(result){
if(result.success){
//提示
layer.alert(result.message,{icon:1});
//刷新当前数据表格
tableIns.reload();
//关闭当前窗口
layer.close(mainIndex);
}else{
//提示
layer.alert(result.message,{icon:2});
}
},"json");
return false;
});
/**
* 删除
* @param id
*/
function deleteById(data) {
layer.confirm("确定要删除[<font color='red'>"+data.realName+"</font>]吗?",{icon:3,title:"提示"},function (index) {
//发送请求
$.post("/admin/user/deleteById",{"id":data.id},function(result){
if(result.success){
//提示
layer.alert(result.message,{icon:1});
//刷新数据表格
tableIns.reload();
}else{
//提示
layer.alert(result.message,{icon:2});
}
},"json");
layer.close(index);
});
}
/**
* 重置密码
* @param id
*/
function resetPwd(data) {
layer.confirm("确定要重置[<font color='red'>"+data.realName+"</font>]用户的密码吗?",{icon:3,title:"提示"},function (index) {
//发送请求
$.post("/admin/user/resetPwd",{"id":data.id},function(result){
if(result.success){
//提示
layer.alert(result.message,{icon:3});
//刷新数据表格
tableIns.reload();
}else{
//提示
layer.alert(result.message,{icon:2});
}
},"json");
layer.close(index);
});
}
/**
* 打开分配角色窗口
* @param data
*/
function grantRole(data) {
mainIndex = layer.open({
type:1,
title:"分配[<font color='red'>"+data.realName+"</font>]角色",
area: ["1000px", "500px"],//窗口宽高
content: $("#selectUserRoleDiv"),//引用的内容窗口
btn:["<i class='layui-icon layui-icon-ok'></i>确定","<i class='layui-icon layui-icon-close'></i>取消"],
yes:function(index,layero){
//选中行对象
var checkStatus = table.checkStatus('roleTable');
//定义数组,保存选中行的ID
var idArr = [];
//判断是否有选中行
if(checkStatus.data.length>0){
//获取选中行的数据
for (let i = 0; i < checkStatus.data.length; i++) {
idArr.push(checkStatus.data[i].id);//角色ID
}
//将数组转成字符串
var ids = idArr.join(",");
//发送请求(参数分别是角色ID,用户ID)
$.post("/admin/user/grantRole",{"ids":ids,"userId":data.id},function(result){
if(result.success){
layer.alert(result.message,{icon:1});
}else{
layer.alert(result.message,{icon:2});
}
},"json");
//关闭分配角色窗口
layer.close(mainIndex);
}else{
layer.msg("请选择要分配的角色");
}
},
btn2:function(index,layero){
//关闭当前窗口
layer.close(index);
},
success:function () {
//初始化加载角色数据
initRoleData(data);
}
});
}
/**
* 初始化角色列表
* @param data
*/
function initRoleData(data) {
table.render({
elem: '#roleTable',
url: '${pageContext.request.contextPath}/admin/role/initRoleListByUserId?userId='+data.id,
cols: [[
{type: "checkbox", width: 50},
{field: 'id', width: 100, title: '角色编号', align: "center"},
{field: 'roleCode', minWidth: 150, title: '角色编码', align: "center"},
{field: 'roleName', minWidth: 150, title: '角色名称', align: "center"},
{field: 'roleDesc', minWidth: 200, title: '角色描述', align: "center"},
]],
});
}
});
</script>
</body>
</html>
UserController.java
/**
* 查询用户列表
* @param userVo
* @return
*/
@ResponseBody
@RequestMapping("/list")
public DataGridViewResult list(UserVo userVo){
//设置分页信息
PageHelper.startPage(userVo.getPage(),userVo.getLimit());
//调用查询的方法
List<SysUser> userList = userService.findUserList(userVo);
//创建分页对象
PageInfo<SysUser> pageInfo = new PageInfo<SysUser>(userList);
//返回对象
return new DataGridViewResult(pageInfo.getTotal(),pageInfo.getList());
}
12.2 表单修改
12.2.1 增加用户与部门是一对一关系的xml文件
SysUser.java
//一对一
private Dept dept;
SysUserMapper.xml
<!-- 用户部门关系配置 -->
<resultMap id="userDeptResultMap" type="com.manong.entity.SysUser" extends="BaseResultMap">
<!-- 一对一 -->
<association property="dept" javaType="com.manong.entity.Dept">
<id property="id" column="id"/>
<result property="deptName" column="deptName"/>
<result property="address" column="address"/>
</association>
</resultMap>
12.2.2 表单内时间格式显示
springmvc.xml
12.2.3 加载部门搜索下拉列表
12.2.3.1 控制层
userManager.jsp
DeptController.java
/**
* 查询部门列表
* @return
*/
@RequestMapping("/findDeptList")
public String findDeptList(){
return JSON.toJSONString(deptService.findDeptList(null));
}
12.2.3.2 优化(有bug先跳过这一步)
为了避免每刷新一次页面就查询一次部门列表,此处使用Redis缓存进行优化,需要加入Redis相关的依赖及配置
1.Redis下载
https://github.com/tporadowski/redis/releases
2. redis desktop manager 下载
链接: https://pan.baidu.com/s/1-7GEM3kZPS_RYoMA_r3yyw
提取码: 52us
3.使用前先启动Redis
4.hotel-parent下的pom.xml文件 添加jedis依赖
5.在工具类下添加
JedisPoolUtils.java
package com.manong.utils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
JedisPool工具类
加载配置文件,配置连接池的参数
提供获取连接的方法
*/
public class JedisPoolUtils {
private static JedisPool jedisPool;
static{
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
/**
* 获取连接方法
*/
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
jedis.properties
#IP\u5730\u5740
host=127.0.0.1
#\u7AEF\u53E3\u53F7
port=6379
#\u6700\u5927\u8FDE\u63A5\u6570
maxTotal=50
#\u6700\u5927\u7A7A\u95F2\u6570\u91CF
maxIdle=10
RedisKey.java类
package com.manong.utils;
public interface RedisKey {
/**
* 部门列表
*/
String DEPT_LIST = "dept_list";
/**
* 楼层列表
*/
String FLOOR_LIST = "floor_list";
/**
* 房型列表
*/
String ROOM_TYPE_LIST = "room_type_list";
}
6.在业务逻辑层
DeptService.java
/**
* 查询部门数据并进行缓存处理
* @return
*/
String findDeptList();
DeptServiceImpl.java
/**
* 查询部门数据并进行缓存处理
* @return
*/
public String findDeptList() {
//获取Jedis对象
Jedis jedis = JedisPoolUtils.getJedis();
//读取缓存中的数据
String dept_list = jedis.get(RedisKey.DEPT_LIST);
//如果缓存中没有对应的数据:
if(StringUtils.isEmpty(dept_list)){
//1.从数据库中查询数据
List<Dept> deptList = deptMapper.findDeptList(null);
//2.将数据保存到缓存中
dept_list = jedis.set(RedisKey.DEPT_LIST, JSON.toJSONString(deptList));
}
//返回缓存数据
return dept_list;
}
7.优化缓存数据,每次增删改的时候清除缓存
DeptServiceImpl.java
public int insert(Dept record) {
record.setCreateDate(new Date());
//调用删除方法
int count = deptMapper.insert(record);
//如果添加成功
if(count>0){
//清空缓存
JedisPoolUtils.getJedis().del(RedisKey.DEPT_LIST);
}
return count;
}
public int updateDept(Dept dept) {
int count = deptMapper.updateDept(dept);
if(count>0){
//清空缓存
JedisPoolUtils.getJedis().del(RedisKey.DEPT_LIST);
}
return count;
}
public int deleteById(Integer id) {
int count = deptMapper.deleteById(id);
if(count>0){
//清空缓存
JedisPoolUtils.getJedis().del(RedisKey.DEPT_LIST);
}
return count;
}
12.3 实现用户管理的增删改查(同10.5)
12.3.1 查找用户
1.实体层
SysUser.java
修改入职日期数据格式
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date hireDate;//入职日期
UserVo.java
package com.manong.vo;
import com.manong.entity.SysUser;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class UserVo extends SysUser {
private Integer page;//当前页码
private Integer limit;//每页显示数量
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date startDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date endDate;
}
2.数据访问层
SysUserMapper.java
/**
* Description: 查询用户列表
* @param: userVo
* @Return
*/
List<SysUser> findUserList(UserVo userVo);
SysUserMapper.xml
<!-- 查询用户列表-->
<select id="findUserList" resultMap="userDeptResultMap">
select u.*,d.deptName from sys_user u left join sys_dept d on d.id = u.deptId
<where>
<if test="userName!=null and userName!=''">
and u.userName like concat('%',#{userName},'%')
</if>
<if test="realName!=null and realName!=''">
and u.realName like concat('%',#{realName},'%')
</if>
<if test="sex!=null">
and u.sex = #{sex}
</if>
<if test="deptId!=null">
and u.deptId = #{deptId}
</if>
<if test="status!=null">
and u.status = #{status}
</if>
<if test="startDate!=null">
<![CDATA[ and u.hireDate >= #{startDate} ]]>
</if>
<if test="endDate!=null">
<![CDATA[ and u.hireDate <= #{endDate} ]]>
</if>
<if test="userType!=null">
and u.userType = #{userType}
</if>
</where>
</select>
3.业务逻辑层
SysUserService.java
/**
* Description: 查询用户列表
* @param: userVo
* @Return
*/
List<SysUser> findUserList(UserVo userVo);
SysUserServiceImpl.java
/**
* Description: 查询用户列表
* @param: userVo
* @Return
*/
@Override
public List<SysUser> findUserList(UserVo userVo) {
return userMapper.findUserList(userVo);
}
4.控制层
UserController.java
/**
* 查询用户列表
* @param userVo
* @return
*/
@ResponseBody
@RequestMapping("/list")
public DataGridViewResult list(UserVo userVo){
//设置分页信息
PageHelper.startPage(userVo.getPage(),userVo.getLimit());
//调用查询的方法
List<SysUser> userList = userService.findUserList(userVo);
//创建分页对象
PageInfo<SysUser> pageInfo = new PageInfo<SysUser>(userList);
//返回对象
return new DataGridViewResult(pageInfo.getTotal(),pageInfo.getList());
}
12.3.2 添加用户
2.数据访问层
SysUserMapper.java
/**
* 添加用户
* @param sysUser
* @return
*/
int insert(SysUser sysUser);
SysUserMapper.xml
<insert id="insert" parameterType="com.manong.entity.SysUser">
insert into sys_user (userName, password,
realName, sex, deptId,
status, email, phone,
userType, hireDate, createdBy,
createDate, remark)
values ( #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
#{realName,jdbcType=VARCHAR}, #{sex,jdbcType=INTEGER}, #{deptId,jdbcType=INTEGER},
#{status,jdbcType=INTEGER}, #{email,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR},
#{userType,jdbcType=INTEGER}, #{hireDate,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=INTEGER},
#{createDate,jdbcType=TIMESTAMP}, #{remark,jdbcType=VARCHAR})
</insert>
3.业务逻辑层
SysUserService.java
/**
* 添加用户
* @param sysUser
* @return
*/
int insert(SysUser sysUser);
SysUserServiceImpl.java
public int insert(SysUser sysUser) {
sysUser.setCreateDate(new Date());//创建时间
//使用默认密码并进行加密处理,这里用到了工具类PasswordUtil.java
sysUser.setPassword(PasswordUtil.encode(SystemConstants.DEFAULT_PASSWORD));
//默认为普通用户
sysUser.setUserType(2);
return userMapper.insert(sysUser);
}
在工具类里添加常量
SystemConstants.java
/**
* 默认密码
*/
String DEFAULT_PASSWORD = "123456";
PasswordUtil.java
package com.manong.utils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
public class PasswordUtil {
/**
* 加密
* @param password
* @return
*/
public static String encode(String password){
return new BCryptPasswordEncoder().encode(password);
}
}
4.控制层
UserController.java
/**
* 添加用户
* @param sysUser
* @return
*/
@ResponseBody
@RequestMapping("/addUser")
public String addUser(SysUser sysUser){
Map<String,Object> map = new HashMap<String,Object>();
//创建人
sysUser.setCreatedBy(1);
if(userService.insert(sysUser)>0){
map.put(SystemConstants.SUCCESS,true);
map.put(SystemConstants.MESSAGE,"添加成功");
}else{
map.put(SystemConstants.SUCCESS,false);
map.put(SystemConstants.MESSAGE,"添加失败");
}
return JSON.toJSONString(map);
}
12.3.3 修改用户
1.数据访问层
SysUserMapper.java
/**
* 修改用户
* @param sysUser
* @return
*/
int updateUser(SysUser sysUser);
SysUserMapper.xml
<update id="updateUser" parameterType="com.manong.entity.SysUser">
update sys_user
<set>
<if test="userName != null">
userName = #{userName,jdbcType=VARCHAR},
</if>
<if test="password != null">
password = #{password,jdbcType=VARCHAR},
</if>
<if test="realName != null">
realName = #{realName,jdbcType=VARCHAR},
</if>
<if test="sex != null">
sex = #{sex,jdbcType=INTEGER},
</if>
<if test="deptId != null">
deptId = #{deptId,jdbcType=INTEGER},
</if>
<if test="status != null">
status = #{status,jdbcType=INTEGER},
</if>
<if test="email != null">
email = #{email,jdbcType=VARCHAR},
</if>
<if test="phone != null">
phone = #{phone,jdbcType=VARCHAR},
</if>
<if test="userType != null">
userType = #{userType,jdbcType=INTEGER},
</if>
<if test="hireDate != null">
hireDate = #{hireDate,jdbcType=TIMESTAMP},
</if>
<if test="createdBy != null">
createdBy = #{createdBy,jdbcType=INTEGER},
</if>
<if test="createDate != null">
createDate = #{createDate,jdbcType=TIMESTAMP},
</if>
<if test="modifyBy != null">
modifyBy = #{modifyBy,jdbcType=INTEGER},
</if>
<if test="modifyDate != null">
modifyDate = #{modifyDate,jdbcType=TIMESTAMP},
</if>
<if test="remark != null">
remark = #{remark,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
2.业务逻辑层
SysUserService.java
/**
* 修改用户
* @param sysUser
* @return
*/
int updateUser(SysUser sysUser);
SysUserServiceImpl.java
/**
* 修改用户
* @param sysUser
* @return
*/
public int updateUser(SysUser sysUser) {
sysUser.setModifyDate(new Date());
return userMapper.updateUser(sysUser);
}
3.控制层
UserController.java
/**
* 修改用户
* @param sysUser
* @return
*/
@ResponseBody
@RequestMapping("/updateUser")
public String updateUser(SysUser sysUser){
Map<String,Object> map = new HashMap<String,Object>();
//修改人
sysUser.setModifyBy(1);
if(userService.updateUser(sysUser)>0){
map.put(SystemConstants.SUCCESS,true);
map.put(SystemConstants.MESSAGE,"修改成功");
}else{
map.put(SystemConstants.SUCCESS,false);
map.put(SystemConstants.MESSAGE,"修改失败");
}
return JSON.toJSONString(map);
}
12.3.4 删除用户
2.数据访问层
SysUserMapper.java
/**
* 删除用户角色关系表数据
* @param id
*/
@Delete("delete from sys_user_role where uid = #{id}")
void deleteUserRoleByUserId(Integer id);
/**
* 删除用户
* @param id
* @return
*/
@Delete("delete from sys_user where id = #{id}")
int deleteById(Integer id);
3.业务逻辑层
SysUserService.java
/**
* 删除用户
* @param id
* @return
*/
int deleteById(Integer id);
SysUserServiceImpl.java
/**
* 删除用户
* @param id
* @return
*/
public int deleteById(Integer id) {
//删除用户角色关系表的数据
userMapper.deleteUserRoleByUserId(id);
//删除用户数据
return userMapper.deleteById(id);
}
4.控制层
UserController.java
/**
* 删除用户
* @param id
* @return
*/
@ResponseBody
@RequestMapping("/deleteById")
public String deleteById(Integer id){
Map<String,Object> map = new HashMap<String,Object>();
if(userService.deleteById(id)>0){
map.put(SystemConstants.SUCCESS,true);
map.put(SystemConstants.MESSAGE,"删除成功");
}else{
map.put(SystemConstants.SUCCESS,false);
map.put(SystemConstants.MESSAGE,"删除失败");
}
return JSON.toJSONString(map);
}