Pom文件
<?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 https://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.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<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.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</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>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.4</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
数据库准备
/*
Navicat Premium Data Transfer
Source Server : local
Source Server Type : MySQL
Source Server Version : 80029
Source Host : localhost:3306
Source Schema : db_demo2
Target Server Type : MySQL
Target Server Version : 80029
File Encoding : 65001
Date: 24/10/2022 00:00:20
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`pwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`age` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'name1', '12345', '111111', 1);
INSERT INTO `user` VALUES (2, 'name2', '222', '222222', 2);
INSERT INTO `user` VALUES (4, 'name4', '444', '444444', 4);
INSERT INTO `user` VALUES (5, 'name5', '555', '55555', 5);
INSERT INTO `user` VALUES (6, 'name6', '666', '666666', 6);
INSERT INTO `user` VALUES (7, 'name7', '777', '77777', 7);
INSERT INTO `user` VALUES (8, 'jack', '123456', '12345', 18);
SET FOREIGN_KEY_CHECKS = 1;
application.yml
server:
port: 8080
spring:
datasource:
name: db_demo2
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_demo2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 12345
main:
allow-circular-references: true
thymeleaf:
cache: false #关闭缓存
mode: HTML5 #设置模板类型
encoding: utf-8 #设置编码
suffix: .html
pagehelper: #pagehelper分页插件配置
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSqll
application·.properties
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/db_demo2?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username = root
spring.datasource.password = 12345
server.port=8080
UserBean
package com.example.demo.bean;
import java.io.Serializable;
public class UserBean implements Serializable {
private int id;//主键是不参与构造的
private String name;
private String pwd;
private String email;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserBean{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
UserMapper.java
package com.example.demo.mapper;
import com.example.demo.bean.UserBean;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
public int addUser(UserBean userBean);
public int updateUser(UserBean userBean);
public int deleteUser(int id);
public List<UserBean> findAll();
public UserBean findOneById(int id);
}
UserMapper.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.mapper.UserMapper">
<select id="findAll" resultType="com.example.demo.bean.UserBean">
select * from user
</select>
<select id="findOneById" resultType="com.example.demo.bean.UserBean" parameterType="int">
select * from user where id=#{id}
</select>
<!-- insert update delete的返回值resultType默认为int类型 -->
<insert id="addUser" parameterType="com.example.demo.bean.UserBean" >
insert into user() value(#{id},#{name},#{pwd},#{email},#{age})
</insert>
<update id="updateUser" parameterType="com.example.demo.bean.UserBean">
update user set name=#{name},pwd=#{pwd},email=#{email},age=#{age} where id=#{id}
</update>
<delete id="deleteUser" parameterType="com.example.demo.bean.UserBean">
delete from user where id=#{id}
</delete>
</mapper>
UserService.java
package com.example.demo.service;
import com.example.demo.bean.UserBean;
import java.util.List;
public interface UserService {
// 查询全部
List<UserBean> findAll();
// 添加数据
int addUser(UserBean userBean);
// 删除数据
Integer deleteUser(int id);
// 修改需要先查询出来对象数据,显示然后进行数据提交,依据id唯一进行修改
int updateUser(UserBean userBean);
// 查询对象
UserBean findOneById(int id);
}
UserServiceImpl.java
package com.example.demo.service;
import com.example.demo.bean.UserBean;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements UserService{
@Resource
private UserMapper userMapper;
@Override
public List<UserBean> findAll() {
return userMapper.findAll();
}
@Override
public int addUser(UserBean userBean) {
return userMapper.addUser(userBean);
}
@Override
public Integer deleteUser(int id) {
return userMapper.deleteUser(id);
}
@Override
public int updateUser(UserBean userBean) {
return userMapper.updateUser(userBean);
}
@Override
public UserBean findOneById(int id) {
return userMapper.findOneById(id);
}
}
UserController.Java
package com.example.demo.controller;
import com.example.demo.bean.UserBean;
import com.example.demo.service.UserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Controller
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/user/login")
public ModelAndView login(ModelAndView mv, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum) {
if (pageNum < 1 || pageNum == null) {
pageNum = 1;
}
PageHelper.startPage(pageNum, 5);
List<UserBean> list = userService.findAll();
PageInfo<UserBean> pageInfo = new PageInfo<UserBean>(list);
mv.addObject("pageInfo", pageInfo);
mv.setViewName("list");
return mv;
}
@PostMapping("/user/add")
// @ResponseBody
public String add(UserBean userBean, HttpServletResponse servletResponse) throws IOException {
int addUser = userService.addUser(userBean);
if (addUser == 1) {
servletResponse.sendRedirect("/user/login");
}
return "error";
}
@RequestMapping("/user/useradd")
public String add() {
return "add";
}
// 删除数据
@RequestMapping("/user/deleteUser")
public String deleteUser(@RequestParam Integer id, HttpServletResponse servletResponse) throws IOException {
int count = userService.deleteUser(id);
System.out.println("1111111");
if (count == 1) {
servletResponse.sendRedirect("/user/login");
}
return "error";
}
// 更新数据
@RequestMapping("/user/updateName")
public ModelAndView updateName(ModelAndView mv, int id) {
UserBean findOne = userService.findOneById(id);
mv.addObject("users", findOne);
mv.setViewName("update");
return mv;
}
@PostMapping("/user/userUpdate")
public String updateUser(UserBean userBean, HttpServletResponse servletResponse) throws IOException {
int userUpdate = userService.updateUser(userBean);
if (userUpdate == 1) {
servletResponse.sendRedirect("/user/login");
}
return "error";
}
// 根据id查找
@PostMapping("/user/updatePage")
public ModelAndView updatePage(int id, ModelAndView mv,
@RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum) {
UserBean users = userService.findOneById(id);
if (pageNum < 1 || pageNum == null) {
pageNum = 1;
}
PageHelper.startPage(pageNum, 5);
List<UserBean> list = new ArrayList<>();
list.add(users);
PageInfo<UserBean> pageInfo = new PageInfo<UserBean>(list);
mv.addObject("pageInfo", pageInfo);
mv.setViewName("list");
return mv;
}
}
主启动程序
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
前端页面
list.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link
href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet">
</head>
<style>
p a {
background-color: white;
}
h2 {
text-align: center;
}
.search_form {
width: 602px;
height: 42px;
}
/*左边输入框设置样式*/
.input_text {
width: 200px;
height: 30px;
border: 1px solid green;
/*清除掉默认的padding*/
padding: 0px;
/*提示字首行缩进*/
text-indent: 10px;
/*去掉蓝色高亮框*/
outline: none;
/*用浮动解决内联元素错位及小间距的问题*/
float: left;
}
.input_sub {
width: 70px;
height: 30px;
background: green;
/*去掉submit按钮默认边框*/
border: 0px;
float: left;
color: white; /*搜索的字体颜色为白色*/
cursor: pointer; /*鼠标变为小手*/
}
</style>
<body>
<h2>SpringBoot-CURD</h2>
<form class="search_form" th:action="@{/user/updatePage}" method="post">
<input type="text" class="input_text" placeholder="请输入id搜索" name="id">
<input type="submit" value="搜索" class="input_sub">
</form>
<table
class="table table-striped table-bordered table-hover text-center">
<thead>
<tr style="text-align: center">
<th>id</th>
<th>name</th>
<th>pwd</th>
<th>email</th>
<th>age</th>
<th>operation</th>
</tr>
</thead>
<tr th:each="user:${pageInfo.list}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.pwd}"></td>
<td th:text="${user.email}"></td>
<td th:text="${user.age}"></td>
<td><a class="btn btn-primary"
th:href="@{/user/updateName(id=${user.id})}">更改</a> <a
class="btn btn-danger"
th:href="@{'/user/deleteUser?id='+${user.id}}">删除</a></td>
</tr>
</table>
<p>
当前 <span th:text="${pageInfo.pageNum}"></span> 页,总 <span
th:text="${pageInfo.pages}"></span> 页,共 <span
th:text="${pageInfo.total}"></span> 条记录
<a th:href="@{/user/login(pageNum=1)}">首页</a>
<a th:href="@{/user/login(pageNum=${pageInfo.pageNum}-1)}">上一页</a>
<a th:href="@{/user/login(pageNum=${pageInfo.pageNum}+1)}">下一页</a>
<a th:href="@{/user/login(pageNum=${pageInfo.pages})}">尾页</a>
</p>
<button class="btn btn-block">
<a href="/user/useradd">添加用户</a>
</button>
</body>
</html>
add.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>添加用户</title>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div style="width:600px;height:100%;margin-left:270px;">
<form action="/user/add" method="post">
用户名:<input class="form-control" type="text" th:value="${name}" name="name"/><br/>
密 码:<input class="form-control" type="text" th:value="${pwd}" name="pwd"/><br/>
email:<input class="form-control" type="text" th:value="${email}" name="email"><br>
年龄:<input class="form-control" type="text" th:value="${age}" name="age"><br>
<button class="btn btn-primary btn-lg btn-block">保存</button>
</form>
</div>
</body>
</html>
update.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>修改用户</title>
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div style="width:600px;height:100%;margin-left:270px;">
<form action="/user/userUpdate" method="post">
ID:<input class="form-control" name="id" type="text" th:value="${users.id}" readonly="readonly"><br>
用户名:<input class="form-control" type="text" th:value="${users.name}" name="name"><br>
密 码:<input class="form-control" type="text" th:value="${users.pwd}" name="pwd"><br>
email:<input class="form-control" type="text" th:value="${users.email}" name="email"><br>
年龄:<input class="form-control" type="text" th:value="${users.age}" name="age"><br>
<button class="btn btn-primary btn-lg btn-block" type="submit">提交</button>
</form>
</div>
</body>
</html>
运行结果