当前位置: 首页 > news >正文

要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目

文章目录

  • 要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目
      • 1. 创建Spring Boot项目
      • 2.项目配置
        • 2.1 依赖
        • yml配置
        • 数据库表配置
      • 3.代码实现
        • 3.1 实体类
        • 3.2 数据访问层
        • 3.3 服务层
        • 3.4 控制层
        • 3.5 Thymeleaf模板

要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目

在这里插入图片描述

1. 创建Spring Boot项目

可以通过Spring Initializr(https://start.spring.io/ )来创建项目,添加以下依赖:

  • Spring Web
  • Thymeleaf
  • MyBatis Framework
  • MySQL Driver
  • MyBatis-Plus Boot Starter

2.项目配置

2.1 依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.geekmice.sbtbal</groupId>
    <artifactId>sbtbal</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--Swagger3-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!--knife4j-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-ui</artifactId>
            <version>3.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!--JSON-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.15</version>
        </dependency>

        <!--MySQL-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.31</version>
            <scope>runtime</scope>
        </dependency>

        <!--Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </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.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- AspectJ 依赖 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.7</version> <!-- 请根据实际情况选择合适的版本 -->
        </dependency>

        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.27</version>
        </dependency>
    </dependencies>
</project>
yml配置
server:
  port: 8080

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
  thymeleaf:
    cache: false

mybatis-plus:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.geekmice.sbtbal.entity


数据库表配置
/*
 Navicat Premium Data Transfer

 Source Server         : dsfs
 Source Server Type    : MySQL
 Source Server Version : 80036
 Source Host           : localhost:3306
 Source Schema         : school

 Target Server Type    : MySQL
 Target Server Version : 80036
 File Encoding         : 65001

 Date: 27/03/2025 22:44:03
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(0) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `birthday` date NULL DEFAULT NULL COMMENT '生日',
  `sex` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `address` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `insert_time` timestamp(0) NULL DEFAULT NULL,
  `update_time` timestamp(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1905264654908944386 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

3.代码实现

3.1 实体类
package com.geekmice.sbtbal.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
@TableName("user")
public class User implements Serializable {

    private static final long serialVersionUID=1L;
    private Long id;
    private String userName;
    private String birthday;
    private String sex;
    private String address;
    private Date insertTime;
    private Date updateTime;

}


3.2 数据访问层
package com.geekmice.sbtbal.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.geekmice.sbtbal.entity.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {
}
3.3 服务层
package com.geekmice.sbtbal.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.geekmice.sbtbal.entity.User;

public interface UserService extends IService<User> {
}
package com.geekmice.sbtbal.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.geekmice.sbtbal.entity.User;
import com.geekmice.sbtbal.mapper.UserMapper;
import com.geekmice.sbtbal.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
3.4 控制层
package com.geekmice.sbtbal.controller;

import com.geekmice.sbtbal.entity.User;
import com.geekmice.sbtbal.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    // 显示所有用户
    @GetMapping
    public String showAllUsers(Model model) {
        List<User> users = userService.list();
        model.addAttribute("users", users);
        return "user";
    }

    // 显示添加用户表单
    @GetMapping("/add")
    public String showAddUserForm(Model model) {
        model.addAttribute("user", new User());
        return "add-user";
    }

    // 处理添加用户请求
    @PostMapping("/addFista")
    public String addUser(@ModelAttribute User user) {
        System.out.println(user.toString());
        userService.save(user);
        return "redirect:/users";
    }

    // 显示编辑用户表单
    @GetMapping("/edit/{id}")
    public String showEditUserForm(@PathVariable Long id, Model model) {
        User user = userService.getById(id);
        model.addAttribute("user", user);
        return "edit-user";
    }

    // 处理编辑用户请求
    @PostMapping("/edit/{id}")
    public String editUser(@PathVariable Long id, @ModelAttribute User user) {
        user.setId(id);
        userService.updateById(user);
        return "redirect:/users";
    }

    // 处理删除用户请求
    @GetMapping("/delete/{id}")
    public String deleteUser(@PathVariable Long id) {
        userService.removeById(id);
        return "redirect:/users";
    }
}
3.5 Thymeleaf模板
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>

&nbsp;&nbsp;&nbsp;<a href="/users/add">新增</a>
<br/>
<br/>
<br/>
<table border="5">
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>SEX</th>
        <th>Actions</th>
    </tr>
    <tr th:each="user : ${users}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.userName}"></td>
        <td th:text="${user.sex}"></td>
        <td>
            <a th:href="@{/users/edit/{id}(id=${user.id})}">Edit</a>
            <a th:href="@{/users/delete/{id}(id=${user.id})}">Delete</a>
        </td>
    </tr>
</table>
</body>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js">
    table {
        border: 1px solid #000;
        width: 200px;
        height:500px;
    }

    td {
        border: 1px solid blue;
    }

</script>
</html>

编辑

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<head>
  <title>编辑</title>
</head>
<body>
<h1>编辑</h1>
<form th:action="@{/users/edit/{id}(id=${user.id})}" th:object="${user}" method="post">
  <label for="userName">Name:</label>
  <input type="text" id="userName" th:field="*{userName}" required><br>
  <label for="sex">sex:</label>
  <input  id="sex" th:field="*{sex}" required><br>
  <button type="submit">Update</button>
</form>
<a href="/users">Back to List</a>
</body>
</html>

新增

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<head>
    <title>新增</title>
</head>
<body>
<h1>新增</h1>
<form th:action="@{/users/addFista}" th:object="${user}" method="post">
    <label for="userName">用户名:</label>
    <input type="text" id="userName" th:field="*{userName}" required><br><br>
    <label for="sex">    性别:&nbsp;&nbsp;&nbsp;</label>
    <input  id="sex" th:field="*{sex}" required><br><br>
    <label for="birthday">生日:</label>
    <input id="birthday" type="date" name="birthday"></input><br><br>
    <label for="address">邮箱:</label>
    <input  id="address" type="email" name="address"></input><br><br>
    <button type="submit">submit</button>
</form>
<br>
<br>
<a href="/users">Back to List</a>
</body>
</html>

相关文章:

  • RabbitMQ--延迟队列事务消息分发
  • 全面守护关键基础设施!Fortinet OT 安全平台功能与服务再扩展
  • Level DB --- TableCache
  • 【Elasticsearch入门到落地】10、初始化RestClient
  • springcloud 整合 Redis_Redisson
  • transformers中学习率warmup策略具体如何设置
  • ElementUI元件库——提升Axure原型设计效率与质量
  • 传统神经网络、CNN与RNN
  • R-GCN-Modeling Relational Data with GraphConvolutional Networks(论文笔记)
  • 【第30节】MFC编程:ListCtrl控件和TreeCtrl控件
  • 如何使用腾讯云HAI快速、高质量生成Stable Diffusion图片
  • 容器C++ ——STL常用容器
  • Flask(五)表单处理与验证
  • 浅析车规芯片软错误防护加固的重要性
  • (常识)C++中的模板(函数模板、类模板)——参数传递方式?继承与模板?分文件编写?
  • Spring的 @Conditional @ConditionalOnProperty 注解 笔记250330
  • Redis 01
  • 09-SpringBoot3入门-整合Mybatis
  • 青少年软件编程(C语言)等级考试试卷(三级)
  • WP Mail 邮件发送:WordPress Mail SMTP设置
  • 高端设计机构/百度seo手机
  • 网站漏洞解决/成都品牌推广
  • 网站制作资质/淘宝seo是什么
  • 昆山市做网站/网站seo关键词设置
  • b2b网站方案/seo网络优化招聘信息
  • 怎么查询网站有没有做网站地图/武汉seo创造者