【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

时间:2022-09-02 15:21:18

背景:上一篇文章的界面太丑、没有条件查询功能。所以做一些改进,整合EasyUI做实现。(仅以此文纪念表格中出现的这些朋友工作六周年,祭奠一下逝去的青春^_^)

一、开发环境(参照上一篇文章)

补充:EasyUI直接从官网随便下载一个版本即可,本文用的版本是 1.3.3

二、程序结构:java目录下都是服务端代码,resources目录下templates目录存放页面文件,static目录下存放JavaScript文件、CSS文件、图片等资源文件

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

三、具体实现(Talk is cheap.Show your my code.该写的注释都在代码中^_^)

1、pom.xml(同上一篇)

2、resources目录下新建application.properties(当然喜欢用yaml的可以用yaml)(同上一篇)

3、创建SpringBoot程序启动类SpringbootApplication.java(同上一篇)

4、创建实体类Person.java

 package cn.temptation.model;

 import javax.persistence.*;

 //建库建表
//DROP TABLE person;
//
//CREATE TABLE person
//(
//personid INT AUTO_INCREMENT PRIMARY KEY,
//personname VARCHAR(10) NOT NULL,
//personage INT NOT NULL
//);
//
//INSERT INTO person VALUES
//(NULL, '张洋', 21), (NULL, '张兄家', 20), (NULL, '王生杰', 22),
//(NULL, '洪自军', 21), (NULL, '吴庆庆', 21), (NULL, '武建昌', 22), (NULL, '叶宇', 18);
//
//SELECT * FROM person;
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "personid")
private Integer personid;
@Column(name = "personname")
private String personname;
@Column(name = "personage")
private Integer personage; public Person() {
} public Person(String personname, Integer personage) {
this.personname = personname;
this.personage = personage;
} public Integer getPersonid() {
return personid;
} public void setPersonid(Integer personid) {
this.personid = personid;
} public String getPersonname() {
return personname;
} public void setPersonname(String personname) {
this.personname = personname;
} public Integer getPersonage() {
return personage;
} public void setPersonage(Integer personage) {
this.personage = personage;
}
}

5、创建DAO接口PersonDao.java

 package cn.temptation.dao;

 import cn.temptation.model.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; /**
* 因为需要使用分页和条件查询,所以从JpaRepository接口 和 JpaSpecificationExecutor接口继承
*/
public interface PersonDao extends JpaRepository<Person, Integer>, JpaSpecificationExecutor<Person> { }

6、创建控制器类PersonController.java

 package cn.temptation.web;

 import cn.temptation.dao.PersonDao;
import cn.temptation.model.Person;
import cn.temptation.util.TypeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import javax.persistence.criteria.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map; @Controller
@RequestMapping("/person")
public class PersonController {
@Autowired
private PersonDao personDao; /**
* 跳转至列表页
*
* @return
*/
@RequestMapping("/view")
public String view() {
// 跳转至列表页
return "personlist";
} /**
* 查询列表信息
*
* @param searchcondition 查询条件
* @param searchcontent 查询内容
* @param page 页数
* @param rows 每页记录数
* @return
*/
@RequestMapping("/list")
@ResponseBody
public Map<String, Object> list(@RequestParam(value = "searchcondition", required = false) String searchcondition,
@RequestParam(value = "searchcontent", required = false) String searchcontent,
@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "rows", required = false) Integer rows) {
// 创建查询规格对象
Specification<Person> specification = new Specification<Person>() {
@Override
public Predicate toPredicate(Root<Person> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate predicate = null;
Path path = null; if (searchcondition != null && !"".equals(searchcondition)
&& searchcontent != null && !"".equals(searchcontent)) {
switch (searchcondition) {
case "personname": // 人员名称
path = root.get("personname");
predicate = cb.like(path, "%" + searchcontent + "%");
break;
case "personage": // 人员年龄
path = root.get("personage");
if (TypeUtil.isNum(searchcontent)) {
predicate = cb.equal(path, Integer.parseInt(searchcontent));
}
break;
}
} return predicate;
}
}; Pageable pageable = new PageRequest(page - 1, rows, Sort.Direction.ASC, "personid");
Page<Person> pagePerson = personDao.findAll(specification, pageable); // 获取rows
List<Person> list = pagePerson.getContent();
// 获取count
Long count = pagePerson.getTotalElements(); Map<String, Object> resultMap = new HashMap();
resultMap.put("total", count);
resultMap.put("rows", list);
resultMap.put("success", true); return resultMap;
} /**
* 新增处理 和 修改处理
*
* @param person
* @return
*/
@RequestMapping("/save")
@ResponseBody
public Map<String, Object> personsave(Person person) {
Map<String, Object> resultMap = new HashMap<String, Object>();
personDao.save(person);
resultMap.put("success", true);
return resultMap;
} /**
* 删除处理
*
* @param personid
* @return
*/
@RequestMapping("/delete")
@ResponseBody
public Map<String, Object> persondelete(@RequestParam("id") String personid) {
Map<String, Object> resultMap = new HashMap<String, Object>();
personDao.deleteById(Integer.parseInt(personid));
resultMap.put("success", true);
return resultMap;
}
}

7、创建工具类TypeUtil.java

 package cn.temptation.util;

 import java.util.regex.Pattern;

 public class TypeUtil {
/**
* 验证是否整数
*
* @param str
* @return
*/
public static boolean isNum(String str) {
Pattern pattern = Pattern.compile("^-?[0-9]+");
if (pattern.matcher(str).matches()) {
return true;
} else {
return false;
}
} /**
* 验证是否小数
*
* @param str
* @return
*/
public static boolean isNumEx(String str) {
Pattern pattern = Pattern.compile("^[-+]?[0-9]+(\\.[0-9]+)?$");
if (pattern.matcher(str).matches()) {
return true;
} else {
return false;
}
}
}

8、resources目录下新建templates目录,创建表现层:人员列表页面(personlist.html)

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>人员列表</title>
<link rel="stylesheet" type="text/css" href="../easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../easyui/themes/icon.css">
<script type="text/javascript" src="../easyui/jquery.min.js"></script>
<script type="text/javascript" src="../easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="../easyui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="../biz/person.js"></script>
</head>
<body>
<!-- 表格 -->
<table id="dg">
</table>
<!-- 工具栏 -->
<div id="tb">
<table cellpadding="0" cellspacing="0">
<tr>
<td>
<a href="javascript:loadAll()" class="easyui-linkbutton" iconCls="Arrowrefresh" plain="true">加载全部</a>
</td>
<td>
<div class="datagrid-btn-separator"></div>
</td>
<td>
&nbsp;检索条件:&nbsp;
<select id="searchcondition" class="easyui-combobox" name="searchcondition" style="width:200px;">
<option value="personname">人员名称</option>
<option value="personage">人员年龄</option>
</select>&nbsp;
</td>
<td>
<input type="text" id="searchcontent" name="searchcontent" size="20" onkeydown="if(event.keyCode==13){ queryAction(); }"/>
</td>
<td><a href="javascript:queryAction()" class="easyui-linkbutton" iconCls="Magnifier" plain="true">搜索</a></td>
<td>
<div class="datagrid-btn-separator"></div>
</td>
<td><a href="javascript:openAddDialog()" class="easyui-linkbutton" iconCls="icon-add" plain="true">新增</a></td>
<td>
<div class="datagrid-btn-separator"></div>
</td>
<td><a href="javascript:openModifyDialog()" class="easyui-linkbutton" iconCls="icon-edit" plain="true">修改</a></td>
<td>
<div class="datagrid-btn-separator"></div>
</td>
<td><a href="javascript:deleteAction()" class="easyui-linkbutton" iconCls="icon-remove" plain="true">删除</a></td>
</tr>
</table>
</div>
<!-- 弹出新增修改对话框 -->
<div id="dlg" class="easyui-dialog" style="width:300px;height:200px;padding: 10px 10px" closed="true"
buttons="#dialog-buttons" modal="true">
<form id="fm" method="post">
<table>
<tr>
<td><label for="personname">人员名称</label></td>
<td><input type="text" id="personname" name="personname" class="easyui-validatebox" required="true"/>
</td>
</tr>
<tr>
<td><label for="personage">人员年龄</label></td>
<td><input type="text" id="personage" name="personage" class="easyui-validatebox" required="true"/>
</td>
</tr>
</table>
</form>
</div>
<!-- 对话框按钮 -->
<div id="dialog-buttons">
<a href="javascript:saveAction()" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
<a href="javascript:closeDialog()" class="easyui-linkbutton" iconCls="icon-cancel">关闭</a>
</div>
</body>
</html>

9、resources目录下新建static目录,创建表现层:人员管理用脚本文件(person.js)

 var url;

 // 页面加载
$(function () {
$("#dg").datagrid({
url: 'list',
queryParams: {},
title: "人员列表",
rownumbers: true,
fit: true,
toolbar: "#tb",
collapsible: true,
pagination: true,
pageSize: 5,
pageList: [5, 10],
columns: [[
{field: 'personid', title: '人员编号', width: 50, align: 'center', halign: 'center', hidden: 'true'},
{field: 'personname', title: '人员名称', width: 200, align: 'center', halign: 'center'},
{field: 'personage', title: '人员年龄', width: 200, align: 'right', halign: 'center'}
]]
});
}); // 【加载全部】按钮押下处理
var loadAll = function () {
// 查询条件还原为默认状态
$('#searchcondition').combobox('setValue', 'personname');
$('#searchcontent').val(""); // 表格重新加载
var param = {};
$("#dg").datagrid('load', param);
}; // 【搜索】按钮押下处理
var queryAction = function () {
var param = {
searchcondition: $('#searchcondition').combobox('getValue'),
searchcontent: $('#searchcontent').val()
}; $("#dg").datagrid('load', param);
}; // 重置表单内容
var resetValue = function () {
$('#fm')[0].reset();
}; // 打开添加对话框
var openAddDialog = function () {
resetValue();
$('#dlg').dialog({
modal: true,
title: '添加人员信息'
});
$('#dlg').dialog("open");
url = "save";
}; // 新增处理
var saveAction = function () {
$("#fm").form("submit", {
url: url,
onSubmit: function () {
return $(this).form("validate");
},
success: function (result) {
var result = eval('(' + result + ')');
if (result.success) {
$.messager.alert("系统提示", "保存成功!");
resetValue();
$("#dlg").dialog("close");
$("#dg").datagrid("reload");
} else {
$.messager.alert("系统提示", "保存失败!");
return;
}
}
});
}; // 关闭对话框
var closeDialog = function () {
$("#dlg").dialog("close");
resetValue();
}; // 打开编辑对话框
var openModifyDialog = function () {
var selectedRows = $("#dg").datagrid("getSelections"); if (selectedRows.length != 1) {
$.messager.alert("系统提示", "请选择一条要编辑的数据!");
return;
} var row = selectedRows[0];
$("#dlg").dialog("open").dialog("setTitle", "编辑人员信息");
$("#fm").form("load", row);
url = "save?personid=" + row.personid;
}; // 删除处理
var deleteAction = function () {
var selectedRows = $("#dg").datagrid("getSelections"); if (selectedRows.length == 0) {
$.messager.alert("系统提示", "请选择要删除的数据");
return;
} $.messager.confirm("系统提示", "您确定要删除这<font color=red>" + selectedRows.length + "</font>条数据吗?", function (r) {
if (r) {
$.post("delete", {
id: selectedRows[0].personid
}, function (result) {
if (result.success) {
$.messager.alert("系统提示", "数据已成功删除!");
$("#dg").datagrid("reload");
} else {
$.messager.alert("系统提示", "数据删除失败,请联系工作人员!");
}
}, "json");
}
});
};

四、启动项目,运行效果如下

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页

【原】无脑操作:IDEA + maven + SpringBoot + JPA + EasyUI实现CRUD及分页的更多相关文章

  1. 【原】无脑操作:IDEA &plus; maven &plus; SpringBoot &plus; JPA &plus; Thymeleaf实现CRUD及分页

    一.开发环境: 1.windows 7 企业版 2.IDEA 14 3.JDK 1.8 4.Maven 3.5.2 5.MariaDB 6.SQLYog 二.Maven设置: Maven目录下的con ...

  2. 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改

    Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...

  3. 【原】无脑操作:IDEA &plus; maven &plus; Shiro &plus; SpringBoot &plus; JPA &plus; Thymeleaf实现基础认证权限

    开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...

  4. 【原】无脑操作:IDEA &plus; maven &plus; Shiro &plus; SpringBoot &plus; JPA &plus; Thymeleaf实现基础授权权限

    上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...

  5. 【原】无脑操作:express &plus; MySQL 实现CRUD

    基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...

  6. 【原】无脑操作:eclipse &plus; maven搭建SSM框架

    网上看到一些Spring + Spring MVC + MyBatis框架的搭建教程,不是很详细或是时间久远了,自己动手整一个简单无脑的! 0.系统环境 1)Windows 10 企业版 2)JDK ...

  7. 【原】无脑操作:ElasticSearch学习笔记(01)

    开篇来自于经典的“保安的哲学三问”(你是谁,在哪儿,要干嘛) 问题一.ElasticSearch是什么?有什么用处? 答:截至2018年12月28日,从ElasticSearch官网(https:// ...

  8. 【原】无脑操作:eclipse创建maven工程时,如何修改默认JDK版本?

    问题描述:eclipse建立maven项目时,JDK版本默认是1.5,想创建时默认版本设置为1.8,如何修改? 解决方案: 找到本机maven仓库存放位置,比如:${user.home}/.m2/路径 ...

  9. 【原】无脑操作:Eclipse &plus; Maven &plus; jFinal &plus; MariaDB 环境搭建

    一.开发环境 1.windows 7 企业版 2.Eclipse IDE for Enterprise Java Developers  Version: 2019-03 (4.11.0) 3.JDK ...

随机推荐

  1. mysql字符串截取

    mysql字符串截取 update zcat ) where lev1 is null; update zcat ) where lev2 is null; 函数: 1.从左开始截取字符串 left( ...

  2. FPGA同步复位异步复位

    今天看了篇博客, 是拿altera的芯片和软件作例子的,讲同步异步复位的: http://blog.sina.com.cn/s/blog_bff0927b0101aaii.html 还有一个博客, h ...

  3. 一张图看懂STM32芯片型号的命名规则

    意法半导体已经推出STM32基本型系列.增强型系列.USB基本型系列.增强型系列:新系列产品沿用增强型系列的72MHz处理频率.内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM.新 ...

  4. 2018-12-03 VS Code英汉词典插件v0&period;0&period;7-尝试词性搭配

    续上文VS Code英汉词典插件v0.0.6-改为TS实现, 加测试后, 继续重构(提取常量, 避免var, 添加类型等等), 并完善测试. 测试方法参考: Testing Visual Studio ...

  5. mysql索引优化-order&sol;group

    为排序使用索引 KEY a_b_c (a,b,c) order by 能使用索引最左前缀 -order by a -order by a,b -order by a,b,c -order by a d ...

  6. You Don&&num;39&semi;t Know JS&colon; this &amp&semi; Object Prototypes&lpar; 第2章 this&rpar;

    this is a binding made for each function invocation, based entirely on its call-site (how the functi ...

  7. Dalvik源码阅读笔记(一)

    dalvik 虚拟机启动入口在 JNI_CreateJavaVM(), 在进行完 JNIEnv 等环境设置后,调用 dvmStartup() 函数进行真正的 DVM 初始化. jint JNI_Cre ...

  8. js 滑动门的实现

    原理:滑动门,这里以图片进行实例,首先设定主盒子div的宽度和高度设定,并进行图片初始化位置的设定,然后将图片绑定事件,并设定要达到的效果 html代码: <!DOCTYPE html> ...

  9. post提交方式

    post提交方式 为提交 url 路径后的name值 getParameter 是获取url后面的参数的.getattribute 是获取 自己setattribute的.

  10. Clipboard获取内容C&num;

    一.获取文本  textBox1.Text = Clipboard.GetData("Text").ToString(); 二.获取图像             pictureBo ...