SSM整合之企业级后台管理系统(14) - 用户管理模块设计与实现

时隔多日,我们终于更新专栏啦!上一篇教程中我们完成了仪表盘页面的制作,这篇教程我们来实现用户管理界面。

 

一、需求

首先,我们来明确一下用户管理页面的需求,也就是说这个页面里应该有哪些功能。

  • 列出当前系统里的所有用户
  • 展示当前系统用户的基本信息
  • 按条件查找用户:用户名、姓名、电话、账号状态
  • 新增用户
  • 修改用户
  • 删除用户
  • 重置用户密码

二、前端

前端页面不复杂,使用了Bootstrap-table来展示数据,并且用户数据相对不多,我们选用了前端分页。

闲话不多说,我们一起来学习下前端代码(manage_user.jsp)

<%--
  Created by IntelliJ IDEA.
  User: yocco
  Date: 2020/01/06
  Time: 15:03
  To change this template use File | Settings | File and Code Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path;
%>
<!DOCTYPE html>
<html>
<head>
    <title>用户管理页面</title>
    <link rel="stylesheet" href="<%=basePath%>/css/bootstrap-table/bootstrap-table.min.css">
    <script type="text/javascript" src="<%=basePath%>/js/bootstrap-table/bootstrap-table.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>/js/bootstrap-table/bootstrap-table-zh-CN.js"></script>
    <link rel="stylesheet" href="<%=basePath%>/css/bootstrap-3.3.7-dist/css/bootstrap-datetimepicker.min.css">
    <script type="text/javascript" src="<%=basePath%>/css/bootstrap-3.3.7-dist/js/bootstrap-datetimepicker.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>/css/bootstrap-3.3.7-dist/js/bootstrap-datetimepicker.zh-CN.js"></script>
    <script type="text/javascript" src="<%=basePath%>/js/jquery.base64.js"></script>
    <script type="text/javascript" src="<%=basePath%>/js/export/FileSaver.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>/js/export/xlsx.core.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>/js/export/tableExport.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>/js/export/export.js"></script>
    <link rel="stylesheet" href="<%=basePath%>/css/main.css">
</head>
<body style="width: 200px; height: 600px">
<div class="panel-content" style="">
    <div class="locate">
        <section class="content-header" style="">
            <div class="title" style=""><i class="${m_icon}" style="color:#1890ff;"></i> 用户管理
                <div class="actions pull-right">
                    <a class="btn btn-primary btn-sm" href="javascript:void(0);" title="新增用户" id="addUserBtn"><i class="fa fa-plus"></i>
                        新增</a>
                    <a class="export-excel btn btn-default btn-sm" data-table="#userTab" data-ignorecolumn="8" data-filename="OMS_导出_用户详情" href="javascript:void(0);" title="导出用户"><i class="glyphicon glyphicon-export"></i>
                        导出</a>
                </div>
            </div>
        </section>
        <section class="content container-fluid">
            <div class="row">
                <div class="form-inline col-md-3">
                    <label class="control-label">用户名:</label>
                    <input type="text" class="form-control" name="loginName" id="loginName" οninput="value=value.replace(/[^a-zA-Z0-9]+$/,'');if(value.length>20)value=value.slice(0,20)">
                </div>
                <div class="form-inline col-md-3">
                    <label class="control-label">姓名:</label>
                    <input type="text" class="form-control" name="cname" id="cname" οninput="value=value.replace(/[^a-z\u4e00-\u9fa5]+$/,'');if(value.length>60)value=value.slice(0,60)">
                </div>
                <div class="form-inline col-md-3">
                    <label class="control-label">电话:</label>
                    <input type="text" class="form-control" name="mobile" id="mobile" οninput="value=value.replace(/[^0-9]+$/,'');if(value.length>11)value=value.slice(0,11)">
                </div>
                <div class="form-inline col-md-3">
                    <label class="control-label">账号状态:</label>
                    <select class="form-control" id="userStatus">
                        <option value="" class="selected">所有状态</option>
                    </select>
                </div>
            </div>
            <div class="row" style="margin-top:20px;">
                <div class="col-md-6"><a class="btn btn-primary" id="search_btn" style="float: right;">查询</a></div>
                <div class="col-md-6"><a class="btn btn-default" οnclick="resetForm(this)" style="float: left;">重置</a>
                </div>
            </div>
            <table id="userTab" class="table table-hover"></table>
        </section>
    </div>
</div>
<script>
    $(function () {
        setUserStatusOptions();
    });

    //根据后台返回参数设置用户状态下拉选项
    function setUserStatusOptions() {
        let userStatusList = JSON.parse('${user_status_list}');
        for (let i = 0; i < userStatusList.length; i++) {
            let status = userStatusList[i];
            $('#userStatus').append('<option value="' + status.codeValue + '">' + status.keyName + '</option>');
            $('#update_user_status').append('<option value="' + status.codeValue + '">' + status.keyName + '</option>');
        }
    }

    function resetForm(e) {
        $('#loginName').val('');
        $('#cname').val('');
        $('#mobile').val('');
        $('#userStatus').val('');
    }

    $('#userTab').bootstrapTable({
        method: 'get',
        url: "<%=basePath%>/user/getUserList",//请求路径
        striped: true, //是否显示行间隔色
        pageNumber: 1, //初始化加载第一页
        pagination: true,//是否分页
        sidePagination: 'client',//server:服务器端分页|client:前端分页
        pageSize: 5,//单页记录数
        pageList: [5, 10, 20, 30],//可选择单页记录数
        showRefresh: false,//刷新按钮
        queryParams: function (params) {//上传服务器的参数
            var temp = {//如果是在服务器端实现分页,limit、offset这两个参数是必须的
                limit: params.limit, // 每页显示数量
                offset: params.offset, // SQL语句起始索引
                loginName: $('#loginName').val(),
                cname: $('#cname').val(),
                mobile: $('#mobile').val(),
                userStatus: $('#userStatus').val()
            };
            return temp;
        },
        columns: [{
            title: '用户名',
            field: 'username',
            sortable: true,
        }, {
            title: '姓名',
            field: 'cname',
            sortable: true,
        }, {
            title: '邮箱',
            field: 'email',
        }, {
            title: '手机号',
            field: 'mobile',
        }, {
            title: '地址',
            field: 'addr',
        }, {
            title: '账号状态',
            field: 'status',
            formatter: formatStatus,
        }, {
            title: '创建时间',
            field: 'createTime',
            align: 'center'
        }, {
            title: '有效期至',
            field: 'validUntilTime',
            align: 'center',
        }, {
            title: '操作',
            field: 'id',
            align: 'center',
            valign: 'middle',
            formatter: operation,//对资源进行操作
        }]
    });

    function formatStatus(value, row, index) {
        if (value == 'IN_USE') {
            return '<i class="fa fa-check-circle text-green"></i> 正常';
        } else if (value == 'LOCKED') {
            return '<i class="fa fa-lock text-danger"></i> 锁定';
        }
    }

    //value代表该列的值,row代表当前对象
    function formatSex(value, row, index) {
        return value == 1 ? "男" : "女";
    }

    //删除、编辑操作
    function operation(value, row, index) {
        var id = index;
        var data = JSON.stringify(row) + '';
        var result = '';
        result += '<a href="javascript:void(0)" class="btn btn-xs btn-primary" οnclick="editUserById(' + id + ')" title="修改用户"><i class="fa fa-pencil"></i> 修改</a>  ';
        result += '<a href="javascript:void(0)" class="btn btn-xs btn-danger" οnclick="deleteUserById(' + id + ')" title="删除用户"><i class="fa fa-close"></i> 删除</a>  ';
        result += '<a href="javascript:void(0)" class="btn btn-xs btn-info" οnclick="resetById(' + id + ')" title="重置密码"><i class="fa fa-recycle"></i> 重置</a>';
        return result;
    }

    // getData方法获取全部页面数据后,将data转为json对象,使用index当前行号作为下标获取对应数据
    function editUserById(index) {
        console.log('editUserById --> start');
        var data = JSON.stringify($("#userTab").bootstrapTable('getData')); //获取全部数据
        var data_json = JSON.parse(data); //data_json和data_json2一样都是json对象
        console.log(data_json);
        console.log('data_json - username: ' + data_json[index].username + ', cname: ' + data_json[index].cname);
        //根据index找到对应行数据,填充数据到修改模态框
        $("#update_user_username").val(data_json[index].username);
        $("#update_user_cname").val(data_json[index].cname);
        $("#update_user_email").val(data_json[index].email);
        $("#update_user_mobile").val(data_json[index].mobile);
        $("#update_user_addr").val(data_json[index].addr);
        $("#update_valid_until").val(data_json[index].validUntilTime);
        $("#update_user_status").val(data_json[index].status);
        $('#updateUserSubmit').attr('data', '<%=basePath%>/user/update'); //提交按钮链接地址
        $('#updateModalLabel').html('修改用户');
        $('#update_user_username').attr('disabled', 'disabled');
        // 不能修改当前登录用户的状态
        if ($("#update_user_username").val() == '${current_user}') {
            $('#update_user_status').attr('disabled', 'disabled');
        } else {
            $('#update_user_status').attr('disabled', false);
        }
        //弹出修改模态框,非新增模态框
        $('#updateUserModal').modal('show');
    }

    //查询按钮事件
    $('#search_btn').click(function () {
        refreshUserTab();
    });

    function refreshUserTab() {
        $('#userTab').bootstrapTable('refresh', {
            url: '<%=basePath%>/user/getUserList'
        });
    }

    //按回车触发查询
    $(".row").keypress(function (e) {
        var code = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
        if (13 == code) {
            //回车键
            $('#userTab').bootstrapTable('refresh', {
                url: '<%=basePath%>/user/getUserList'
            });
        }
    });
</script>

<!-- 修改数据模态框(Modal) -->
<div class="form-horizontal" role="form">
    <div class="modal fade" id="updateUserModal" tabindex="-1" role="dialog" aria-labelledby="updateModalLabel"
         aria-hidden="true" data-backdrop="static" data-keyboard="false">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
                        &times;
                    </button>
                    <h4 class="modal-title" id="updateModalLabel">
                        修改用户
                    </h4>
                </div>
                <!-- 模态框body -->
                <div class="modal-body" style="height: 100%;">

                    <div class="form-group">
                        <label for="update_user_username" class="col-sm-3 control-label">用户名:</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" name="update_user_username"
                                   id="update_user_username"
                                   placeholder="请输入用户名" disabled οninput="value=value.replace(/[^a-zA-Z0-9]+$/,'');if(value.length>20)value=value.slice(0,20)">
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="update_user_cname" class="col-sm-3 control-label">姓名:</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" name="update_user_cname" id="update_user_cname"
                                   placeholder="请输入姓名" οninput="value=value.replace(/[^a-z\u4e00-\u9fa5]+$/,'');if(value.length>60)value=value.slice(0,60)">
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="update_user_email" class="col-sm-3 control-label">邮箱:</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" name="update_user_email" id="update_user_email"
                                   placeholder="请输入邮箱" οninput="value=value.replace(/[^a-zA-Z0-9@_.]+$/,'');if(value.length>60)value=value.slice(0,60)">
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="update_user_mobile" class="col-sm-3 control-label">手机号码:</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" name="update_user_mobile" id="update_user_mobile"
                                   placeholder="请输入手机号码" οninput="value=value.replace(/[^0-9]+$/,'');if(value.length>11)value=value.slice(0,11)">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="update_user_addr" class="col-sm-3 control-label">地址:</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" name="update_user_addr" id="update_user_addr"
                                   placeholder="请输入地址" οninput="value=value.replace(/[^0-9a-zA-Z-#()\u4e00-\u9fa5]+$/,'');if(value.length>80)value=value.slice(0,80)">
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="update_valid_until" class="col-sm-3 control-label">有效期至:</label>
                        <div class="col-sm-7">
                            <input type="text" class="form-control" name="update_valid_until" id="update_valid_until"
                                   placeholder="请输入用户有效截止日期" οninput="value=value.replace(/[^0-9-]+$/,'');if(value.length>10)value=value.slice(0,10)">
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="update_user_status" class="col-sm-3 control-label">用户状态:</label>
                        <div class="col-sm-3">
                            <select class="form-control" id="update_user_status">
                        </div>
                    </div>

                </div><!-- /.modal-body -->
                <!-- 模态框底部 -->
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                    <a class="btn btn-primary" href="javascript:void(0)" οnclick="updateUser(this)"
                       id="updateUserSubmit">提交</a>
                </div>
            </div><!-- /.modal-content -->
        </div><!-- /.modal -->
    </div>
</div>
<script type="text/javascript">

    $('#update_valid_until').datetimepicker({//选择年月日
        format: 'yyyy-mm-dd',
        language: 'zh-CN',
        weekStart: 1,
        todayBtn: 1,//显示‘今日’按钮
        autoclose: 1,
        todayHighlight: 1,
        startView: 2,
        minView: 2,  //Number, String. 默认值:0, 'hour',日期时间选择器所能够提供的最精确的时间选择视图。
        clearBtn:true,//清除按钮
        forceParse: 0
    });
    $('#update_valid_until').focus(function(){
        $(this).blur();//不可输入状态
    })

    function updateUser(e) {
        let username = $('#update_user_username').val();
        let cname = $('#update_user_cname').val();
        let email = $('#update_user_email').val();
        let mobile = $('#update_user_mobile').val();
        let addr = $('#update_user_addr').val();
        let validUntil = $('#update_valid_until').val();
        let status = $('#update_user_status').val();
        let actionUrl = $(e).attr('data');
        console.log('user_status: ' + status);
        if (username == '' || username == undefined) {
            alert('用户名不能为空!');
            return;
        }
        $.ajax({
            type: 'post',
            url: actionUrl,
            async: false,
            cache: false,
            dataType: 'json',
            timeout: 10000,
            data: {
                update_username: username,
                update_cname: cname,
                update_email: email,
                update_mobile: mobile,
                update_addr: addr,
                update_valid_until: validUntil,
                update_status: status
            },
            success: function (data) {
                if (data.code == '0') {
                    alert(data.msg);
                    $('#updateUserModal').modal('hide'); //关闭模态框
                    refreshUserTab(); //刷新表格
                } else {
                    alert(data.msg + ' - 失败代码:' + data.code);
                }
            },
            error: function (data) {
                alert('操作失败,请稍后重试');
            },
            //请求完成后最终执行参数
            complete: function (XMLHttpRequest, status) {
                if (status == 'timeout') {//超时,status还有success,error等值的情况
                    ajaxTimeoutTest.abort();
                    alert("连接超时,请稍后重试");
                }
            }
        });
    }

    $('#addUserBtn').click(function () {
        $("#update_user_username").val('');
        $("#update_user_cname").val('');
        $("#update_user_email").val('');
        $("#update_user_mobile").val('');
        $("#update_user_addr").val('');
        $("#update_valid_until").val('');
        $("#update_user_status").val('');
        $('#updateModalLabel').html('新增用户');
        $('#update_user_username').attr('disabled', false);
        $('#update_user_status').attr('disabled', false);
        $('#updateUserSubmit').attr('data', '<%=basePath%>/user/add'); //提交按钮链接地址
        //弹出修改模态框,新增模态框
        $('#updateUserModal').modal('show');
    });

    function deleteUserById(index) {
        console.log('deleteUserById --> start');
        var data = JSON.stringify($("#userTab").bootstrapTable('getData')); //获取全部数据
        var data_json = JSON.parse(data); //data_json和data_json2一样都是json对象
        let username = data_json[index].username;
        if (username == '${current_user}') {
            alert('不能删除当前登录用户!');
            return;
        }
        if (confirm('确定要删除用户:【' + username + '】吗?')) {
            $.ajax({
                type: 'post',
                url: '<%=basePath%>/user/delete',
                async: false,
                cache: false,
                dataType: 'json',
                timeout: 10000,
                data: {delete_username: username},
                success: function (data) {
                    if (data.code == '0') {
                        alert(data.msg);
                        refreshUserTab(); //刷新表格
                    } else {
                        alert(data.msg + ' - 失败代码:' + data.code);
                    }
                },
                error: function (data) {
                    alert('删除用户失败,请稍后重试');
                }
            });
        }
    }

    function resetById(index) {
        console.log('resetById --> start');
        var data = JSON.stringify($("#userTab").bootstrapTable('getData')); //获取全部数据
        var data_json = JSON.parse(data); //data_json和data_json2一样都是json对象
        let username = data_json[index].username;
        if (username == '${current_user}') {
            alert('不能重置当前登录用户的密码!');
            return;
        }
        if (confirm('确定要重置用户:' + username + ' 的密码?')) {
            $.ajax({
                type: 'post',
                url: '<%=basePath%>/user/resetUserPw',
                async: false,
                cache: false,
                dataType: 'json',
                timeout: 10000,
                data: {reset_username: username},
                success: function (data) {
                    if (data.code == '0') {
                        alert(data.msg);
                        refreshUserTab(); //刷新表格
                    } else {
                        alert(data.msg + ' - 失败代码:' + data.code);
                    }
                },
                error: function (data) {
                    alert('重置用户密码失败,请稍后重试');
                }
            });
        }
    }
</script>
</body>
</html>

三、后端

后端涉及到查询并返回用户数据、新增用户、修改用户、删除用户、重置密码这几个Controller和相关服务,我们来看一下代码。

1. 控制层Controller

/**
 * 查询用户数据
 */
@RequestMapping("/getUserList")
@ResponseBody
public List<User> getUserList(HttpServletRequest request) {
    logger.info("/getUserList --> start");
    User user = new User();
    user.setUsername(request.getParameter("loginName"));
    user.setCname(request.getParameter("cname"));
    user.setMobile(request.getParameter("mobile"));
    user.setStatus(request.getParameter("userStatus"));
    List<User> list = userService.getUserListPage(user);
    logger.info("/getUserList --> end");
    return list;
}

/**
 * 新增用户
 */
@ResponseBody
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ResultObj addUser(HttpServletRequest request, HttpServletResponse response) {
    logger.info("/user/add --> start");
    ResultObj result = new ResultObj();
    try {
        result = userService.addUser(request);
    } catch (Exception e) {
        logger.error("新增用户失败 - 系统错误请稍后再试." + e.getMessage());
        result.setCode("3");
        result.setMsg("新增用户失败 - 系统错误请稍后再试.");
    }
    logger.info("/user/add --> end");
    return result;
}

/**
 * 更新用户
 */
@ResponseBody
@RequestMapping(value = "/update", method = RequestMethod.POST)
public ResultObj updateUser(HttpServletRequest request, HttpServletResponse response) {
    logger.info("/user/update --> start");
    ResultObj result = new ResultObj();
    try {
        result = userService.updateUserByUsername(request);
    } catch (Exception e) {
        logger.error("/user/update - 修改用户失败, 系统错误请稍后再试, 异常信息: " + e.getMessage());
        result.setCode("2");
        result.setMsg("修改用户失败,系统错误请稍后再试");
    }
    logger.info("/user/update --> end");
    return result;
}

/**
 * 删除用户
 */
@ResponseBody
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public ResultObj deleteUser(HttpServletRequest request) {
    logger.info("/user/delete --> start");
    ResultObj result = new ResultObj();
    String deleteUsername = request.getParameter("delete_username");
    try {
        result = userService.deleteUserByUsername(deleteUsername);
    } catch (Exception e) {
        logger.error("删除用户失败 - 系统错误请稍后再试." + e.getMessage());
        result.setCode("2");
        result.setMsg("删除用户失败,系统错误请稍后再试");
    }
    logger.info("/user/delete --> end");
    return result;
}

/**
 * 重置密码
 */
@ResponseBody
@RequestMapping(value = "/resetUserPw", method = RequestMethod.POST)
public ResultObj resetUser(HttpServletRequest request) {
    logger.info("/resetUserPw --> start");
    ResultObj result = new ResultObj();
    String resetUsername = request.getParameter("reset_username");
    String pword = CipherUtil.generatePassword(OmsUtils.getDefaultPwd());
    try {
        result = userService.updatePwByUsername(resetUsername, pword);
    } catch (Exception e) {
        logger.error("重置用户登录密码失败 - 系统错误请稍后再试." + e.getMessage());
        result.setCode("2");
        result.setMsg("重置用户登录密码失败,系统错误请稍后再试");
    }
    logger.info("/resetUserPw --> end");
    return result;
}

2. 服务层Service

/**
 * 查询用户数据
 */
public List<User> getUserListPage(User user) {
    return this.userDao.getUserListPage(user);
}

/**
 * 新增用户
 */
@Transactional
public ResultObj addUser(HttpServletRequest request) throws Exception {
    User user = new User();
    String addUsername = request.getParameter("update_username");
    int userExisted = checkUserExisted(addUsername);
    if (userExisted > 0) {
        logger.error("新增用户失败 - 系统已存在该用户名,请修改用户名后再提交.");
        return new ResultObj("1", "新增用户失败 - 系统已存在该用户名,请修改用户名后再提交.");
    }
    user.setUsername(addUsername);
    user.setPassword(CipherUtil.generatePassword(OmsUtils.getDefaultPwd()));
    user.setCname(request.getParameter("update_cname"));
    user.setEmail(request.getParameter("update_email"));
    user.setMobile(request.getParameter("update_mobile"));
    user.setAddr(request.getParameter("update_addr"));
    user.setValidUntilTime(formatValidUntilTime(request.getParameter("update_valid_until")));
    user.setStatus(request.getParameter("update_status"));
    user.setCreateTime(new Date());
    int inserted = userDao.addUser(user);
    logger.info("/user/add - username: " + addUsername + ", insert count: " + inserted);
    ResultObj result = new ResultObj();
    if (inserted >= 1) {
        result.setCode("0");
        result.setMsg("新增用户成功");
    } else {
        result.setCode("2");
        result.setMsg("新增用户失败 - 请稍后再试.");
    }
    return result;
}

/**
 * 更新用户
 */
@Transactional
public ResultObj updateUserByUsername(HttpServletRequest request) {
    User user = new User();
    user.setUsername(request.getParameter("update_username"));
    user.setCname(request.getParameter("update_cname"));
    user.setEmail(request.getParameter("update_email"));
    user.setMobile(request.getParameter("update_mobile"));
    user.setAddr(request.getParameter("update_addr"));
    user.setValidUntilTime(formatValidUntilTime(request.getParameter("update_valid_until")));
    user.setStatus(request.getParameter("update_status"));
    int updated = userDao.updateUserByUsername(user);
    ResultObj result = new ResultObj();
    if (updated >= 1) {
        result.setCode("0");
        result.setMsg("修改用户成功");
        logger.info("/user/update - 修改用户成功, username: " + user.getUsername());
    } else {
        logger.error("/user/update - 修改用户失败, 系统没有查询到该用户, username: " + user.getUsername());
        result.setCode("1");
        result.setMsg("修改用户失败,系统没有查询到该用户");
    }
    return result;
}

/**
 * 删除用户
 */
public ResultObj deleteUserByUsername(String username) {
    ResultObj result = new ResultObj();
    int deleted = userDao.deleteByUsername(username);
    logger.info("/user/delete - username: " + username + ", delete count: " + deleted);
    if (deleted == 1) {
        result.setCode("0");
        result.setMsg("删除用户成功");
    } else {
        result.setCode("1");
        result.setMsg("删除用户失败,系统没有查询到该用户");
    }
    return result;
}

/**
 * 重置用户密码
 */
public ResultObj updatePwByUsername(String resetUsername, String pword) {
    int reseted = userDao.resetPwByUsername(resetUsername, pword);
    ResultObj result = new ResultObj();
    logger.info("/resetUserPw - username: " + resetUsername + ", reset count: " + reseted);
    if (reseted == 1) {
        result.setCode("0");
        result.setMsg("重置用户登录密码成功");
    } else {
        result.setCode("1");
        result.setMsg("重置用户登录密码失败,系统没有查询到该用户【" + resetUsername + "】");
    }
    return result;
}

3. 持久层Dao,UserMapper.xml

<!-- 获取用户信息 -->
<select id="getUserListPage" resultType="com.oms.model.User" resultMap="ResultMapWithBLOBs">
    SELECT
    <include refid="Base_Column_List"/>
    ,
    <include refid="Blob_Column_List"/>
    FROM user WHERE 1 = 1
    <if test="username!=null and username !=''">
        AND username LIKE CONCAT('%',#{username},'%')
    </if>
    <if test="mobile!=null and mobile !=''">
        AND mobile LIKE CONCAT('%',#{mobile},'%')
    </if>
    <if test="cname!=null and cname !=''">
        AND cname LIKE CONCAT('%',#{cname},'%')
    </if>
    <if test="status!=null and status !=''">
        AND status = #{status}
    </if>
</select>

<!-- 新增用户 -->
<insert id="addUser" parameterType="com.oms.model.User">
    insert into user
    <trim prefix="(" suffix=")" suffixOverrides=",">
        <if test="username != null and username != ''">
            username,
        </if>
        <if test="password != null and password != ''">
            password,
        </if>
        <if test="status != null and status != ''">
            status,
        </if>
        <if test="email != null and email != ''">
            email,
        </if>
        <if test="cname != null and cname != ''">
            cname,
        </if>
        <if test="mobile != null and mobile != ''">
            mobile,
        </if>
        <if test="addr != null and addr != ''">
            addr,
        </if>
        <if test="createTime != null and createTime!= ''">
            create_time,
        </if>
        <if test="validUntilTime != null and validUntilTime != ''">
            valid_until_time,
        </if>
        <if test="profile != null and profile != ''">
            profile,
        </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
        <if test="username != null and username != ''">
            #{username,jdbcType=VARCHAR},
        </if>
        <if test="password != null and password != ''">
            #{password,jdbcType=VARCHAR},
        </if>
        <if test="status != null and status != ''">
            #{status,jdbcType=VARCHAR},
        </if>
        <if test="email != null and email != ''">
            #{email,jdbcType=VARCHAR},
        </if>
        <if test="cname != null and cname != ''">
            #{cname,jdbcType=VARCHAR},
        </if>
        <if test="mobile != null and mobile != ''">
            #{mobile,jdbcType=VARCHAR},
        </if>
        <if test="addr != null and addr != ''">
            #{addr,jdbcType=VARCHAR},
        </if>
        <if test="createTime != null and createTime != ''">
            #{createTime,jdbcType=TIMESTAMP},
        </if>
        <if test="validUntilTime != null and validUntilTime!= ''">
            #{validUntilTime,jdbcType=DATE},
        </if>
        <if test="profile != null and profile != ''">
            #{profile,jdbcType=LONGVARBINARY},
        </if>
    </trim>
</insert>

<!-- 根据用户名更新用户 -->
<update id="updateUserByUsername" parameterType="com.oms.model.User">
update user
set
  status = #{status,jdbcType=VARCHAR},
  email = #{email,jdbcType=VARCHAR},
  cname = #{cname,jdbcType=VARCHAR},
  mobile = #{mobile,jdbcType=VARCHAR},
  addr = #{addr,jdbcType=VARCHAR},
  valid_until_time = #{validUntilTime,jdbcType=DATE}
where username = #{username,jdbcType=VARCHAR}
</update>


<!-- 根据用户名删除用户和用户角色表 -->
<delete id="deleteByUsername" parameterType="java.lang.String">
delete from user
where username = #{username,jdbcType=VARCHAR}
</delete>

<!-- 根据用户名重置登录密码 -->
<update id="resetPwByUsername" parameterType="java.lang.String">
update user
set password = #{password,jdbcType=VARCHAR}
where username = #{username,jdbcType=VARCHAR}
</update>

四、本篇小结

  1. 删除用户时,需要同时删除用户权限表里的记录,这里我们可以在MySQL中设置外键并指定级联删除就可以了。
  2. 如果你觉得本文有用,还请点赞关注,提高文章排名,帮助更多的人,谢谢大家!
  3. 学习本专栏教程有任何疑问,欢迎加群交流呀(584017112):

发布了36 篇原创文章 · 获赞 75 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u012586848/article/details/103513614