avatar

员工信息管理系统项目

项目简介

GitHub地址:https://github.com/panyongkang/gitRepository/tree/master/java-project0-master

项目名称:员工信息管理系统
项目周期:2019/10–2020/12
开发环境:Eclipse+Maven+JDK1.8+Git+Navicat
技术实现:Spring、SpringMVC、Mybatis、Maven、JQuery、BootStrap、MySQL、AJAX
项目描述:该系统是一个简单的部门员工信息管理系统,可以针对员工的部门调整、新员工的加入和老员工的离开的数据进行统一管理。主要分为管理员登录、用户注册、员工信息展示和退出五个模块。管理员登录模块实现了用户名和密码的验证和是否保存等功能;用户注册模块实现了注册用户名和密码与返回登录等功能;员工信息展示模块实现了部门员工的新增、编 辑和批量删除等功能,实现了弹出模态框的功能;退出模块实现了管理员退出并销毁的功能。
职责描述:
1、负责SSM框架的整合应用,数据库表结构的设计。
2、分页技术的使用,逆向工程的生成。
3、前端使用BootStrap框架渲染,JQuery完成前端验证。
4、实现了登录页面和注册页面,主要实现了用户登录验证、用户注册和退出登录等功能。
5、完成员工信息的新增、删除和编辑功能的开发和单元测试等工作。

项目傻瓜式分析

点击index.jsp中的“新增”按钮

1
2
3
4
5
<div class=”col-md-4 col-md-offset-8”>
<button id="btn-add" class=”btn btn-danger”>
<span class="glyphicon glyphicon-plus" aria-hidden="true" ></sapn>新增
</button>
</div>

如图所示:

点击新增按钮:index.js执行新增操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
${“#btn-add”}.clike(function(){
//1.每次关闭再打开需执行表单数据重置
${“#form1”}[0].rest();
//2.检查用户是否已注册
checkSameEmployee();
//3.点击新增按钮后查询depts
add();
}

//2.检查用户是否已注册
function checkSameEmployee() {
// 为姓名输入框绑定一个change事件,发送ajax请求,检测是否用户已经注册
${“#empName”}.change(function(){
var empName=${“#empName”}.val();
var APP_PATH = $("#APP_PATH").val();
$.ajax({
url : APP_PATH + "/checkSameEmployee",
data : {
"empName" : empName
},
type : "POST",
success : function(result) {
if (result.code == 200) {
show_validate_message($("#empName"), "success", "");
$("#btn-save").attr("ajax-value", true);
} else {
show_validate_message($("#empName"), "error", "该用户已存在");
$("#btn-save").attr("ajax-value", false);
}
}
})
});
}
//2.1显示校验的结果和信息
function show_validate_message(element, status, msg) {
clear(element);// 每次显示前要清空
if (status == "success") {
$(element).parent().addClass("has-success");
}
if (status == "error") {
$(element).parent().addClass("has-error");
$(element).next("span").text(msg);
}
}

//3.新增
Function add(){
//3.1弹出之前发送ajax请求,查出部门信息并显示在下拉列表之中
getDepts($("#dId select"));
//3.2弹出模态框
${“#myModal”}.modal({

});
}
//3.1ajax访问/depts获取部门信息,然后插入select标签
function getDepts(element) {
var APP_PATH = $("#APP_PATH").val();
$.ajax({
url : APP_PATH + "/depts",
type : "GET",
success : function(result) {
// console.log(result);
buildDepts(result, element);
}
});
}
//3.1.1将查询的部门显示出来
function buildDepts(result, element) {
$(element).empty();// 注意每次构建前都要清空
$.each(result.data.depts.data.depts, function(index, item) {
var deptOption = $("<option></option>").append(item.deptName).attr(
"value", item.deptId).appendTo(element);
})
}

Index.jsp中的新增模态框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<div class="modal fade" id="myModal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="myModalLabel">添加员工</h4>
</div>
<!-- 员工新增 -->
<div class="modal-body">
<form class="form-horizontal" id="form1">
<div class="form-group">
<label for="empName" class="col-sm-2 control-label">姓名:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="empName"
name="empName" placeholder="姓名"> <span
class="help-block"></span>
</div>
</div>
<div class="form-group">
<label for="gender" class="col-sm-2 control-label">性别:</label>
<div class="col-sm-10">
<label class="radio-inline"> <input type="radio"
name="gender" id="gender" value="M" checked="checked">

</label> <label class="radio-inline"> <input type="radio"
name="gender" id="gender" value="F"> 女
</label>
</div>
</div>
<div class="form-group">
<label for="email" class="col-sm-2 control-label">邮箱:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="email" name="email"
placeholder="请填入正确邮箱格式"> <span class="help-block"></span>
</div>
</div>
<div class="form-group">
<label for="dId" class="col-sm-2 control-label">部门:</label>
<div class="col-sm-10" id="dId">
<select class="form-control" name="dId">
</select>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="btn-save"
ajax-value="true">保存</button>
</div>
</div>
</div>
</div>

点击“保存”按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Index.jsp部分代码:
<button type="button" class="btn btn-primary" id="btn-save"
ajax-value="true">保存</button>

index.js代码:
$("#btn-save").click(function() {
//validate()执行表单数据验证是否规范
if (validate()) {
if ($("#btn-save").attr("ajax-value") == "false") {
alert("无法插入");
} else {
save();// 点击保存按钮新增用户
}
}
});

//校验表单数据
function validate() {
//1.拿到要校验的数据,使用正则表达式
var empName = $("#empName").val();
//2.正则表达式
var regName = /^[\u4E00-\u9FA5A-Za-z]+$/;
if (!regName.test(empName)) {
// alert("姓名格式不对");
show_validate_message($("#empName"), "error", "姓名格式不正确")
return false;
} else {
show_validate_message($("#empName"), "success", "")
}
var email = $("#email").val();
var regEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

if (!regEmail.test(email)) {
// alert("邮箱格式不对");
show_validate_message($("#email"), "error", "邮箱格式不正确")
return false;
} else {
show_validate_message($("#email"), "success", "")
if ($("#btn-save").attr("ajax-value") == false) {
alert("不成功");
return false;
}
return true;
}
}
//显示校验的结果和信息
Function show_validate_message(element,status,msg){
//每次显示前要清空
clear(element);
if(status==”success”){
$(element).parent().addClass(“has-success”);
}
If(status==”error”){
$(element).parent().addClass(“has-error”);
$(element).next(“span”).text(msg);
}
}
//每次显示前都要清空
Function clear(element){
$(element).parent().removeClass(“has-success”);
$(element).parent().removeClass(“has-error”);
$(element).next(“span”).empty();
}

//保存员工
function save() {
var APP_PATH = $("#APP_PATH").val();
// alert($("#form1").serialize()); 将表单数据序列化为key:value形式
$.ajax({
url : APP_PATH + "/emp",
type : "POST",
data : $("#form1").serialize(),
success : function(result) {
if (result.code == 200) {
alert(result.msg);
$('#myModal').modal('hide');// 关闭模态框
} else {
alert(result.msg);
// alert("老子终于跳过了前端验证"); 浏览器f12把id=empName改成id=empName1,跳过前端验证
}
}

});
}

保存成功页面

点击Index.jsp的“删除”按钮

1
2
3
<button class="btn btn-primary" id="deleteAll">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
</button>

触发Index.js中的批量删除代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
	// 批量删除按钮操作
${“#delelteAll”}.clike(function(){
If(${“.check_item:checked”}.length!=0){
var empName=””;
var delIds=””;
$.each($(“.check_item:checked”,function(){
empNames+=$(this).parents(“tr”).find(“td:eq(2)”).text()+”,”
delIds+=$(this).parents(“tr”).find(“td:eq(1)”).text()+”-“;
})
empNames=empNames.subtring(0,empNames.length-1);
delIds=delIds.substring(0,delIds.length-1);
var flag=confirm(“确认删除【“+empNames+”】?”);
if(flag){
var APP_PATH=$(“#APP_PATH”).val();
$.ajax({
url:APP_PATH+”/emp/”+delIds,
type:”POST”,
data:”_method=delete”,
success:function(result){
alert(result.msg);
toPage(1);//返回首页
}
});
}
}else{
alert(“您未选择任何删除!”);
}
});
});

通过Ajax的url进入Controller层

EmployeeController.java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param
* @return Message
* @description:单个批量删除 单个删除:1 批量删除:1-2-3
*/
@DeleteMapping(value = "/emp/{empIds}")
@ResponseBody
public Message deleteEmployee(@PathVariable("empIds") String empIds) {
//如果包含 - 就是批量删除
if (empIds.contains("-")) {
String[] ids = empIds.split("-");
List<Integer> idsList = new ArrayList<>();
for (String id : ids) {
idsList.add(Integer.parseInt(id));
}
employeeService.deleteBatch(idsList);
} else {
employeeService.deleteEmployee(Integer.parseInt(empIds));
}
return Message.success();
}

调用service层的方法

EmployeeServicejava代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 单个删除员工 */
public void deleteEmployee(Integer empId) {
employeeMapper.deleteByPrimaryKey(empId);
}

//批量删除
public void deleteBatch(List<Integer> ids) {

EmployeeExample example = new EmployeeExample();
Criteria criteria = example.createCriteria();
criteria.andEmpIdIn(ids);
employeeMapper.deleteByExample(example);

}

调用dao层的方法

EmployeeMapper.java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//单个删除
int deleteByPrimaryKey(Integer empId);
//批量删除代码:
int deleteByExample(EmployeeExample example);

//批量删除调用bean层的方法:
EmployeeExample.java代码:
创建标准条件:
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}

protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}

public static class Criteria extends GeneratedCriteria {

protected Criteria() {
super();
}
}

//添加需要删除的id:
public Criteria andEmpIdIn(List<Integer> values) {
addCriterion("emp_id in", values, "empId");
return (Criteria) this;
}

protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}

index.jsp中的表格代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!--3.表格 -->
<div class="row">
<div class="col-md-12">
<table class="table table-hover" id="emps_table">
<thead>
<tr>
<th><input type="checkbox" id="checkAll"></input></th>
<th>员工编号</th>
<th>员工姓名</th>
<th>性別</th>
<th>邮箱</th>
<th>部门名称</th>
<th>操作</th>
</tr>
</thead>
<tbody>


</tbody>
</table>
</div>
</div>

使用index.js中追加“tbody”的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//构建显示table
Function buid_emps_table(result){
//注意每次构建前都要清空表格
$(“#emps_table tbody”).empty();
var emps=result.data.pageInfo.list;
$
.each(
emps,
function(index,item){//构件表格
//构建数据
var checkBoxTd=$(“<td><input type=”checkbox” class=”check_item” /></td>);
var empidTd=$(“<td></td>”).append(item.empId);
var empNameTd=$(“<td></td>”).append(item.empName);
var empGenderTd=$(“<td></td>”).append(item.gender==’M ’?’ 男’ :’女’);
var empEmailTd=$(“<td></td>”).append(item.email);
var deptNameTd=$(“<td></td>”).append(item.department.deptName);
//构建按钮
var editBtn=$(“<button></button>”).addClass(“btn btn-info edit”).attr(“edit-id”,item.empId).append($(“<span></span>”).addClass(“glyphicon glyphicon-pencil”)).append(“编辑”);
var deleteBtn=$(“<button></button>”).addClass(“btn btn-primary delete”).attr(“delete-id”,item.empId).append($(“<span></span>”).addClass(“glyphicon glyphicon-remove”)).append(“删除”).attr(“deleteName”,item.empName);
var btnTd=$(“<td></td>”).append(editBtn).append(“ ”).append(deleteBtn);
//append方法还是返回原来的元素
$("<tr></tr>").append(checkBoxTd).append(empIdTd)
.append(empNameTd).append(empGenderTd).append(
empEmailTd).append(deptNameTd).append(
btnTd).appendTo("#emps_table tbody");
})
}

追加后页面展示

表格中的全选或全不选按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Index.js中的代码:
Function selectCheckBox(){
/* checkAll全选全不选 */
$(“#checkAll”).click(function(){
//attr获取checked是undefined,原生的属性:prop 自定义:attr
$(“.check_item”).attr(“checked”,$(this).prop(“checked”))
});
$(document).on(“click”,”.check_item”,function(){
//判断当前选择中的元素是否为5个
Var flag=$(“.check_item:checked”).length==$(“.check_item”).length;
If(flag){
$(“#checkAll”).prop(“checked”,flag);
}else{
$(“#checkAll”).prop(“checked”,null);
}
});
}

Index.jsp中分页功能

1
2
3
4
5
6
7
<!--4.分页 -->
<div class="row">
<!-- 分页文字信息 -->
<div class="col-md-6" id="page_info"></div>
<!-- 分页条信息 -->
<div class="col-md-6" id="page_line"></div>
</div>

Index.js中的分页代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//1.解析显示分页信息
Function buid_page_info(result){
//注意每次构建前都要清空
$(“#page_info”).empty();
$(“#page_info”).append(
“当前第”+result.data.pageInfo.pageNum+”页,共”
+result.data.pageInfo.pages+”页,共”
+result.data.pageInfo.total+”条记录“)
}

//2.构建分页条
Function buid_page_line(result){
$(“#page_line”).empty;//每次构建前都要清空
Var ul=$(“<ul></ul>”).addClass(“pagination”)
//首页
firstPageLi=$(“<li></li>”).append($(“<a></a>”).append(“首页“).attr(“href”,”#”));
//前一页
prePageLi=$(“<li></li>”).append($(“<a></a>”).append(“&laquo;”).attr(“href”,”#”));
// 如果当前页是第一页,禁止点击
if(result.data.pageInfo.hasPreviousPage==false){
firstPageLi.addClass(“disabled”);
prePageLi.addClass(“disabled”);
}
//跳转首页
firstPageLi.click(function(){
toPage(1);
});
// 跳转前一页(注意前面虽然禁止了首页跳转,但是只有禁止点击标志,还是可以点击)
proPageLi.click(function(){
toPage(result.data.pageInfo.pageNum==1?1:result.data.pageInfo.pageNum-1)
});
ul.append(firstPageLi).append(prePageLi);
//下一页
nextPageLi=$(“<li></li>”).append($(“<a></a>”).append(“raquo;”).attr(“href”,”#”));
//末页
LastPageLi=$(“<li></li>”).append($(“<a></a>”).append(“末页“).attr(“href”,”#”));
// 如果当前页是最后一页禁止点击
If(result.data.pageInfo.hasNextPage==false){
lastPageLi.addClass(“disabled”);
nextPageLi.addClass(“disabled”);
}
//跳转最后一页
lastPageLi.click(function(){
toPage(result.data.pageInfo.pages);
});
// 跳转下一页(注意前面虽然禁止了末页跳转,但是只有禁止点击标志,还是可以点击,或者在pagehelper的配置中设置reasonable属性)
nextPageLi.click(function(){
toPage(result.data.pageInfo.pageNum==result.data.pageInfo.pages? result.data.pageInfo.pages: result.data.pageInfo.pageNum + 1)

// 页数1,2,3,4,5的生成与跳转
$.each(result.data.pageInfo.navigatepageNums,function(index.item){
Var numLi=$(“<li></li>”).append($(“<a></a>”).append(item).attr(“href”,”#”));
If(result.data.pageInfo.pageNum==item){
numLi.addClass(“active”);
}
numLi.click(function(){
toPage(item);
})
ul.append(numLi);
})
//添加下一页和末页提示
ul.append(nextPageLi).append(lastPageLi);
//把ul加入到nav中
Var nav=$(“<nav></nav>”).append(ul);
$(“#page_line”).append(nav);
}
`

分页图片展示

主函数调用实现页面跳转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function toPage(pn){
var APP_PATH=$(“#APP_PATH”.val();
$.ajax({
url:APP_PATH+”/emps”,
data:’pn=’+pn,
type:’get’,
success:function(result){
//1.解析并显示员工信息
buid_emps_table(result);
//2.解析并显示分页信息
buid_page_info(result);
//3.解析并显示分页条
buid_page_line(result);
}
})
}

点击“编辑“按钮

Index.js中代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*为每个编辑按钮绑定事件弹出模态框
注意:如果直接写 btn.click(){},不会产生效果,
因为点击事件是在按钮创建前,如果想要获取点击事件,可以用on方法*/
$(document).on(“click”,”.edit”,function(){
getDepts($(“#dTd1 select”));//修改前查出部门信息
getEmp($(this).attr(“edit-id”));//修改前查出员工信息
$(“#btn-update”).attr(“edit-id”,$(this).attr(“edit-id”));//把员工id传递给更新按键的属性
update();
})

//ajax访问/depts获取部门信息,然后插入select标签
Function getDepts(element){
Var APP_PATH=$(“#APP_PATH”).val();
$.ajax({
url:APP_APTH+”/depts”,
type:”GET”,
success:function(result){
//将查询的部门显示出来
buildDepts(result,element);
}
});
}

//将查询的部门显示出来
Function buildDepts(result,element){
$(element).empty();//每次构建前需要清空
$.each(result.data.depts.data.depts,function(index,item){
var deptOption=$(“<option></option>”).append(item.deptName).
attr(“value",item.deptId.appendTo(element);
})
}

// 获取修改员工的信息
Function getEmp(id){
Var APP_PATH=$(“APP_PATH”).val();
$.ajax({
url:APP_PATH+”/emp/”+id,
type:”GET”,
success:function(result){
var empName=result.data.employee.empName;
var email=result.data.employee.email;
var gender=result.data.employee.gender;
var dId=result.data.employee.dId;
$(“#empName1”).text(empName);
$(“#email1”).val(email);
$(“#myModal1 input[name=gender]”).val([gender]);
$(“#myModal1 select”).val([dId]);
}
});
}

//弹出更新模态框
Function update(){
$(“#myModal1”).modal({

});
}

修改好的信息点击更新按钮

Index.jsp中“更新”按钮代码:

1
2
<button type="button" class="btn btn-primary" id="btn-update"
ajax-value="true">更新</button>

index.js代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/* 点击更新员工 */
$(“#btn-update”).click(function(){
//验证邮箱是否合法
Var email=$(“#email1”).val();
Var regEmail=/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
If(!regEmail.test(email)){
Show_validate_message($(“#email1”),”success”,”邮箱格式不对”)
Return false;
}else{
show_validate_message($("#email1"), "success", "")
if($(“#btn-update”).attr(“ajax-value”)==false){
alert(“不成功“);
return false;
}
/*(发送ajax请求保存员工)
*
* 注意:PUT方法无法请求
* 保存员工数据,
* 如果直接发送ajax的请求,请求除了empId 剩下全是null
* 原因:
* tomcat:
* 1.将请求体中的数据,封装一个Map
* 2.request.getParameter("empName")就会从这个map中取值
* 3.SpringMVC封装POJO对象的时候。
* 会把每个属性的值 request.getParamter("email");
*
* ajax的PUT方法,tomcat看是PUT请求,就不会封装请求体数据为map,POST才封装请求体为map
* 解决方法:
* 将请求变成POST,在data中后续加入 &_method=PUT
*/
Var APP_PATH=$(“#APP_PATH”).val();
$.ajax({
url:APP_PATH+”/emp/”+$(this).attr(“edit-id”),
type:”POST”,
data:$(“#form2”).serialize()+”&_method=PUT”,
success:function(result){
alert(result.msg);
$(‘#myModal1’).modal(‘hide’);//关闭模态框
toPage(1);//回到首页
}
});
return true;
}
});

通过url进入controller层

EmployeeController.java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param
* @return Message
* @description:员工更新 这里ajax请求直接发put请求而不是post请求,那么所有的参数都会获取不到,因为tomcat只会封装post的数据
* 也就是说request.getParameter("empId")为空,springmvc也无法封装Bean
* 解决方法: 1.发送post方法,通过HiddenHttpMethodFilter(web.xml中设置)
* 2.发送put请求,通过HttpPutFormContentFilter
*/
@PutMapping(value = "/emp/{empId}")
@ResponseBody
public Message saveUpdateEmployee(Employee employee) {
// System.out.println(employee);
logger.info(employee.toString());
employeeService.updateEmployee(employee);
return Message.success();
}

调用Service层方法

EmployeeService.java代码:

1
2
3
4
/* 保存更新员工 */
public void updateEmployee(Employee employee) {
employeeMapper.updateByPrimaryKeySelective(employee);
}

EmployeeMapper.java接口的代码

1
int updateByPrimaryKeySelective(Employee record);

EmployeeMapper.xml映射文件编写更新语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<update id="updateByPrimaryKeySelective" parameterType="com.wantao.bean.Employee">
update tb_emp
<set>
<if test="empName != null">
emp_name = #{empName,jdbcType=VARCHAR},
</if>
<if test="gender != null">
gender = #{gender,jdbcType=CHAR},
</if>
<if test="email != null">
email = #{email,jdbcType=VARCHAR},
</if>
<if test="dId != null">
d_id = #{dId,jdbcType=INTEGER},
</if>
</set>
where emp_id = #{empId,jdbcType=INTEGER}
</update>

点击“删除”按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 为每个删除按钮绑定事件(单个删除)
$(document).on(“click”,”.delete”,function(){
var flag=confirm(“是否删除”+$(this).attr(“deleteName”)+”?”);
If(flag){
deleteEmployee($(this));
}
});
// 判断选中的元素是不是全部,是的话checkAll要勾上
$(document).on(“click”,”click_item”,function(){// 为每一个checkbox绑定事件
// 判断选中的元素是不是全部,是的话checkAll要勾上
$(“#checkAll”).prop(“checked”,$(“.check_item:checked”).length==$(“.check_item”).length);
});

/*单个删除 */
function deleteEmployee(element) {
var APP_PATH = $("#APP_PATH").val();
$.ajax({
url : APP_PATH + "/emp/" + element.attr("delete-id"),
type : "POST",
data : "_method=delete",
success : function(result) {
alert(result.msg);
toPage(1);// 返回首页
}

});
}

点击删除按钮触发confirm()方法

点击“确定”后执行deleteEmployee()方法返回信息

文章作者: PanXiaoKang
文章链接: http://example.com/2020/04/15/%E9%83%A8%E9%97%A8%E4%BF%A1%E6%81%AF%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F%E9%A1%B9%E7%9B%AE/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 向阳榆木
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论