增删改查 以物联项目的deviceCheck表为例
controller层
跳转的路由都要小写。
@Controller
@AllArgsConstructor
@RequestMapping("/devicecheck")
public class DeviceCheckController {
private DeviceCheckService deviceCheckService;
@RequestMapping("/list")
private String list(ModelMap modelMap, DeviceCheck deviceCheck,Integer pageNum, Integer pageSize){
PageHelper.startPage(pageNum,pageSize);
List<DeviceCheck> deviceCheckList = deviceCheckService.list(deviceCheck);
PageInfo<DeviceCheck> pageInfo = PageInfo.of(deviceCheckList);
//f
modelMap.addAttribute("pageInfo",pageInfo);
return "devicecheck/listt";
}
@GetMapping("/add")
private String add(){
return "devicecheck/add";
}
@PostMapping("/add")
@ResponseBody
private AjaxResult insert(@RequestBody DeviceCheck deviceCheck){
deviceCheckService.insert(deviceCheck);
return new AjaxResult("添加成功",null);
}
@GetMapping("/edit")
private String update(String id,ModelMap modelMap){
DeviceCheck deviceCheck = deviceCheckService.selectById(id);
modelMap.addAttribute("dev",deviceCheck);
return "devicecheck/edit";
}
@PostMapping("/edit")
@ResponseBody
private AjaxResult edit(@RequestBody DeviceCheck deviceCheck){
deviceCheckService.update(deviceCheck);
return new AjaxResult("编辑成功",null);
}
@ResponseBody
@RequestMapping("/delete")
private AjaxResult delete(String id){
deviceCheckService.delete(id);
return new AjaxResult("删除成功",null);
}
}
dao层/service层
@Mapper
public interface DeviceCheckDao {
List<DeviceCheck> list(DeviceCheck deviceCheck);
Integer insert(DeviceCheck deviceCheck);
DeviceCheck selectById(String id);
Integer update(DeviceCheck deviceCheck);
Integer delete(String id);
}
serviceImpl层
@Service
@AllArgsConstructor
public class DeviceCheckServiceImpl implements DeviceCheckService {
private DeviceCheckDao deviceCheckDao;
@Override
public List<DeviceCheck> list(DeviceCheck deviceCheck) {
return deviceCheckDao.list(deviceCheck);
}
@Override
public Integer insert(DeviceCheck deviceCheck) {
return deviceCheckDao.insert(deviceCheck);
}
@Override
public DeviceCheck selectById(String id) {
return deviceCheckDao.selectById(id);
}
@Override
public Integer update(DeviceCheck deviceCheck) {
return deviceCheckDao.update(deviceCheck);
}
@Override
public Integer delete(String id) {
return deviceCheckDao.delete(id);
}
}
mapper层(.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tledu.dao.DeviceCheckDao">
<resultMap id="ResultMap" type="DeviceCheck" autoMapping="true">
<id column="device_check_id" property="deviceCheckId"/>
<!--联查设备台账device,员工管理employee-->
<!--订单管理查客户和产品-->
<association property="device" column="device_id" javaType="Device" autoMapping="true">
<id column="device_id" property="deviceId"/>
</association>
<association property="employee" column="emp_id" javaType="Employee" autoMapping="true">
<id column="emp_id" property="empId"/>
</association>
</resultMap>
<select id="list" resultMap="ResultMap">
select *
from device_check k
left join device d on d.device_id = k.device_id
left join employee e on device_check_emp_id = e.emp_id
<where>
<if test="deviceCheckId !=null and deviceCheckId != ''">
and device_check_id like concat('%',#{deviceCheckId},'%')
</if>
</where>
</select>
<insert id="insert" >
insert into device_check(device_check_id,
device_id,
device_check_emp_id,
device_check_date,
device_check_result,
device_check_fault_id
) values (#{deviceCheckId},
#{deviceId},
#{deviceCheckEmpId},
#{deviceCheckDate},
#{deviceCheckResult},
#{deviceCheckFaultId}
)
</insert>
<delete id="delete" >
delete
from device_check
where device_check_id = #{deviceCheckId}
</delete>
<update id="update" parameterType="DeviceCheck">
update device_check
<set>
<if test="deviceId != null and deviceId !=''">
device_id =#{deviceId},
</if>
<if test="deviceCheckEmpId != null and deviceCheckEmpId !=''">
device_check_emp_id =#{deviceCheckEmpId},
</if>
<if test="deviceCheckDate != null ">
device_check_date =#{deviceCheckDate},
</if>
<if test="deviceCheckResult != null and deviceCheckResult !=''">
device_check_result =#{deviceCheckResult},
</if>
<if test="deviceCheckFaultId != null and deviceCheckFaultId !=''">
device_check_fault_id =#{deviceCheckFaultId}
</if>
where device_check_id = #{deviceCheckId}
</set>
</update>
<select id="selectById" parameterType="String" resultType="DeviceCheck">
select * from device_check where device_check_id = #{deviceCheckId}
</select>
</mapper>
add.html
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>欢迎页面-X-admin2.2</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/css/font.css}">
<link rel="stylesheet" th:href="@{/css/xadmin.css}">
<script th:src="@{/js/jquery.min.js}" charset="utf-8"></script>
<script th:src="@{/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/js/xadmin.js}"></script>
<!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form">
<div class="layui-form-item">
<label for="deviceCheckId" class="layui-form-label">
<span class="x-red">*</span>设备例检编号</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckId" name="deviceCheckId" required="" lay-verify="nikename" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="deviceId" class="layui-form-label">
<span class="x-red">*</span>设备编号</label>
<div class="layui-input-inline">
<input type="text" id="deviceId" name="deviceId" required="" lay-verify="nikename" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="device.deviceName" class="layui-form-label">
<span class="x-red">*</span>设备名称</label>
<div class="layui-input-inline">
<input type="text" id="device.deviceName" name="device.deviceName" required="" lay-verify="nikename" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckEmpId" class="layui-form-label">
<span class="x-red">*</span>例检人</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckEmpId" name="deviceCheckEmpId" required="" lay-verify="nikename" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckDate" class="layui-form-label">
<span class="x-red">*</span>例检时间 </label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckDate" name="deviceCheckDate" required="" lay-verify="nikename" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckResult" class="layui-form-label">
<span class="x-red">*</span>例检结果</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckResult" name="deviceCheckResult" required="" lay-verify="nikename" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckFaultId" class="layui-form-label">
<span class="x-red">*</span>例检故障编号</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckFaultId" name="deviceCheckFaultId" required="" lay-verify="nikename" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<button class="layui-btn" lay-filter="add" lay-submit="">增加</button>
</div>
</form>
</div>
</div>
<script th:inline="javascript">
var ctx= [[${#httpServletRequest.getContextPath()}]];
//注意!
layui.use(['form', 'layer','jquery'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
});
//监听提交
form.on('submit(add)',
function(data) {
console.log(data);
$.ajax({
type:"POST",
url:ctx+"/devicecheck/add",
data: JSON.stringify(data.field),
// 设置请求头为json格式
contentType: "application/json;charset=utf-8",
success(res){
console.log(res)
if(res.success){
layer.alert(res.msg, {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg)
}
}
})
return false;
});
});</script>
</body>
</html>
edit.html
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>欢迎页面-X-admin2.2</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/css/font.css}">
<link rel="stylesheet" th:href="@{/css/xadmin.css}">
<script th:src="@{/js/jquery.min.js}" charset="utf-8"></script>
<script th:src="@{/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/js/xadmin.js}"></script>
<!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form">
<div class="layui-form-item">
<label for="deviceCheckId" class="layui-form-label">
<span class="x-red">*</span>设备例检编号</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckId" name="deviceCheckId" required="" lay-verify="nikename"
autocomplete="off" class="layui-input" th:value="${dev.deviceCheckId}"></div>
</div>
<div class="layui-form-item">
<label for="deviceId" class="layui-form-label">
<span class="x-red">*</span>设备编号</label>
<div class="layui-input-inline">
<input type="text" id="deviceId" name="deviceId" required="" lay-verify="nikename"
autocomplete="off" class="layui-input" th:value="${dev.deviceId}"></div>
</div>
<div class="layui-form-item">
<label for="device.deviceName" class="layui-form-label">
<span class="x-red">*</span>设备名称</label>
<div class="layui-input-inline">
<input type="text" id="device.deviceName" name="device.deviceName" required="" lay-verify="nikename"
autocomplete="off" class="layui-input" th:value="${dev?.device?.deviceName}"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckEmpId" class="layui-form-label">
<span class="x-red">*</span>例检人</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckEmpId" name="deviceCheckEmpId" required="" lay-verify="nikename"
autocomplete="off" class="layui-input" th:value="${dev.deviceCheckEmpId}"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckDate" class="layui-form-label">
<span class="x-red">*</span>例检时间 </label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckDate" name="deviceCheckDate" required="" lay-verify="nikename"
autocomplete="off" class="layui-input" th:value="${dev.deviceCheckDate}"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckResult" class="layui-form-label">
<span class="x-red">*</span>例检结果</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckResult" name="deviceCheckResult" required="" lay-verify="nikename"
autocomplete="off" class="layui-input" th:value="${dev.deviceCheckResult}"></div>
</div>
<div class="layui-form-item">
<label for="deviceCheckFaultId" class="layui-form-label">
<span class="x-red">*</span>例检故障编号</label>
<div class="layui-input-inline">
<input type="text" id="deviceCheckFaultId" name="deviceCheckFaultId" required="" lay-verify="nikename"
autocomplete="off" class="layui-input" th:value="${dev.deviceCheckFaultId}"></div>
</div>
<div class="layui-form-item">
<button class="layui-btn" lay-filter="add" lay-submit="">增加</button>
</div>
</form>
</div>
</div>
<script th:inline="javascript">
var ctx= [[${#httpServletRequest.getContextPath()}]];
layui.use(['form', 'layer','jquery'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//自定义验证规则
form.verify({
});
//监听提交
form.on('submit(add)',
function(data) {
console.log(data);
$.ajax({
type:"POST",
url:ctx+"/devicecheck/edit",
data: JSON.stringify(data.field),
// 设置请求头为json格式
contentType: "application/json;charset=utf-8",
success(res){
console.log(res)
if(res.success){
layer.alert(res.msg, {
icon: 6
},
function() {
//关闭当前frame
xadmin.close();
// 可以对父窗口进行刷新
xadmin.father_reload();
});
}else{
layer.alert(res.msg)
}
}
})
return false;
});
});</script>
</body>
</html>
list.html
<!DOCTYPE html>
<html class="x-admin-sm" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>欢迎页面-X-admin2.2</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
<link rel="stylesheet" th:href="@{/css/font.css}">
<link rel="stylesheet" th:href="@{/css/xadmin.css}">
<script th:src="@{/js/jquery.min.js}" charset="utf-8"></script>
<script th:src="@{/lib/layui/layui.js}" charset="utf-8"></script>
<script type="text/javascript" th:src="@{/js/xadmin.js}"></script>
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<link th:href="@{https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css}" rel="stylesheet">
<script th:src="@{https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js}"></script>
<link rel="stylesheet" th:href="@{/lib/summernote/summernote.min.css}">
<script th:src="@{/lib/summernote/summernote.min.js}"></script>
</head>
<body>
<div class="x-nav">
<span class="layui-breadcrumb">
<a href="">首页</a>
<a href="">演示</a>
<a>
<cite>导航元素</cite></a>
</span>
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body ">
<form class="layui-form layui-col-space5">
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="开始日" name="start" id="start">
</div>
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" autocomplete="off" placeholder="截止日" name="end" id="end">
</div>
<div class="layui-inline layui-show-xs-block">
<input type="hidden" name="pageNum" th:value="1">
<input type="hidden" name="pageSize" th:value="5">
<input type="text" name="deviceCheckId" placeholder="请输入用户名" autocomplete="off" class="layui-input">
</div>
<div class="layui-inline layui-show-xs-block">
<button class="layui-btn" lay-submit="" lay-filter="sreach"><i class="layui-icon"></i></button>
</div>
</form>
</div>
<div class="layui-card-header">
<button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除</button>
<button class="layui-btn" th:onclick="|xadmin.open('添加用户','@{/devicecheck/add}',800,600)|"><i class="layui-icon"></i>添加</button>
</div>
<div class="layui-card-body layui-table-body layui-table-main">
<table class="layui-table layui-form">
<thead>
<tr>
<th>
<input type="checkbox" lay-filter="checkall" name="" lay-skin="primary">
</th>
<th>设备例检编号</th>
<th>设备编号</th>
<th>设备名称</th>
<th>例检人</th>
<th>例检时间</th>
<th>例检结果</th>
<th>例检故障编号</th>
<th>状态</th>
<th>操作</th></tr>
</thead>
<tbody>
<tr th:each="item:${pageInfo.list}" th:object="${item}">
<td>
<input type="checkbox" name="id" value="1" lay-skin="primary">
</td>
<td th:text="*{deviceCheckId}"></td>
<td th:text="*{device.deviceId}"></td>
<!-- 设备名称 改一下eidt的地址- 实体类中加 子实体类->
<td th:text="*{device.deviceName}"></td>-->
<td><a th:text="*{device.deviceName}" style="color: #0000ff"
th:onclick="|xadmin.open('编辑','@{/device/edit/(id=*{device.deviceId})}',800,600)|" href="javascript:;"></a></td>
<td><a th:text="*{employee.empName}" style="color: #0000ff" th:onclick="|xadmin.open('编辑','@{/employee/edit/(id=*{employee.empId})}',800,600)|" href="javascript:;"></a></td>
<td th:text="*{deviceCheckDate}"></td>
<td th:text="*{deviceCheckResult}"></td>
<td th:text="*{deviceCheckFaultId}"></td>
<td class="td-status">
<span class="layui-btn layui-btn-normal layui-btn-mini">已启用</span></td>
<td class="td-manage">
<a onclick="member_stop(this,'10001')" href="javascript:;" title="启用">
<i class="layui-icon"></i>
</a>
<a title="编辑" th:onclick="|xadmin.open('编辑','@{/devicecheck/edit/(id=${item.deviceCheckId})}',800,600)|" href="javascript:;">
<i class="layui-icon"></i>
</a>
<a onclick="xadmin.open('修改密码','member-password.html',600,400)" title="修改密码" href="javascript:;">
<i class="layui-icon"></i>
</a>
<a title="删除" th:data-id="*{deviceCheckId}" th:onclick="|member_del(this,this.dataset.id)|" href="javascript:;">
<i class="layui-icon"></i>
</a>
</td>
</tr>
</tbody>
</table>
</div>
<div class="layui-card-body ">
<div class="page" id="page">
<div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<script th:inline="javascript">
layui.use(['laydate','form','laypage'], function(){
var laydate = layui.laydate;
var form = layui.form;
var laypage = layui.laypage;
// 监听全选
form.on('checkbox(checkall)', function(data){
if(data.elem.checked){
$('tbody input').prop('checked',true);
}else{
$('tbody input').prop('checked',false);
}
form.render('checkbox');
});
// 打开本页面执行实例
//执行一个laypage实例
laypage.render({
// 分页按钮的id
elem: 'page' //注意,这里的 test1 是 ID,不用加 # 号
//数据总数,从服务端得到
, count: [[${pageInfo.total}]],
limit: [[${pageInfo.pageSize}]],
curr: [[${pageInfo.pageNum}]],
jump(obj, first) {
//首次不执行
if (!first) {
// 做一个界面跳转
window.location.href = ctx + "/devicecheck/list?pageNum=" + obj.curr + "&pageSize=" + obj.limit;
}
}
});
//执行一个laydate实例
laydate.render({
elem: '#start' //指定元素
});
//执行一个laydate实例
laydate.render({
elem: '#end' //指定元素
});
});
/*用户-停用*/
function member_stop(obj,id){
layer.confirm('确认要停用吗?',function(index){
if($(obj).attr('title')=='启用'){
//发异步把用户状态进行更改
$(obj).attr('title','停用')
$(obj).find('i').html('');
$(obj).parents("tr").find(".td-status").find('span').addClass('layui-btn-disabled').html('已停用');
layer.msg('已停用!',{icon: 5,time:1000});
}else{
$(obj).attr('title','启用')
$(obj).find('i').html('');
$(obj).parents("tr").find(".td-status").find('span').removeClass('layui-btn-disabled').html('已启用');
layer.msg('已启用!',{icon: 5,time:1000});
}
});
}
/*用户-删除*/
var ctx = [[${#httpServletRequest.getContextPath()}]];
function member_del(obj,id){
layer.confirm('确认要删除?',function(index){
$.ajax({
url: ctx+"/devicecheck/delete?id=" + id,
type: "DELETE",
success(res){
if (res.success){
$(obj).parents("tr").remove();
layer.msg('已删除!',{icon:1,time:1000});
}else{
layer.msg(res.msg());
}
}
});
});
}
function delAll (argument) {
var ids = [];
// 获取选中的id
$('tbody input').each(function(index, el) {
if($(this).prop('checked')){
ids.push($(this).val())
}
});
layer.confirm('确认要删除吗?'+ids.toString(),function(index){
//捉到所有被选中的,发异步进行删除
layer.msg('删除成功', {icon: 1});
$(".layui-form-checked").not('.header').parents('tr').remove();
});
}
</script>
</html>
列表细节点
没实现分页前
@RequestMapping("/list")
private String list(ModelMap modelMap, DeviceCheck deviceCheck){
modelMap.addAttribute("list",deviceCheckService.list(deviceCheck));
return "devicecheck/listt";
}
模板引擎,改样式
tr中遍历,td中循环获取。可能会涉及到联查。
更改增删改查的路由。 两种不同的写法