要点总结:
主要流程:
第一步:创建实体类
package com.winton.spark.modules.practice.entity;
import lombok.Data;
@Data
public class Student {
private String id;
private String name;
private String no;
private String sex;
private String score;
private String age;
private String delFlag ;
public Student() {
super();
this.delFlag=DEL_FLAG_NORMAL;
}
public Student(String id) {
super();
this.id = id;
}
public static final String DEL_FLAG_NORMAL = "0";
public static final String DEL_FLAG_DELETE = "1";
}
然后创建相关的数据库,
第二部Dao,和xml
dao
package com.winton.spark.modules.practice.dao;
import java.util.List;
import com.winton.spark.core.common.persistence.CrudDao;
import com.winton.spark.modules.practice.entity.Student;
public interface StudentDao {
//查询
public List<Student> findAll();
//根据编号查询
public Student getById(Student student);
//插入
public void addStudent(Student student);
//修改
public void updateStudent(Student student);
//逻辑删除
public void deleteStudent(Student student);
}
对应的xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.winton.spark.modules.practice.dao.StudentDao"><!-- 对应Dao的路径 -->
<!-- 查询 -->
<select id="findAll" resultType="Student">
SELECT id, name, no, sex, score, age, del_flag
FROM student WHERE del_flag = '0';
</select>
<!-- 根据编号查询 -->
<select id="getById" resultType="Student">
SELECT id, name, no, sex, score, age, del_flag
FROM student WHERE id = #{id};
</select>
<!-- 插入 -->
<insert id="addStudent" >
INSERT INTO student
(id, name, no, sex, score, age, del_flag )
VALUES
(#{id}, #{name}, #{no}, #{sex}, #{score}, #{age}, #{delFlag});
</insert>
<!-- 逻辑删除 -->
<delete id="deleteStudent">
UPDATE student SET
del_flag = #{delFlag}
WHERE id = #{id};
</delete>
<!--修 改 -->
<update id="updateStudent">
UPDATE student SET
name = #{name},
no = #{no},
sex = #{sex},
score = #{score},
age = #{age}
WHERE id = #{id};
</update>
</mapper>
第三步,对应的Service
package com.winton.spark.modules.practice.service;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.winton.spark.modules.practice.dao.StudentDao;
import com.winton.spark.modules.practice.entity.Student;
@Service
@Transactional(readOnly = true)
public class StudentService {
@Autowired
private StudentDao studentDao;
//查询
public List<Student> findAll() {
return studentDao.findAll();
}
public void save(Student student) {
if(StringUtils.isBlank(student.getId())) {
studentDao.addStudent(student);
}else {
studentDao.updateStudent(student);
}
}
//根据编号查询
public Student getById(Student student) {
return studentDao.getById(student);
}
//插入
public void addStudent(Student student) {
studentDao.addStudent(student);
}
//修改
public void updateStudent(Student student) {
studentDao.updateStudent(student);
}
//逻辑删除
public void deleteStudent(Student student) {
studentDao.deleteStudent(student);
}
}
第四步Controller
package com.winton.spark.modules.practice.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.winton.spark.core.common.annotion.BusinessLog;
import com.winton.spark.core.common.constant.dictmap.RoleDict;
import com.winton.spark.core.common.exception.BizExceptionEnum;
import com.winton.spark.core.common.exception.ServiceException;
import com.winton.spark.core.common.page.LayuiPageInfo;
import com.winton.spark.core.common.utils.PageFactory;
import com.winton.spark.core.common.utils.StringUtils;
import com.winton.spark.core.log.LogObjectHolder;
import com.winton.spark.core.reqres.ResponseData;
import com.winton.spark.core.reqres.SuccessResponseData;
import com.winton.spark.core.util.ToolUtil;
import com.winton.spark.core.util.ValidateUtil;
import com.winton.spark.modules.practice.entity.Student;
import com.winton.spark.modules.practice.service.StudentService;
import com.winton.spark.modules.system.entity.Role;
import com.winton.spark.modules.system.entity.User;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
@Controller
@RequestMapping("/student")
public class StudentController {
private static String PREFIX = "/html/modules/practice/";
protected static SuccessResponseData SUCCESS_TIP = new SuccessResponseData();
@Autowired
private StudentService studentService;
@ModelAttribute//优先执行
public Student get(@RequestParam(required=false) String id) {
if (StringUtils.isNotBlank(id)){
return studentService.getById(new Student(id));
}else{
return new Student();
}
}
//转到学生页
@RequestMapping("")
public String index() {
return PREFIX+"student.html";
}
//转到添加学生页
//@RequiresPermissions("sys:student:edit")
@RequestMapping("addForm")
public String addForm(Student student , Model model) {
if(ValidateUtil.isEmpty(student)) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
return PREFIX+"student_add.html";
}
//@RequiresPermissions("sys:role:edit")
@BusinessLog(value = "添加学生", key = "name")
@RequestMapping("/add")
@ResponseBody
public ResponseData add(Student student) {
Student theStudent = studentService.getById(student);
if(theStudent != null) {
throw new ServiceException(BizExceptionEnum.STUDENT_ALREADY_REG);
}
studentService.save(student);
return SUCCESS_TIP;
}
//转到修改学生页
//@RequiresPermissions("sys:student:edit")
@RequestMapping("editForm")
public String editForm(Student student, Model model) {
if(ValidateUtil.isEmpty(student)) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
LogObjectHolder.me().set(student);
return PREFIX+"student_edit.html";
}
/**
* 修改学生基本信息
* @param role
* @return
*/
@RequestMapping("edit")
@BusinessLog(value = "修改学生信息", key = "name")
//@RequiresPermissions("sys:role:edit")
@ResponseBody
public ResponseData edit(Student student ){
studentService.save(student);
return SUCCESS_TIP;
}
//获取学生列表
//@RequiresPermissions("sys:student:view")
@RequestMapping("/list")
@ResponseBody
public LayuiPageInfo list(Student student) {
PageFactory.startPage();
List<Student> list =studentService.findAll();
PageInfo<Student> pageInfo = new PageInfo<Student>(list);
return PageFactory.createLayuiPageInfo(pageInfo);
}
/**
* 删除学生
* @param role
* @return
*/
@BusinessLog(value = "删除学生", key = "id")
// @RequiresPermissions("sys:role:edit")
@RequestMapping("delete")
@ResponseBody
public ResponseData delete(Student student){
//缓存被删除的角色
LogObjectHolder.me().set(student);
studentService.deleteStudent(student);
return SUCCESS_TIP;
}
/**
* 查找学生
* @param role
* @return
*/
@RequestMapping("/view")
@ResponseBody
public ResponseData view(Student student){
if (ToolUtil.isEmpty(student)){
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
Map<String, Object> map = BeanUtil.beanToMap(student);
HashMap<Object, Object> hashMap = CollectionUtil.newHashMap();
hashMap.putAll(map);
return ResponseData.success(hashMap);
}
}
第五步 HTML 和JS
student.html
@layout("/html/common/_container.html",{js:["/assets/modules/practice/student.js"]}){
<div class="layui-body-header">
<span class="layui-body-header-title">学生</span>
</div>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-sm12 layui-col-md12 layui-col-lg12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-form toolbar">
<div class="layui-form-item">
<div class="layui-inline">
<input id="studentName" class="layui-input" type="text" placeholder="请输入学生姓名"/>
</div>
<div class="layui-inline">
<button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon"></i>鎼滅储</button>
<!-- @if(shiro.hasPermission("sys:role:edit")) -->{
<button id="btnAdd" class="layui-btn icon-btn"><i class="layui-icon"></i>娣诲姞</button>
<!-- @} -->
<button id="btnExp" class="layui-btn icon-btn"><i class="layui-icon"></i>瀵煎嚭</button>
</div>
</div>
</div>
<table class="layui-table" id="studentTable" lay-filter="studentTable"></table>
</div>
</div>
</div>
</div>
</div>
<script type="text/html" id="tableBar">
//@if(shiro.hasPermission("sys:role:edit")){
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">淇敼</a>
// @}
//@if(shiro.hasPermission("sys:role:edit")){
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delete">鍒犻櫎</a>
//@}
//@if(shiro.hasPermission("sys:role:setAuthority")){
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="studentAssign">鏉冮檺閰嶇疆</a>
//@}
</script>
@}
student_add.html
@layout("/html/common/_container.html",{bg:"bg-white",js:["/assets/modules/system/role/role_add.js"]}){
<form id="userForm" lay-filter="roleForm" class="layui-form model-form">
<input name="id" type="hidden"/>
<div class="layui-form-item">
<label class="layui-form-label">瑙掕壊鍚嶇О<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input name="name" placeholder="请输入学生姓名" type="text" class="layui-input" lay-verify="required" required/>
</div>
</div>
<div class="layui-form-item text-right">
<button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
<button class="layui-btn" lay-filter="btnSubmit" lay-submit>淇濆瓨</button>
</div>
</form>
@}
student_edit.html
@layout("/html/common/_container.html",{bg:"bg-white",js:["/assets/modules/practice/student_edit.js"]}){
<form id="studentForm" lay-filter="studentForm" class="layui-form model-form">
<input name="id" type="hidden"/>
<div class="layui-form-item">
<label class="layui-form-label">瑙掕壊鍚嶇О<span style="color: red;">*</span></label>
<div class="layui-input-block">
<input name="name" placeholder="请输入学生姓名" type="text" class="layui-input" lay-verify="required" required/>
</div>
</div>
<div class="layui-form-item text-right">
<button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
<button class="layui-btn" lay-filter="btnSubmit" lay-submit>淇濆瓨</button>
</div>
</form>
@}
student.js
layui.use(['layer', 'form', 'table', 'admin', 'ax'], function () {
var $ = layui.$;
var layer = layui.layer;
var form = layui.form;
var table = layui.table;
var $ax = layui.ax;
var admin = layui.admin;
/**
* 系统管理--学生管理
*/
var Student = {
tableId: "studentTable", //表格id
condition: {
studentName: ""
}
};
/**
* 初始化表格的列
*/
Student.initColumn = function () {
return [[
{type: 'checkbox'},
{field: 'id', hide: true, sort: true, title: '学生id'},
{field: 'name', sort: true, title: '学生姓名'},
{field: 'no', sort: true, title: '学号'},
{field: 'sex', sort: true, title: '性别'},
{field: 'score', sort: true, title: '成绩'},
{field: 'age', sort: true, title: '年龄'},
{align: 'center', toolbar: '#tableBar', title: '操作', minWidth: 200}
]];
};
/**
* 点击查询按钮
*/
Student.search = function () {
var queryData = {};
queryData['name'] = $("#studentName").val();
table.reload(Student.tableId, {where: queryData});
};
/**
* 弹出添加学生
*/
Student.openAddStudent = function () {
admin.putTempData('formOk', false);
top.layui.admin.open({
title: '添加学生',
content: Spark.ctxPath + '/student/addForm',
end: function () {
admin.getTempData('formOk') && table.reload(Student.tableId);
}
});
};
/**
* 导出excel按钮
*/
Student.exportExcel = function () {
var checkRows = table.checkStatus(Student.tableId);
if (checkRows.data.length === 0) {
Spark.error("请选择要导出的数据");
} else {
table.exportFile(tableResult.config.id, checkRows.data, 'xls');
}
};
/**
* 点击编辑学生信息
*
* @param data 点击按钮时候的行数据
*/
Student.onEditStudent = function (data) {
admin.putTempData('formOk', false);
top.layui.admin.open({
title: '修改学生信息',
content: Spark.ctxPath + '/student/editForm?id=' + data.id,
end: function () {
admin.getTempData('formOk') && table.reload(Student.tableId);
}
});
};
/**
* 点击删除学生
*
* @param data 点击按钮时候的行数据
*/
Student.onDeleteStudent = function (data) {
var operation = function () {
var ajax = new $ax(Spark.ctxPath + "/student/delete", function () {
Spark.success("删除成功!");
table.reload(Student.tableId);
}, function (data) {
Spark.error("删除失败!" + data.responseJSON.message + "!");
});
ajax.set("id", data.id);
ajax.start();
};
Spark.confirm("是否删除角色 " + data.name + "?", operation);
};
// 渲染表格
var tableResult = table.render({
elem: '#' + Student.tableId,
url: Spark.ctxPath + '/student/list',
page: true,
height: "full-158",
cellMinWidth: 100,
cols: Student.initColumn()
});
// 搜索按钮点击事件
$('#btnSearch').click(function () {
Student.search();
});
// 添加按钮点击事件
$('#btnAdd').click(function () {
Student.openAddRole();
});
// 导出excel
$('#btnExp').click(function () {
Student.exportExcel();
});
// 工具条点击事件
table.on('tool(' + Student.tableId + ')', function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'edit') {
Student.onEditStudent(data);
} else if (layEvent === 'delete') {
Student.onDeleteStudent(data);
} else if (layEvent === 'studentAssign') {
Student.studentAssign(data);
}
});
});
student_add.js
/**
* 角色详情对话框
*/
var StudentInfoDlg = {
data: {
id: "",
name: ""
}
};
layui.use(['layer', 'form', 'admin', 'ax'], function () {
var $ = layui.jquery;
var $ax = layui.ax;
var form = layui.form;
var admin = layui.admin;
var layer = layui.layer;
// 让当前iframe弹层高度适应
admin.iframeAuto();
// 表单提交事件
form.on('submit(btnSubmit)', function (data) {
var ajax = new $ax(Spark.ctxPath + "/student/add", function (data) {
Spark.success("添加成功!");
//传给上个页面,刷新table用
admin.putTempData('formOk', true);
//关掉对话框
admin.closeThisDialog();
}, function (data) {
Spark.error("添加失败!" + data.responseJSON.message)
});
ajax.set(data.field);
ajax.start();
});
});
student_edit.js
/**
* 用户详情对话框
*/
var StudentInfoDlg = {
data: {
id : "",
name : "",
no : "",
sex : "",
score : "",
age : "",
}
};
layui.use(['layer', 'form', 'admin', 'laydate', 'ax'], function () {
var $ = layui.jquery;
var $ax = layui.ax;
var form = layui.form;
var admin = layui.admin;
var laydate = layui.laydate;
var layer = layui.layer;
// 让当前iframe弹层高度适应
admin.iframeAuto();
//获取用户信息
var ajax = new $ax(Spark.ctxPath + "/user/getStudentInfo?id=" + Spark.getStudentlParam("id"));
var result = ajax.start();
console.log(result);
form.val('studentForm', {
'id' : result.data.id,
'name' : result.data.name,
'no' : result.data.no,
'sex' : result.data.sex,
'score': result.data.score,
'age' : result.data.age,
});
// 渲染时间选择框
laydate.render({
elem: '#birthday'
});
// 表单提交事件
form.on('submit(btnSubmit)', function (data) {
var ajax = new $ax(Spark.ctxPath + "/student/edit", function (data) {
Spark.success("修改成功!");
//传给上个页面,刷新table用
admin.putTempData('formOk', true);
//关掉对话框
admin.closeThisDialog();
}, function (data) {
Spark.error("修改失败!" + data.responseJSON.message)
});
ajax.set(data.field);
ajax.start();
});
});