SSM酒店管理系统项目Day7


建议配合视频学习食用(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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值