飞道的博客

spring boot+layui实现增删改查实战

400人阅读  评论(0)

说明:

    最近在做一个后台,希望用一个现成的前端模板,找了一圈发现Layui比较合适。我知道很多人都有这个需求,为了使大家快速上手,我把自己写的最实用的增删改查案例完整的展示出来。

 

需要源码的请留下邮箱!

 

Layui官网:https://www.layui.com/doc/

 

后台:spring boot2.0,数据的话用的list没连接数据库。

前端:layui-v2.5.5

 

启动后访问: http://localhost:8080/admin.html

 

页面展示:

 

操作展示:

 

开发步骤:

 

1.搭建spring boot工程,引入layui资源

这一步很简单, 我就省了。

 

2.编写前端页面admin.html

这一步可以拿网上的直接改的。改过之后如下:


  
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  6. <title>layout 后台大布局 - Layui </title>
  7. <link rel="stylesheet" href="js/layui/css/layui.css">
  8. </head>
  9. <body class="layui-layout-body">
  10. <div class="layui-layout layui-layout-admin">
  11. <div class="layui-header">
  12. <div class="layui-logo">layui 后台布局 </div>
  13. <!-- 头部区域(可配合layui已有的水平导航) -->
  14. <ul class="layui-nav layui-layout-left">
  15. <li class="layui-nav-item">
  16. <a href="">控制台 </a>
  17. </li>
  18. <li class="layui-nav-item">
  19. <a href="">商品管理 </a>
  20. </li>
  21. <li class="layui-nav-item">
  22. <a href="">用户 </a>
  23. </li>
  24. <li class="layui-nav-item">
  25. <a href="javascript:;">其它系统 </a>
  26. <dl class="layui-nav-child">
  27. <dd>
  28. <a href="">邮件管理 </a>
  29. </dd>
  30. <dd>
  31. <a href="">消息管理 </a>
  32. </dd>
  33. <dd>
  34. <a href="">授权管理 </a>
  35. </dd>
  36. </dl>
  37. </li>
  38. </ul>
  39. <ul class="layui-nav layui-layout-right">
  40. <li class="layui-nav-item">
  41. <a href="javascript:;">
  42. <img src="http://t.cn/RCzsdCq" class="layui-nav-img"> 贤心
  43. </a>
  44. <dl class="layui-nav-child">
  45. <dd>
  46. <a href="">基本资料 </a>
  47. </dd>
  48. <dd>
  49. <a href="">安全设置 </a>
  50. </dd>
  51. </dl>
  52. </li>
  53. <li class="layui-nav-item">
  54. <a href="">退了 </a>
  55. </li>
  56. </ul>
  57. </div>
  58. <div class="layui-side layui-bg-black">
  59. <div class="layui-side-scroll">
  60. <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
  61. <ul class="layui-nav layui-nav-tree" lay-filter="test">
  62. <li class="layui-nav-item layui-nav-itemed">
  63. <a class="" href="javascript:;">所有商品 </a>
  64. <dl class="layui-nav-child">
  65. <dd>
  66. <a href="javascript:;">列表一 </a>
  67. </dd>
  68. <dd>
  69. <a href="javascript:;">列表二 </a>
  70. </dd>
  71. <dd>
  72. <a href="javascript:;">列表三 </a>
  73. </dd>
  74. <dd>
  75. <a href="http://www.baidu.com">超链接 </a>
  76. </dd>
  77. </dl>
  78. </li>
  79. <li class="layui-nav-item">
  80. <a href="javascript:;">解决方案 </a>
  81. <dl class="layui-nav-child">
  82. <dd>
  83. <a href="javascript:;">列表一 </a>
  84. </dd>
  85. <dd>
  86. <a href="javascript:;">列表二 </a>
  87. </dd>
  88. <dd>
  89. <a href="">超链接 </a>
  90. </dd>
  91. </dl>
  92. </li>
  93. <li class="layui-nav-item">
  94. <a href="">云市场 </a>
  95. </li>
  96. <li class="layui-nav-item">
  97. <a href="">发布商品 </a>
  98. </li>
  99. </ul>
  100. </div>
  101. </div>
  102. <div class="layui-body">
  103. <!-- 内容主体区域 -->
  104. <div style="padding: 15px;">
  105. <!--<div class="demoTable" style="padding: 15px">
  106. 搜索:
  107. <div class="layui-inline">
  108. <input class="layui-input" id="find" autocomplete="off">
  109. </div>
  110. <button class="layui-btn" data-type="reload" id="queryRole">搜索</button>
  111. </div>-->
  112. <table id="tb-user" lay-filter="tb-user"> </table>
  113. </div>
  114. </div>
  115. <!--编辑表单-->
  116. <div class="layui-row" id="editUser" style="display:none;">
  117. <div class="layui-col-md10">
  118. <form class="layui-form layui-from-pane" id="saveUser" style="margin-top:20px">
  119. <div class="layui-form-item">
  120. <label class="layui-form-label">用户名 </label>
  121. <div class="layui-input-block">
  122. <input type="text" name="name" id="name" required lay-verify="required" autocomplete="off"
  123. class= "layui-input">
  124. </div>
  125. </div>
  126. <input type="hidden" name="id" id="id">
  127. <div class="layui-form-item">
  128. <label class="layui-form-label">城市 </label>
  129. <div class="layui-input-block">
  130. <input type="text" name="city" id="city" required lay-verify="required" autocomplete="off"
  131. class= "layui-input">
  132. </div>
  133. </div>
  134. <div class="layui-form-item">
  135. <label class="layui-form-label">出生日期 </label>
  136. <div class="layui-input-block">
  137. <input type="text" name="birthday" id="birthday" required lay-verify="required" autocomplete="off"
  138. class= "layui-input">
  139. </div>
  140. </div>
  141. <div class="layui-form-item" style="margin-top:40px" id="check">
  142. <div class="layui-input-block">
  143. <button class="layui-btn layui-btn-submit " lay-submit="" lay-filter="saveUser">保存 </button>
  144. <!--<button type="reset" class="layui-btn layui-btn-primary">重置</button>-->
  145. </div>
  146. </div>
  147. </form>
  148. </div>
  149. </div>
  150. <script type="text/html" id="toolbarDemo">
  151. <div class="layui-btn-container">
  152. <button class="layui-btn layui-btn-sm" lay-event="add"> <i class="layui-icon">&#xe608; </i>新增 </button>
  153. <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="remove"> <i class="layui-icon">&#xe640; </i>删除 </button>
  154. </div>
  155. <!--<div class="layui-btn-container">
  156. <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
  157. <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
  158. <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
  159. </div>-->
  160. </script>
  161. <script type="text/html" id="barDemo">
  162. <a class="layui-btn layui-btn-sm" lay-event="edit"> <i class="layui-icon">&#xe642; </i> </a>
  163. </script>
  164. <div class="layui-footer">
  165. <!-- 底部固定区域 -->
  166. © layui.com - 底部固定区域
  167. </div>
  168. </div>
  169. <script src="js/jquery-1.11.3.min.js"> </script>
  170. <script src="js/layui/layui.all.js"> </script>
  171. <script>
  172. var element, layer, laydate, table, form;
  173. $( function () {
  174. // 使用模块
  175. layui.use([ 'element', 'layer', 'laydate', 'table', 'form'], function () {
  176. element = layui.element;
  177. layer = layui.layer;
  178. laydate = layui.laydate;
  179. table = layui.table;
  180. form = layui.form;
  181. });
  182. laydate.render({
  183. elem: "#birthday",
  184. type: "date",
  185. format: "yyyy-MM-dd",
  186. value: ''
  187. });
  188. //第一个实例
  189. var userTable = table.render({
  190. elem: '#tb-user'
  191. , height: 515
  192. , url: '/api/layui/user/list' //数据接口
  193. , page: true //开启分页
  194. , toolbar: '#toolbarDemo'
  195. /*, response: {
  196. statusName: 'code', //规定返回的状态码字段为code
  197. statusCode: 200 //规定成功的状态码味200
  198. }*/
  199. /* , parseData: function (res) {
  200. return {
  201. "code": res.code, //解析接口状态
  202. "msg": res.msg, //解析提示文本
  203. "data": res.data //解析数据列表
  204. }
  205. }*/
  206. , cols: [[ //表头
  207. { type: 'checkbox', fixed: 'left'}
  208. , { field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left'}
  209. , { field: 'name', title: '用户名'}
  210. , { field: 'city', title: '城市'}
  211. , {
  212. field: 'birthday', title: '出生日期', templet: function (d) {
  213. var date = new Date(d.birthday)
  214. var year = date.getFullYear() + '年';
  215. var month = date.getMonth() + 1 + '月';
  216. var date = date.getDate() + '日';
  217. var date1 = [year, month, date].join( '')
  218. return date1;
  219. }
  220. }
  221. , { fixed: 'right', title: '操作', toolbar: '#barDemo', width: 120}
  222. ]]
  223. });
  224. //监听表单提交
  225. // 修改
  226. form.on( 'submit(saveUser)', function(data){
  227. layer.alert( JSON.stringify(data.field));
  228. $.ajax({
  229. url: '/api/layui/user/save',
  230. type: 'POST',
  231. contentType: "application/json",
  232. dataType: "json",
  233. data: JSON.stringify(data.field),
  234. success: function (result) {
  235. if (result.code == 200) {
  236. // layer.msg("修改成功!", {icon: 6});
  237. setTimeout( function () {
  238. layer.closeAll(); //关闭所有的弹出层
  239. userTable.reload();
  240. }, 300);
  241. } else {
  242. layer.msg( "操作失败!", { icon: 5});
  243. }
  244. }
  245. });
  246. return false;
  247. });
  248. //工具栏事件
  249. table.on( 'toolbar(tb-user)', function (obj) {
  250. var checkStatus = table.checkStatus(obj.config.id);
  251. var checkData = checkStatus.data;
  252. var ids=[];
  253. switch (obj.event) {
  254. // 新增
  255. case 'add':
  256. $( "#name").val( '');
  257. $( "#city").val( '');
  258. $( "#id").val( '');
  259. $( "#birthday").val( '');
  260. layer.open({
  261. type: 1,
  262. offset: '10px',
  263. title: "新增用户",
  264. area: [ '500px', '400px'],
  265. content: $( "#editUser")
  266. });
  267. break;
  268. // 删除
  269. case 'remove':
  270. if(checkData.length== 0){
  271. layer.alert( '请选择要操作的行');
  272. } else{
  273. layer.confirm( '确定要删除吗?', function (index) {
  274. for( var i= 0; i<checkData.length;i++){
  275. ids.push(checkData[i].id);
  276. }
  277. //layer.alert(JSON.stringify(ids));
  278. $.ajax({
  279. url: '/api/layui/user/remove',
  280. type: 'POST',
  281. contentType: "application/json",
  282. dataType: "json",
  283. data: JSON.stringify(ids),
  284. success: function (result) {
  285. if (result.code == 200) {
  286. setTimeout( function () {
  287. layer.closeAll(); //关闭所有的弹出层
  288. userTable.reload();
  289. }, 300);
  290. }
  291. }
  292. });
  293. });
  294. }
  295. break;
  296. case 'getCheckData':
  297. layer.alert( JSON.stringify(data));
  298. break;
  299. case 'getCheckLength':
  300. var data = checkStatus.data;
  301. layer.msg( '选中了:' + data.length + ' 个');
  302. break;
  303. case 'isAll':
  304. layer.msg(checkStatus.isAll ? '全选' : '未全选')
  305. break;
  306. }
  307. ;
  308. });
  309. // 监听工具条
  310. table.on( 'tool(tb-user)', function (obj) {
  311. var data = obj.data;
  312. // 修改
  313. if (obj.event === 'edit') {
  314. $( "#name").val(data.name);
  315. $( "#city").val(data.city);
  316. $( "#id").val(data.id);
  317. $( "#birthday").val(data.birthday);
  318. layer.open({
  319. type: 1,
  320. offset: '10px',
  321. title: "修改用户",
  322. area: [ '500px', '400px'],
  323. content: $( "#editUser")
  324. });
  325. }
  326. });
  327. });
  328. </script>
  329. </body>
  330. </html>

 

3.编写后端代码

3.1 创建用户实体


  
  1. package com.laoxu.test.helloweb.entity;
  2. import com.fasterxml.jackson.annotation.JsonFormat;
  3. import lombok.Data;
  4. import java.util.Date;
  5. /**
  6. * @Description: 用户实体
  7. * @Author laoxu
  8. * @Date 2019/12/21 9:56
  9. **/
  10. @Data
  11. public class LayuiUser {
  12. private int id;
  13. private String name;
  14. private String city;
  15. @JsonFormat(shape = JsonFormat.Shape.STRING, pattern= "yyyy-MM-dd")
  16. private Date birthday;
  17. public LayuiUser(){}
  18. public LayuiUser(int id, String name, String city, Date birthday) {
  19. this.id = id;
  20. this.name = name;
  21. this.city = city;
  22. this.birthday = birthday;
  23. }
  24. }

3.2 创建用户DAO


  
  1. package com.laoxu.test.helloweb.dao;
  2. import com.laoxu.test.helloweb.entity.LayuiUser;
  3. import org.springframework.stereotype.Repository;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.UUID;
  8. /**
  9. * @Description: 操作用户数据
  10. * @Author laoxu
  11. * @Date 2019/12/21 10:07
  12. **/
  13. @Repository
  14. public class LayuiUserDao {
  15. private static List<LayuiUser> users = new ArrayList<>();
  16. static {
  17. for ( int i = 1; i <= 100; i += 3) {
  18. users.add( new LayuiUser(i, "张三" + i, "上海", new Date()));
  19. users.add( new LayuiUser(i + 1, "李四" + i, "北京", new Date()));
  20. users.add( new LayuiUser(i + 2, "王二麻" + i, "广州", new Date()));
  21. }
  22. }
  23. //http://www.layui.com/demo/table/user/?page=1&limit=10
  24. /**
  25. * 获得所有用户
  26. */
  27. public List<LayuiUser> getPager(int page, int limit) {
  28. List<LayuiUser> list = new ArrayList<>();
  29. int start = (page - 1) * limit;
  30. for ( int i = start; i < start + limit && i < users.size(); i++) {
  31. list.add(users.get(i));
  32. }
  33. return list;
  34. }
  35. /**
  36. * 获得所有用户
  37. */
  38. public List<LayuiUser> getAllUsers() {
  39. return users;
  40. }
  41. /**
  42. * 添加用户
  43. */
  44. public void addUser(LayuiUser user) {
  45. if (user.getId() <= 0) { // 未设置id
  46. int index = users.size() - 1; // 获得最后一个用户的索引号
  47. if (index < 0) { // 如没有一个用户
  48. user.setId( 1); // 编号为1
  49. } else {
  50. user.setId(users.get(index).getId() + 1); // 获得最后一个用户的编号+1
  51. }
  52. }
  53. users.add(user);
  54. }
  55. /**
  56. * 删除用户
  57. */
  58. public void delUser(int id) {
  59. LayuiUser delUser = null;
  60. for (LayuiUser user : users) {
  61. if (user.getId() == id) {
  62. delUser = user;
  63. break;
  64. }
  65. }
  66. users.remove(delUser);
  67. }
  68. /**
  69. * 删除用户(多选)
  70. */
  71. public void delUsers(int[] ids) {
  72. LayuiUser delUser = null;
  73. for ( int i = 0; i < ids.length; i++) {
  74. for ( int j = 0; j < users.size(); j++) {
  75. if (users.get(j).getId() == ids[i]) {
  76. users.remove(j);
  77. }
  78. }
  79. }
  80. }
  81. public void updateUser(LayuiUser obj) {
  82. LayuiUser editUser = null;
  83. for (LayuiUser user : users) {
  84. if (user.getId() == obj.getId()) {
  85. editUser = user;
  86. break;
  87. }
  88. }
  89. editUser.setName(obj.getName());
  90. editUser.setCity(obj.getCity());
  91. editUser.setBirthday(obj.getBirthday());
  92. }
  93. }

3.3 创建用户Service


  
  1. package com.laoxu.test.helloweb.service;
  2. import com.laoxu.test.helloweb.dao.LayuiUserDao;
  3. import com.laoxu.test.helloweb.entity.LayuiUser;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. /**
  8. * @Description: 用户service
  9. * @Author laoxu
  10. * @Date 2019/12/21 10:42
  11. **/
  12. @Service
  13. public class LayuiUserService {
  14. @Autowired
  15. LayuiUserDao userDao;
  16. public List<LayuiUser> getPager(int page, int limit){
  17. return userDao.getPager(page,limit);
  18. }
  19. public List<LayuiUser> getAllUsers() {
  20. return userDao.getAllUsers();
  21. }
  22. public void addUser(LayuiUser user) {
  23. userDao.addUser(user);
  24. }
  25. public void delUser(int id) {
  26. userDao.delUser(id);
  27. }
  28. public void delUsers(int[] ids) {
  29. userDao.delUsers(ids);
  30. }
  31. public void updateUser(LayuiUser user) {
  32. userDao.updateUser(user);
  33. }
  34. }

3.4 创建用户Controller

 


  
  1. package com.laoxu.test.helloweb.controller;
  2. import com.laoxu.test.helloweb.dao.LayuiUserDao;
  3. import com.laoxu.test.helloweb.entity.LayuiUser;
  4. import com.laoxu.test.helloweb.entity.ResultBean;
  5. import com.laoxu.test.helloweb.service.LayuiUserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.web.bind.annotation.*;
  8. import java.util.List;
  9. /**
  10. * @Description: 用户controller
  11. * @Author laoxu
  12. * @Date 2019/12/21 10:11
  13. **/
  14. @RestController
  15. @RequestMapping( "/api/layui/user")
  16. public class LayuiUserController {
  17. @Autowired
  18. LayuiUserService userService;
  19. @GetMapping( "/list")
  20. public ResultBean list(@RequestParam(defaultValue = "1") Integer page,
  21. @RequestParam(defaultValue = "10") Integer limit){
  22. List<LayuiUser> users = userService.getPager(page,limit);
  23. int count = userService.getAllUsers().size();
  24. ResultBean result = new ResultBean( 0, "查询成功",count,users);
  25. return result;
  26. }
  27. @PostMapping( "/save")
  28. public ResultBean save(@RequestBody LayuiUser user){
  29. // 判断是新增还是修改
  30. if(user.getId()== 0){
  31. userService.addUser(user);
  32. } else{
  33. userService.updateUser(user);
  34. }
  35. return new ResultBean( 200, "保存成功", 0, "");
  36. }
  37. @PostMapping( "/remove")
  38. public ResultBean modify(@RequestBody int[] ids){
  39. userService.delUsers(ids);
  40. return new ResultBean( 200, "删除成功", 0, "");
  41. }
  42. }

 

 

 

需要源码的请留下邮箱!

 

 


转载:https://blog.csdn.net/IndexMan/article/details/103676174
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场