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

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

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

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

三、具体实现(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及分页的更多相关文章

  1. 【原】无脑操作:IDEA + maven + SpringBoot + JPA + 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 + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

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

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

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

  5. 【原】无脑操作:express + MySQL 实现CRUD

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

  6. 【原】无脑操作:eclipse + 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 + Maven + jFinal + MariaDB 环境搭建

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

随机推荐

  1. vim学习、各类插件配置与安装

    vim学习.各类插件配置与安装 vim 插件 配置 1. vim学习 vim基础学习:根据网上流行基础文章<简明Vim练级攻略>,进阶书籍<vim实用技巧>.注:进阶书籍可以在 ...

  2. HDU 5060

    题意略. 这个题目最关键的是在于计算球冠的体积.令球冠体积为V. 我们可以用祖暅原理来计算V, 这里,可以看出,球冠的体积等于左图的上半个圆柱减去那个倒扣的圆台. 祖暅原理:界于两个平行平面之间的两个 ...

  3. java程序员理解js中的闭包

    1.闭包概念: 就是函数内部通过某种方式访问一个函数内部的局部变量 再次理解: 闭包产生原因: 1.内部函数引用了外部函数的变量 作用:延长局部变量的生命周期 让函数外部可以调用到函数内部的数据 利用 ...

  4. 两种简单的方法Docker构建LANMP

    在初步入门学习Docker的过程中一步步了解了Docker容器在团队开发中所起到的作用,一边学习一边操作基本命令,当然到现在还处于一个擦边的入门阶段. 尝试一下用Docker构建一个集成开发环境. S ...

  5. iOS——系统提供的dispatch方法

    // 后台执行: dispatch_async(dispatch_get_global_queue(0,0), ^{ // something }); // 主线程执行: dispatch_async ...

  6. Python实现二分查找

    老生常谈的算法了. #!/usr/bin/python # -*- coding:utf-8 -*- # Filename: demo.py # 用python实现二分查找 def binarySea ...

  7. Linux sftp 安全文件传输命令

    sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性. 1.常用登陆方式: 格式:sftp <user>@<host> 通过sftp ...

  8. shell脚本基础1 概述及变量

    shell概述:在linux内核与用户之间的解释器程序通常指/bin/bash负责指向内核翻译及传达用户/程序指令相当于操作系统的"外壳" shell的使用方式:交互式--命令行: ...

  9. SQL Server查询中对于单列数据','分割的数据进行的拆分操作,集合的每一个行变多行

    1.cross apply cross apply 我们可以把它看作成是inner join 来使用 2.outer apply outer apply我们可以把它看做是left join 来使用 注 ...

  10. 第2章 PCI总线的桥与配置

    在PCI体系结构中,含有两类桥片,一个是HOST主桥,另一个是PCI桥.在每一个PCI设备中(包括PCI桥)都含有一个配置空间.这个配置空间由HOST主桥管理,而PCI桥可以转发来自HOST主桥的配置 ...