• LayUI之CRUD


    目录

    一、用户管理后台代码

    二、用户新增

    三、编辑和删除

    一、用户管理后台代码

    了解一下数据库中的用户表t_oa_user

    select *
    ,
    (case rid
    when 1 then '管理员'
    when 2 then '发起者'
    when 3 then '审批者'
    when 4 then '参与者'
    when 5 then '会议室管理员'
    else '其他' end ) roleName 
    FROM t_oa_user

    结果:

     写UserDao

    1. package com.zking.dao;
    2. import java.sql.SQLException;
    3. import java.util.List;
    4. import java.util.Map;
    5. import com.zking.entity.User;
    6. import com.zking.util.BaseDao;
    7. import com.zking.util.PageBean;
    8. public class UserDao extends BaseDao {
    9. public User login(User user) throws Exception {
    10. String sql = "select * from t_oa_user where loginName='"+user.getLoginName()+"' and pwd='"+user.getPwd()+"' ";
    11. // return super.executeQuery(sql, clz, pageBean);
    12. //根据sql查询符合条件的用户,通常只会返回一条数据
    13. List users = super.executeQuery(sql, User.class,null);
    14. return users == null || users.size() == 0 ? null : users.get(0);
    15. }
    16. // 查询用户信息及对应的角色 角色是通过case when得到的
    17. public List> list(User user,PageBean pageBean) throws Exception{
    18. String sql = "select * \r\n " +
    19. ", \r\n " +
    20. "(case rid \r\n " +
    21. "when 1 then '管理员' \r\n" +
    22. "when 2 then '发起者' \r\n" +
    23. "when 3 then '审批者' \r\n" +
    24. "when 4 then '参与者' \r\n" +
    25. "when 5 then '会议室管理员' \r\n" +
    26. "else '其他' end ) roleName \r\n" +
    27. "FROM t_oa_user where 1 = 1";
    28. String name = user.getName();
    29. if(com.zking.util.StringUtils.isNotBlank(name)) {
    30. sql += " and name like '%"+name+"%'";
    31. }
    32. //当实体类的属性完全包含数据库查询出来的列段的时候使用
    33. // super.executeQuery(sql, User.class, pageBean) 返回List>,对应的是联表查询,单个实体类对象,不完全包含查询的列段
    34. return super.executeQuery(sql, pageBean);
    35. }
    36. public int add(User user) throws Exception {
    37. String sql = "insert into t_oa_user(name,loginName,pwd) values(?,?,?)";
    38. return super.executeUpdate(sql,user,new String[] {"name","loginName","pwd"});
    39. }
    40. public int del(User user) throws Exception {
    41. String sql = "delete from t_oa_user where id=?";
    42. return super.executeUpdate(sql,user,new String[] {"id"});
    43. }
    44. public int edit(User user) throws Exception {
    45. String sql = "update t_oa_user set name=?,loginName=?,pwd=? where id=?";
    46. return super.executeUpdate(sql,user,new String[] {"name","loginName","pwd","id"});
    47. }
    48. }

    测试:

    1. package com.zking.dao;
    2. import static org.junit.Assert.*;
    3. import java.util.List;
    4. import java.util.Map;
    5. import org.junit.Test;
    6. import com.zking.entity.User;
    7. import com.zking.util.PageBean;
    8. public class UserDaoTest {
    9. private UserDao userDao = new UserDao();
    10. @Test
    11. public void testList() {
    12. User user = new User();
    13. PageBean pageBean = new PageBean();
    14. try {
    15. List> list = userDao.list(user, pageBean);
    16. for (Map map : list) {
    17. //System.out.println(map);
    18. }
    19. } catch (Exception e) {
    20. // TODO Auto-generated catch block
    21. e.printStackTrace();
    22. }
    23. }
    24. @Test
    25. public void testAdd() {
    26. User user = new User();
    27. user.setName("111");
    28. user.setLoginName("aaa");
    29. user.setPwd("123456");
    30. try {
    31. userDao.add(user);
    32. } catch (Exception e) {
    33. // TODO Auto-generated catch block
    34. e.printStackTrace();
    35. }
    36. }
    37. @Test
    38. public void testDel() {
    39. User user = new User();
    40. user.setId(14L);
    41. try {
    42. userDao.del(user);
    43. } catch (Exception e) {
    44. // TODO Auto-generated catch block
    45. e.printStackTrace();
    46. }
    47. }
    48. @Test
    49. public void testEdit() {
    50. User user = new User();
    51. user.setName("abc");
    52. user.setPwd("666");
    53. user.setId(13L);
    54. try {
    55. userDao.edit(user);
    56. } catch (Exception e) {
    57. // TODO Auto-generated catch block
    58. e.printStackTrace();
    59. }
    60. }
    61. }

     测试查询所有的方法

     测试增加的方法,再从数据库中查询

     测试修改

     测试删除

     再写UserAction

    1. package com.zking.web;
    2. import java.util.HashMap;
    3. import java.util.List;
    4. import java.util.Map;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import org.apache.catalina.util.RequestUtil;
    8. import com.zking.dao.UserDao;
    9. import com.zking.entity.User;
    10. import com.zking.framework.ActionSupport;
    11. import com.zking.framework.ModelDriver;
    12. import com.zking.util.PageBean;
    13. import com.zking.util.R;
    14. import com.zking.util.ResponseUtil;
    15. public class UserAction extends ActionSupport implements ModelDriver{
    16. private User user = new User();
    17. private UserDao userDao = new UserDao();
    18. // 写一个方法处理前台的请求
    19. // public String login(HttpServletRequest req, HttpServletResponse resp) {
    20. // Map map = new HashMap();
    21. // if("zhangsan".equals(user.getUsername()) && "123456".equals(user.getPassword())) {
    22. 登录成功
    23. // map.put("code", 200);
    24. // map.put("msg", "成功");
    25. //
    26. // }
    27. // else {
    28. 登录失败
    29. // map.put("code", 0);
    30. // map.put("msg", "账户或者密码错误");
    31. // }
    32. // try {
    33. // ResponseUtil.writeJson(resp, map);
    34. // } catch (Exception e) {
    35. // // TODO Auto-generated catch block
    36. // e.printStackTrace();
    37. // }
    38. // return null;
    39. // }
    40. public String login(HttpServletRequest req, HttpServletResponse resp) {
    41. try {
    42. User u = userDao.login(user);
    43. //通过账户名密码查到了用户记录
    44. if(u != null) {
    45. // 登录成功
    46. //ResponseUtil.writeJson(resp, new R().data("code", 200).data("msg","成功"));
    47. ResponseUtil.writeJson(resp, R.ok(200, "成功"));
    48. }
    49. else {
    50. // 登录失败
    51. //ResponseUtil.writeJson(resp, new R().data("code",0).data("msg","账户或密码错误"));
    52. ResponseUtil.writeJson(resp, R.error(0, "账户或密码错误"));
    53. }
    54. } catch (Exception e) {
    55. // TODO: handle exception
    56. }
    57. return null;
    58. }
    59. //用户查询
    60. public String list(HttpServletRequest req, HttpServletResponse resp) {
    61. try {
    62. PageBean pageBean = new PageBean();
    63. pageBean.setRequest(req);
    64. List> users = userDao.list(user, pageBean);
    65. // 注意:layui中的数据表格的格式
    66. ResponseUtil.writeJson(resp, R.ok(0, "用户数据查询成功",pageBean.getTotal(),users));
    67. } catch (Exception e) {
    68. // TODO: handle exception
    69. e.printStackTrace();
    70. try {
    71. ResponseUtil.writeJson(resp, R.error(0, "用户数据查询失败"));
    72. } catch (Exception e2) {
    73. // TODO: handle exception
    74. e2.printStackTrace();
    75. }
    76. }
    77. return null;
    78. }
    79. public String add(HttpServletRequest req, HttpServletResponse resp) {
    80. try {
    81. //影响行数
    82. int rs = userDao.add(user);
    83. if(rs>0) {
    84. ResponseUtil.writeJson(resp, R.ok(200, "用户数据新增成功"));
    85. }
    86. else {
    87. ResponseUtil.writeJson(resp, R.error(0, "用户数据新增失败"));
    88. }
    89. } catch (Exception e) {
    90. // TODO: handle exception
    91. e.printStackTrace();
    92. try {
    93. ResponseUtil.writeJson(resp, R.error(0, "用户数据查询失败"));
    94. } catch (Exception e2) {
    95. // TODO: handle exception
    96. e2.printStackTrace();
    97. }
    98. }
    99. return null;
    100. }
    101. public String del(HttpServletRequest req, HttpServletResponse resp) {
    102. try {
    103. //影响行数
    104. int rs = userDao.del(user);
    105. if(rs>0) {
    106. ResponseUtil.writeJson(resp, R.ok(200, "用户数据删除成功"));
    107. }
    108. else {
    109. ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
    110. }
    111. } catch (Exception e) {
    112. // TODO: handle exception
    113. e.printStackTrace();
    114. try {
    115. ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
    116. } catch (Exception e2) {
    117. // TODO: handle exception
    118. e2.printStackTrace();
    119. }
    120. }
    121. return null;
    122. }
    123. public String edit(HttpServletRequest req, HttpServletResponse resp) {
    124. try {
    125. //影响行数
    126. int rs = userDao.edit(user);
    127. if(rs>0) {
    128. ResponseUtil.writeJson(resp, R.ok(200, "用户数据修改成功"));
    129. }
    130. else {
    131. ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
    132. }
    133. } catch (Exception e) {
    134. // TODO: handle exception
    135. e.printStackTrace();
    136. try {
    137. ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
    138. } catch (Exception e2) {
    139. // TODO: handle exception
    140. e2.printStackTrace();
    141. }
    142. }
    143. return null;
    144. }
    145. @Override
    146. public User getModel() {
    147. return user;
    148. }
    149. }

    二、用户新增

    userManage.jsp

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@include file="/common/header.jsp" %>
    4. html >
    5. <html>
    6. <head>
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    8. <script src="static/js/system/userManage.js">script>
    9. <title>用户管理title>
    10. head>
    11. <body>
    12. <div class="layui-form-item">
    13. <div class="layui-inline">
    14. <label class="layui-form-label">用户名:label>
    15. <div class="layui-input-inline">
    16. <input type="text" id="name" placeholder="请输入用户名" autocomplete="off" class="layui-input">
    17. div>
    18. div>
    19. <div class="layui-inline">
    20. <div class="layui-input-inline">
    21. <button id="btn_search" type="button" class="layui-btn layui-btn-normal">
    22. <i class="layui-icon layui-icon-search">i>
    23. 查询
    24. button>
    25. <button id="btn_add" type="button" class="layui-btn">新增button>
    26. div>
    27. div>
    28. div>
    29. <table id="tb" lay-filter="tb" class="layui-table" style="margin-top:-15px;">table>
    30. <script type="text/html" id="toolbar">
    31. <button class="layui-btn layui-btn-sm" lay-event="edit">编辑button>
    32. <button class="layui-btn layui-btn-sm" lay-event="del">删除button>
    33. <button class="layui-btn layui-btn-sm" lay-event="reset">重置密码button>
    34. script>
    35. body>
    36. html>

    userManage.js

    1. let layer,$,table;
    2. var row;
    3. layui.use(['jquery','layer','table'],function(){
    4. layer=layui.layer,
    5. $=layui.jquery,
    6. table=layui.table;
    7. //初始化表格
    8. initTable();
    9. //绑定查询按钮的点击事件
    10. $('#btn_search').click(function(){
    11. query();
    12. });
    13. //绑定新增按钮的点击事件
    14. $('#btn_add').click(function(){
    15. row=null;
    16. open('新增');
    17. });
    18. });
    19. //1.初始化数据表格
    20. function initTable(){
    21. table.render({ //执行渲染
    22. elem: '#tb', //指定原始表格元素选择器(推荐id选择器)
    23. // url: 'user.action?methodName=list', //请求地址
    24. height: 340, //自定义高度
    25. loading: false, //是否显示加载条(默认 true)
    26. cols: [[ //设置表头
    27. {field: 'id', title: '用户编号', width: 120},
    28. {field: 'name', title: '用户名', width: 120},
    29. {field: 'loginName', title: '登录账号', width: 140},
    30. {field: '', title: '操作', width: 220,toolbar:'#toolbar'},
    31. ]]
    32. });
    33. //在页面中的中必须配置lay-filter="tb_goods"属性才能触发属性!!!
    34. table.on('tool(tb)', function (obj) {
    35. row = obj.data;
    36. if (obj.event == "edit") {
    37. open("编辑");
    38. }else if(obj.event == "del"){
    39. layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
    40. $.post($("#ctx").val()+'/user.action',{
    41. 'methodName':'del',
    42. 'id':row.id
    43. },function(rs){
    44. if(rs.success){
    45. //调用查询方法刷新数据
    46. query();
    47. }else{
    48. layer.msg(rs.msg,function(){});
    49. }
    50. },'json');
    51. layer.close(index);
    52. });
    53. }else{
    54. }
    55. });
    56. }
    57. //2.点击查询
    58. function query(){
    59. table.reload('tb', {
    60. url: $("#ctx").val()+'/user.action', //请求地址
    61. method: 'POST', //请求方式,GET或者POST
    62. loading: true, //是否显示加载条(默认 true)
    63. page: true, //是否分页
    64. where: { //设定异步数据接口的额外参数,任意设
    65. 'methodName':'list',
    66. 'name':$('#name').val()
    67. },
    68. request: { //自定义分页请求参数名
    69. pageName: 'page', //页码的参数名称,默认:page
    70. limitName: 'rows' //每页数据量的参数名,默认:limit
    71. }
    72. });
    73. }
    74. //3.对话框
    75. function open(title){
    76. layer.open({
    77. type: 2, //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    78. title:title,
    79. area: ['660px', '340px'], //宽高
    80. skin: 'layui-layer-rim', //样式类名
    81. content: $("#ctx").val()+'/jsp/system/userEdit.jsp', //书本编辑页面
    82. btn:['保存','关闭'],
    83. yes: function(index, layero){
    84. //jquery.find
    85. //调用子页面中提供的getData方法,快速获取子页面的form表单数据
    86. let data= $(layero).find("iframe")[0].contentWindow.getData();
    87. console.log(data);
    88. //判断title标题
    89. let methodName="add";
    90. if(title=="编辑")
    91. methodName="edit";
    92. $.post($("#ctx").val()+'/user.action?methodName='+methodName,
    93. data,function(rs){
    94. if(rs.success){
    95. //关闭对话框
    96. layer.closeAll();
    97. //调用查询方法刷新数据
    98. query();
    99. }else{
    100. layer.msg(rs.msg,function(){});
    101. }
    102. },'json');
    103. },
    104. btn2: function(index, layero){
    105. layer.closeAll();
    106. },
    107. });
    108. }
    109. 从main.jsp运行点击用户管理再点击查询

       

       这时候的新增还没有生效

      header.jsp

      1. <%@ page language="java" contentType="text/html; charset=UTF-8"
      2. pageEncoding="UTF-8"%>
      3. <link rel="stylesheet"
      4. href="${pageContext.request.contextPath }/static/js/layui/css/layui.css">
      5. <script type="text/javascript"
      6. src="${pageContext.request.contextPath }/static/js/layui/layui.js">script>
      7. <base href="${pageContext.request.contextPath }/"/>
      8. <input id="ctx" value="${pageContext.request.contextPath }" type="hidden"/>
      9. <title>玉渊工作室title>

       userEdit.jsp

      1. <%@ page language="java" contentType="text/html; charset=UTF-8"
      2. pageEncoding="UTF-8"%>
      3. <%@include file="/common/header.jsp"%>
      4. html>
      5. <html>
      6. <head>
      7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      8. <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/system/userEdit.js">script>
      9. <title>用户新增title>
      10. head>
      11. <style>
      12. .layui-form-select dl{
      13. max-height:150px;
      14. }
      15. style>
      16. <body>
      17. <div style="padding:10px;">
      18. <form class="layui-form layui-form-pane" lay-filter="user">
      19. <input type="hidden" name="id"/>
      20. <div class="layui-form-item">
      21. <label class="layui-form-label">用户名称label>
      22. <div class="layui-input-block">
      23. <input type="text" id="name" name="name" autocomplete="off" placeholder="请输入用户名" class="layui-input">
      24. div>
      25. div>
      26. <div class="layui-form-item">
      27. <label class="layui-form-label">用户角色label>
      28. <div class="layui-input-block">
      29. <select name="rid">
      30. <option value="">---请选择---option>
      31. <option value="1">管理员option>
      32. <option value="2">发起者option>
      33. <option value="3">审批者option>
      34. <option value="4">参与者option>
      35. <option value="5">会议管理员option>
      36. select>
      37. div>
      38. div>
      39. <div class="layui-form-item">
      40. <label class="layui-form-label">登录账号label>
      41. <div class="layui-input-block">
      42. <input type="text" name="loginName" lay-verify="required" placeholder="请输入账号" autocomplete="off" class="layui-input">
      43. div>
      44. div>
      45. <div class="layui-form-item">
      46. <label class="layui-form-label">登录密码label>
      47. <div class="layui-input-block">
      48. <input type="password" name="pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
      49. div>
      50. div>
      51. form>
      52. div>
      53. body>
      54. html>

       点击新增

       可以看到已经成功了

      三、编辑和删除

       userEdit.js

      1. let layer,form,$;
      2. layui.use(['layer','form','jquery'],function(){
      3. layer=layui.layer,form=layui.form,$=layui.jquery;
      4. initData();
      5. });
      6. function initData(){
      7. console.log(parent.row);
      8. if(null!=parent.row){
      9. //因为layui.each内部的逻辑问题导致的所以要先深拷贝一份然后再去val
      10. //parent.row:表格行对象
      11. //table的数据在父页面userManager.js
      12. //点击编辑按钮的时候,当前
      13. form.val('user',$.extend({}, parent.row||{}));
      14. $('#name').attr('readonly','readonly');
      15. }
      16. }
      17. function getData(){
      18. //
      19. //取 user from中的值
      20. return form.val('user');
      21. }

      点击编辑

       

       点击删除

       可以看到用户编号为16的没有了

    110. 相关阅读:
      linux-文件权限
      【Rust日报】2022-08-14 Actix Web 的可扩展速率限制中间件
      神经网络算法数学建模,神经网络模型数据处理
      java计算机毕业设计校园办公管理系统源代码+数据库+系统+lw文档
      Centos - 虚拟机初始化网络配置
      Halcon WPF 开发学习笔记(3):WPF+Halcon初步开发
      MySQL 锁的内存结构
      听GPT 讲Rust源代码--library/core/src(6)
      【Spatial-Temporal Action Localization(六)】论文阅读2021年
      Vue父子之间最重要的两个传值方式你都知道吗?
    111. 原文地址:https://blog.csdn.net/weixin_62735525/article/details/125891797