LayUI之CRUD(增删改查功能实现)项目案例

目录

前言

1. Dao层代码的编写

1.1 UserDao类代码的优化

1.2 Dao方法测试类UserDaoTest

1.2.1 测试查询所有及模糊查询的结果

 1.2.2 测试删除方法

 1.2.3 测试新增方法

 1.2.4 测试修改方法

 1.2.5 测试成功的标准

 2. 编写页面显示对应的数据格式

2.1 前往LayUI官网查询页面效果对应的数据格式(以开启头部选项栏为例)

 数据格式

 2.2 编写UserAction类代码

2.2.1 R工具类优化UserAction类代码

2.2.2 验证数据是否是我们所需的数据格式

2.2.3 UserAction(R工具类优化过后)

3..查询前端代码实现

3.1 编写用户管理对应的jsp代码

userManage.jsp代码

userEdit.jsp代码

3.2 .编写对应的js代码实现数据绑定和功能实现

userManage.js代码

userEdit.js代码

注意事项

4. 项目演示

4.1 查询及模糊查询

 4.2 页面的删除

 4.3 页面的新增

​编辑 4.4 页面的修改

 结束语


前言

本期博客基于上期博客——LayUI之选项卡,今天给大家带来的是一期项目案例的功能分享,主要是会议OA项目中用户管理里的功能分享,其中的功能包括用户数据页面显示及模糊查询、用户的删除、用户的修改、用户的新增四个功能效果,废话不多说我们直接上跟着我们的思维导图一起来看看吧。

 

1. Dao层代码的编写

1.1 UserDao类代码的优化

package com.YX.dao;

import java.util.List;
import java.util.Map;

import com.YX.entity.User;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;

public class UserDao extends BaseDao<User> {
	
    public List<User> list(User user, PageBean pageBean) throws Exception {
    	String sql="select * from t_oa_user where 1=1 ";
    	return super.executeQuery(sql, User.class, pageBean);
    }
    
    /**
     * 登陆方法
     * @param user
     * @return
     * @throws Exception
     */
    public User login(User user) throws Exception {
    	String sql="select * from t_oa_user where loginName = '"+user.getLoginName()+"' and pwd = '"+user.getPwd()+"'"; 
    	List<User> lst = super.executeQuery(sql, User.class,null );
    	if (lst != null && lst.size()==1 ) {
    		return lst.get(0);
		}
    	return null;
    }
    
    
    
    /**查询的方法
     * 查询结果带有身份的结果(带模糊查询)
     * @param user
     * @return
     * @throws Exception
     */
    public List<Map<String, Object>> UserRole(User user,PageBean pageBean) throws Exception {
//    	编写sql语句
    	String sql="SELECT\r\n" + 
    			"	u.*,\r\n" + 
    			"	(\r\n" + 
    			"CASE\r\n" + 
    			"	\r\n" + 
    			"	WHEN u.rid = '1' THEN\r\n" + 
    			"	'管理员' \r\n" + 
    			"	WHEN u.rid = '2' THEN\r\n" + 
    			"	'发起者' \r\n" + 
    			"	WHEN u.rid = '3' THEN\r\n" + 
    			"	'审批者' \r\n" + 
    			"	WHEN u.rid = '4' THEN\r\n" + 
    			"	'参与者' \r\n" + 
    			"	WHEN u.rid = '5' THEN\r\n" + 
    			"	'会议室管理员' ELSE '其他' \r\n" + 
    			"END \r\n" + 
    			"	) rname \r\n" + 
    			"FROM\r\n" + 
    			"t_oa_user u where 1=1 "; 
//    	获取模糊查询的内容
    	String name = user.getName();
//    	判空
    	if (StringUtils.isNotBlank(name)) {
			sql += " and name like '%"+name+"%'";
		}
    	
    	return super.executeQuery(sql, pageBean);
    }
    
    /**
     * 新增用户的方法
     * @param user
     * @return
     * @throws Exception
     */
    public int add(User user) throws Exception {
		String sql ="insert into t_oa_user(name,loginName,pwd) values(?,?,?)";
		return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd"});
		
	}
    
    /**
     * 删除用户的方法
     * @param user
     * @return
     * @throws Exception
     */
    public int del(User user) throws Exception {
		String sql ="delete from t_oa_user where id = ?";
		return super.executeUpdate(sql, user, new String[] {"id"});
	}
    
    /**
     * 修改用户的方法
     * @param user
     * @return
     * @throws Exception
     */
    public int edit(User user) throws Exception {
		String sql ="update t_oa_user set name=?,loginName=?,pwd=? where id = ?";
		return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd","id"});
	}
    
}

1.2 Dao方法测试类UserDaoTest

package com.YX.dao;

import java.util.List;
import java.util.Map;

import org.junit.Test;

import com.YX.entity.User;

/**dao方法junit测试类
 * @author 君易--鑨
 * 2023年7月14日下午8:42:00
 * 
 */
public class UserDaoTest {
	// 实例化Dao方法类
	private UserDao ud = new UserDao();

	@Test
	public void testUserRole() throws Exception {
		// 实例化实体对象用于存储查询的内容
		User user = new User();
		// user.setName("朱");
		// 调用查询方法
		List<Map<String, Object>> userRole = ud.UserRole(user, null);
		// 遍历输出
		for (Map<String, Object> u : userRole) {
			System.out.println(u);
		}

	}

	@Test
	public void testAdd() throws Exception {
		// 实例化实体对象用于新增用户的信息
		User user = new User();
		user.setName("君易");
		user.setLoginName("junyi");
		user.setPwd("1234");
		// 调用新增方法
		ud.add(user);
	}

	@Test
	public void testDel() throws Exception {
		// 实例化实体对象用于删除用户的信息
		User user = new User();
		user.setId(17);
		// 调用新增方法
		ud.del(user);
	}

	@Test
	public void testEdit() throws Exception {
		// 实例化实体对象用于修改用户的信息
		User user = new User();
		user.setId(17);
		user.setName("鑨");
		user.setLoginName("muyi");
		user.setPwd("1234");
		// 调用新增方法
		ud.edit(user);
	}

}

1.2.1 测试查询所有及模糊查询的结果

查询所有

 模糊查询的结果

 1.2.2 测试删除方法

 1.2.3 测试新增方法

 1.2.4 测试修改方法

 1.2.5 测试成功的标准

 2. 编写页面显示对应的数据格式

2.1 前往LayUI官网查询页面效果对应的数据格式(以开启头部选项栏为例)

 数据格式

 2.2 编写UserAction类代码

2.2.1 R工具类优化UserAction类代码
package com.zking.util;

import java.util.HashMap;

public class R extends HashMap{
	public R data(String key, Object value) {
		this.put(key, value);
		return this;
	}
	
	public static R ok(int code, String msg) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg);
		return r;
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.data("success", false).data("code", code).data("msg", msg);
		return r;
	}
	
	public static R ok(int code, String msg,Object data) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg).data("data", data);
		return r;
	}
	
	public static R ok(int code, String msg, long count, Object data) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg).data("count", count).data("data", data);
		return r;
	}
}
2.2.2 验证数据是否是我们所需的数据格式

 由上方动态图后页面显示的数据可知包含code、msg、count、data等我们所需的数据属性

2.2.3 UserAction(R工具类优化过后)
package com.YX.web;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.YX.dao.UserDao;
import com.YX.entity.User;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.PageBean;
import com.zking.util.R;
import com.zking.util.ResponseUtil;

/**请求类
 * @author 君易--鑨
 * 2023年7月14日下午9:31:44
 * 
 */
public class UserAction extends ActionSupport implements ModelDriver<User>{
//实例化实体对象和dao方法
	private User user=new User();
	private UserDao userdao=new UserDao();
	@Override
	public User getModel() {
		return user;
	}
	
		public void login(HttpServletRequest req, HttpServletResponse resp) {
			try {
//				调用登陆方法
				User u = userdao.login(user);
				ResponseUtil.writeJson(resp, u);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		/**
		 * 编写显示数据格式的请求
		 * @param req
		 * @param resp
		 */
		public void UserRole(HttpServletRequest req, HttpServletResponse resp) {
			try {
//				实例化分页工具类
				PageBean pageBean=new PageBean();
				pageBean.setRequest(req);
//				调用查询方法
				List<Map<String,Object>> userRole = userdao.UserRole(user, pageBean);
//				实例化Map集合存储对应数据格式的属性
				Map<String, Object> map=new HashMap<String, Object>();
//				设置添加属性
				ResponseUtil.writeJson(resp, R.ok(0, "查询成功", pageBean.getTotal(),userRole));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		/**
		 * 编写新增的请求
		 * @param req
		 * @param resp
		 */
		public void add(HttpServletRequest req, HttpServletResponse resp) {
			try {
//				调用新增方法
			    int add = userdao.add(user);
				ResponseUtil.writeJson(resp, R.ok(0, "新增成功"));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		/**
		 * 编写删除的请求
		 * @param req
		 * @param resp
		 */
		public void del(HttpServletRequest req, HttpServletResponse resp) {
			try {
//				调用新增方法
			    int del = userdao.del(user);
				ResponseUtil.writeJson(resp, R.ok(0, "删除成功"));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		
		public void edit(HttpServletRequest req, HttpServletResponse resp) {
			try {
//				调用新增方法
			    int edit = userdao.edit(user);
				ResponseUtil.writeJson(resp, R.ok(0, "修改成功"));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	

}

3..查询前端代码实现

3.1 编写用户管理对应的jsp代码

 去LayUI官网获取我们对应需要的页面样式jsp代码,将它们复制到我们的项目中,下面是我调整后的jsp代码

userManage.jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ include file="/common/header.jsp"%>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="static/js/system/userManage.js" charset="utf-8"></script>
</head>
<body>
 
 	<!-- 搜索栏 -->
	<div class="layui-form-item">
	  <div class="layui-inline">
	    <label class="layui-form-label">用户名:</label>
	    <div class="layui-input-inline">
	      <input type="text" id="name" placeholder="请输入用户名" autocomplete="off" class="layui-input">
	    </div>
	  </div>
	  
	  <div class="layui-inline">
	    <div class="layui-input-inline">
	      <button id="btn_search" type="button" class="layui-btn layui-btn-normal">
	      	<i class="layui-icon layui-icon-search"></i>
	      	查询
	      </button>
	      <button id="btn_add" type="button" class="layui-btn">新增</button>
	    </div>
	  </div>
	  
	</div>
 
<table class="layui-hide" id="test" lay-filter="test"></table>
 
<script type="text/html" id="toolbarDemo">
  <div class="layui-btn-container">
    <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
    <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
    <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
  </div>
</script>
 
<script type="text/html" id="barDemo">
  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
              
          

 


</body>
</html>

上面代码中我为包含js代码,我单独创建了一个文件夹存放页面对应的js代码,根据数据库中的数据信息创建了这个目录/WebContent/static/js/system/用与存放对应的js,上面的jsp文件也是如此。(如下图所示)

userEdit.jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="/common/header.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="static/js/system/userEdit.js"></script>
<title>用户新增</title>
</head>
<style>
.layui-form-select dl{
	max-height:150px;
}
</style>
<body>
<div style="padding:10px;">
    <form class="layui-form layui-form-pane" lay-filter="user">
        <input type="hidden" name="id"/>
        <div class="layui-form-item">
            <label class="layui-form-label">用户名称</label>
            <div class="layui-input-block">
                <input type="text" id="name" name="name" autocomplete="off" placeholder="请输入用户名" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">用户角色</label>
            <div class="layui-input-block">
                <select name="rid">
                    <option value="">---请选择---</option>
                    <option value="1">管理员</option>
                    <option value="2">发起者</option>
                    <option value="3">审批者</option>
                    <option value="4">参与者</option>
                    <option value="5">会议管理员</option>
                </select>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">登录账号</label>
            <div class="layui-input-block">
                <input type="text" name="loginName" lay-verify="required" placeholder="请输入账号" autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">登录密码</label>
            <div class="layui-input-block">
                <input type="password" name="pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
            </div>
        </div>
    </form>
</div>
</body>
</html>

3.2 .编写对应的js代码实现数据绑定和功能实现

userManage.js代码
var table,$,layer;
var row;
layui.use(['table','jquery','layer'], function(){
  table = layui.table,
  $=layui.jquery
  ,layer=layui.layer;
  
  initTable();
  
  //查询的点击事件
  $("#btn_search").click(function(){
	  query();
	  
  });
  
//  新增的点击事件
  $("#btn_add").click(function(){
	  row = null;
	  edit('新增界面');
  });
  
});


//打开新增界面实现新增功能
function edit(title){
	
	 layer.open({
	       type: 2,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
	       title:title,
	       area: ['660px', '340px'],   //宽高
	       skin: 'layui-layer-rim',    //样式类名
	       content: 'jsp/system/userEdit.jsp', //书本编辑页面
	       btn:['保存','关闭'],
	       yes: function(index, layero){
	    	   //调用子页面中提供的getData方法,快速获取子页面的form表单数据
	           let data= $(layero).find("iframe")[0].contentWindow.getData();
	           console.log(data);
	           //判断title标题
	           let methodName="add";
	           if(title=="编辑")
	        	   methodName="edit";
	           $.post('user.action?methodName='+methodName,
	        		   data,function(rs){
	        	   if(rs.success){
	        		   //关闭对话框
	        		   layer.closeAll();
	        		   //调用查询方法刷新数据
	        		   query();
	        	   }else{
	        		   layer.msg(rs.msg,function(){});
	        	   }
	           },'json');
	       },
	       btn2: function(index, layero){
	    	   layer.closeAll();
	       }
	    });
	
}


//表格重载
function query(){
	table.reload('test',{
		where: {
		  name:$("#name").val()
		}
	   ,request:{
		   pageName:'page'  //页码参数
		   ,limitName:'rows' //每页显示的页数参数
	   }
	});//重载数据
}

//表格数据查询初始化
function initTable(){
	table.render({
	    elem: '#test'
	    ,url:'user.action?methodName=UserRole'
	    ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
	    ,defaultToolbar: ['filter', 'exports', 'print', { //自定义头部工具栏右侧图标。如无需自定义,去除该参数即可
	      title: '提示'
	      ,layEvent: 'LAYTABLE_TIPS'
	      ,icon: 'layui-icon-tips'
	    }]
	    ,title: '用户数据表'
	    ,cols: [[
	      {type: 'checkbox', fixed: 'left'}
	      ,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true}
	      ,{field:'loginName', title:'账户名', width:120, edit: 'text'}
	      ,{field:'name', title:'用户名', width:150, edit: 'text', templet: function(res){
	        return '<em>'+ res.email +'</em>'
	      }}
	      ,{field:'pwd', title:'密码', width:80, edit: 'text', sort: true}
	      ,{field:'rname', title:'角色身份', width:100}
	      ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
	    ]]
	    ,page: true
	  });
	  
	 
	  
	  //监听行工具事件
	  table.on('tool(test)', function(obj){
	     row = obj.data;
	    //console.log(obj)
	    if(obj.event === 'del'){
	      layer.confirm('真的删除行么', function(index){
	    	  layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
				  $.post('user.action',{
					  'methodName':'del',
					  'id':row.id
				  },function(rs){
					  if(rs.success){
		        		   //调用查询方法刷新数据
		        		   query();
		        	   }else{
		        		   layer.msg(rs.msg,function(){});
		        	   }
				  },'json');
				  layer.close(index);
				});
	      });
	    } else if(obj.event === 'edit'){
	       edit('编辑');
	    }
	  });
}
userEdit.js代码
let layer,form,$;
layui.use(['layer','form','jquery'],function(){
	layer=layui.layer,form=layui.form,$=layui.jquery;
	initData();
});

function initData(){
	console.log(parent.row);
	if(null!=parent.row){
	     //因为layui.each内部的逻辑问题导致的所以要先深拷贝一份然后再去val
	     //parent.row:表格行对象
	     form.val('user',$.extend({}, parent.row||{}));
	     $('#name').attr('readonly','readonly');
	}
}

function getData(){
    return form.val('user');
}
注意事项
  1. 在使用编写js时导入项目要注意LayUI文件依赖版本,否则在运行项目的功能会实现不了,无法通过编译。
  2. 在相应jsp页面记得导入对应的页面的js代码,否则无法实现对应功能。

4. 项目演示

4.1 查询及模糊查询

 4.2 页面的删除

 4.3 页面的新增

 4.4 页面的修改

 在演示过程中出现了一个问题,就是在用户名显示一列,数据显示为undefind,但鼠标点击数据时又会显示出数据库中的数据,后期会进行优化。下面是我整个项目的目录。

 结束语

感谢老铁阅读本期博客,给博三连吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值