时隔多日,我们终于更新专栏啦!上一篇教程中我们完成了仪表盘页面的制作,这篇教程我们来实现用户管理界面。
一、需求
首先,我们来明确一下用户管理页面的需求,也就是说这个页面里应该有哪些功能。
- 列出当前系统里的所有用户
- 展示当前系统用户的基本信息
- 按条件查找用户:用户名、姓名、电话、账号状态
- 新增用户
- 修改用户
- 删除用户
- 重置用户密码
二、前端
前端页面不复杂,使用了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">
×
</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>
四、本篇小结
- 删除用户时,需要同时删除用户权限表里的记录,这里我们可以在MySQL中设置外键并指定级联删除就可以了。
- 如果你觉得本文有用,还请点赞关注,提高文章排名,帮助更多的人,谢谢大家!
- 学习本专栏教程有任何疑问,欢迎加群交流呀(584017112):