项目结构
数据库结构
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '教师编号(开头带TE)',
`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '教师名称',
`time` date NOT NULL COMMENT '入职时间',
`deleted` int(11) NOT NULL DEFAULT 0 COMMENT '逻辑删除id,1为删除,0为未删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('TE1763496673044783104', '周先生', '2024-02-28', 0);
INSERT INTO `teacher` VALUES ('TE231311231', '刘XX', '2024-03-05', 0);
INSERT INTO `teacher` VALUES ('TE231311234', '小王', '2024-03-01', 1);
SET FOREIGN_KEY_CHECKS = 1;
依赖导入
首先导入相关依赖Mybatis-plus,thymeleaf和Hutool,下面是我在pom.xml导入的相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
数据库连接
server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.global-config.db-config.logic-delete-field=flag
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
mybatis-plus.mapper-locations=classpath:/mappers/*.xml
导入MyBatis-plus分页插件
@Configuration
public class MybatisConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
//interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
return interceptor;
}
}
创建实体类teather
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "teacher")
public class Teacher {
@TableId(value = "id", type = IdType.INPUT)
private String id;
@TableField(value = "`name`")
private String name;
@TableField(value = "`time`")
private String time;
@TableLogic
private int deleted;
}
编写TeatherMapper.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.example.demo.dao.TeacherMapper">
<resultMap id="BaseResultMap" type="com.example.demo.entity.Teacher">
<!--@Table teacher-->
<id column="id" property="id" />
<result column="name" property="name" />
<result column="time" property="time" />
</resultMap>
<sql id="Base_Column_List">
id, `name`, `time`
</sql>
</mapper>
Service层和其继承
package com.example.demo.service;
import com.example.demo.entity.Teacher;
import com.baomidou.mybatisplus.extension.service.IService;
public interface TeacherService extends IService<Teacher>{
}
package com.example.demo.service;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.dao.TeacherMapper;
import com.example.demo.entity.Teacher;
import com.example.demo.service.TeacherService;
@Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService{
}
Mapper数据访问层
package com.example.demo.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.Teacher;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TeacherMapper extends BaseMapper<Teacher> {
}
Controller控制层
package com.example.demo.controller;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.dao.TeacherMapper;
import com.example.demo.entity.Teacher;
import com.example.demo.service.TeacherService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Controller
public class SchoolController {
@Resource
TeacherService service;
//分页查询
@RequestMapping("/index")
public String pageSelect(@RequestParam(required = false,defaultValue = "1")Integer page, Model model){
//设置分页数据
Page<Teacher> teacherPage=new Page<>(page,4);
service.page(teacherPage);
model.addAttribute("page",teacherPage);
return "index";
}
//跳转去添加页面
@GetMapping("/add")
public String toAdd(Model model){
return "add";
}
//数据添加操作
@PostMapping("/insert")
@ResponseBody
public String add(@RequestParam String name) {
Teacher teacher = new Teacher();
String teacher_id =IdUtil.getSnowflakeNextIdStr();
teacher.setId("TE"+teacher_id.substring(teacher_id.length()-9));
teacher.setName(name);
Date dd=new Date();
SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String NowTime=sim.format(dd);
teacher.setTime(NowTime);
service.save(teacher);
return "1";
}
//跳转去修改页面
@GetMapping("/toUpdate")
public String toUpdate(Model model,@RequestParam("id") String id){
Teacher teacher = service.getById(id);
model.addAttribute("teacher", teacher);
return "update";
}
//修改操作
@ResponseBody
@RequestMapping("/update")
public String updatePT(Teacher teacher){
if (service.updateById(teacher)){
return "1";
}else {
return "0";
}
}
//物理删除操作
@ResponseBody
@RequestMapping("/del/{id}")
public String deleteById(@PathVariable String id){
if (service.removeById(id)){
return "1";
}else {
return "0";
}
}
}
页面
添加页面add.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加页面</title>
<script src="/jquery-3.5.1.min.js"></script>
<style type="text/css">
.main{
padding: 10px 5px;
margin: auto;
width: 540px;
background-color: lightblue;
border: 2px sandybrown solid;
}
button{
padding: 0px 5px 0px 5px;
background-color: #8488f0;
color: white;
}
</style>
</head>
<body>
<div class="main">
<table>
<tr>
<td colspan="2"><h1>添加</h1></td>
</tr>
<tr>
<td>教师名称</td>
<td><input name="name" type="text" id="name"></td>
</tr>
<tr>
<td><button>添加</button></td>
</tr>
</table>
</div>
</body>
<script type="text/javascript">
$(":button").click(function (){
var name=$("#name").val();
if(name==""||name==null){
alert("老师名称不能为空")
return false;
}else {
$.ajax({
url:"insert",
type:"post",
data:{
name:$("#name").val()
},
dataType:"Text",
success:function (result){
if (result=="1"){
alert("提交成功");
window.location.href="/index";
}else{
alert("提交失败");
window.location.href="/add";
}
},
traditional:true,
error:function (result) {
alert(result);
alert("请求失败");
}
})
}
})
</script>
</html>
查询页面index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>管理页面</title>
</head>
<style type="text/css">
.main{
padding: 10px 5px;
margin: auto;
width: 360px;
background-color: lightblue;
border: 2px sandybrown solid;
}
button{
padding: 0px 5px 0px 5px;
background-color: #8488f0;
color: white;
}
</style>
</head>
<body>
<div class="main">
<a th:href="@{/add}"><button >添加</button></a>
<table border="1" cellspacing="1" style="text-align: center">
<thead>
<td>教师id</td>
<td>教师名称</td>
<td>教师入职时间</td>
<td>操作</td>
</thead>
<tbody th:each="item,state : ${page.records}" th:if="${item.deleted !=1}">
<td th:text="${item.id}"></td>
<td th:text="${item.name}"></td>
<td th:text="${item.time}"></td>
<td><button><a th:href="@{/toUpdate/(id=${item.id})}">修改</a></button>
<button th:data-id="${item.id}" name="deleted">删除</button>
</td>
</tbody>
</table>
<div align="center">
<a href="/index?page=1">首页</a>
<a th:href="'/index?page=' + ${page.current - 1}" th:if="${page.hasPrevious()}">上一页</a>
<a th:href="'/index?page=' + ${page.current + 1}" th:if="${page.hasNext()}">下一页</a>
<a th:href="'/index?page=' + ${page.pages}">末页</a>
<span>当前第<span th:text="${page.current}"></span>页 / 共<span th:text="${page.pages}"></span>页 / 共<span th:text="${page.total}"></span>条数据</span>
</div>
</div>
</body>
<script src="/jquery-3.5.1.min.js"></script>
<script>
$("button[name=deleted]").click(function () {
let text=$(this).attr("data-id");
$.ajax({
url: "/del/" + text,
type: "post",
data: {
id: text
},
type: "POST",
dataType: "text",
success: function (result) {
if (result == "1") {
alert("删除成功");
window.location.href = "/index";
} else {
alert("删除失败");
}
},
error: function (result) {
alert("请求失败")
}
})
})
</script>
</html>
修改页面update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改页面</title>
<script src="/jquery-3.5.1.min.js"></script>
<style type="text/css">
.main{
padding: 10px 5px;
margin: auto;
width: 540px;
background-color: lightblue;
border: 2px sandybrown solid;
}
button{
padding: 0px 5px 0px 5px;
background-color: #8488f0;
color: white;
}
</style>
</head>
<body>
<div class="main">
<table>
<tr>
<td colspan="2"><h1>修改</h1></td>
</tr>
<tr>
<td>教师名称</td>
<td><input name="id" type="hidden" id="id" th:value="${teacher.id}">
<input name="name" type="text" id="name" th:value="${teacher.name}"></td>
</tr>
<tr>
<td>入职时间</td>
<td><input name="time" type="date" id="time" th:value="${teacher.time}"></td>
</tr>
<tr>
<td><button>修改</button></td>
</tr>
</table>
</div>
</body>
<script type="text/javascript">
$(":button").click(function (){
var name=$("#name").val();
var time=$("#time").val();
if(name==""||name==null){
alert("教师名称不能为空")
return false;
}if(time==""||time==null){
alert("入职时间不能为空")
return false;
}else {
$.ajax({
url:"/update",
type:"post",
data:{
id:$("#id").val(),
name:$("#name").val(),
time:$("#time").val()
},
dataType:"text",
success:function (result){
if (result=="1"){
alert("提交成功");
window.location.href="/index";
}else{
alert("提交失败");
window.location.href="/toUpdate";
}
},
traditional:true,
error:function (result) {
alert(result);
alert("请求失败");
}
})
}
})
</script>
</html>