spring Boot+mybatis-plus+Thymeleaf+MySql增删改查(含有分页+雪花Id)

项目结构

数据库结构

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>

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值