项目概述
基于 SpringBoot、MySQL 的增删查改
新建项目
- 新建数据库以及表
新建 java 项目
创建项目:
选择 Spring Initializr,选择 java 和 Maven,填写项目名字
SDK 选择 1.8,Java 选择 8
下一步,选择以下的配置:

配置 application.yml 文件
默认是application.properties,自己再新建一个application.yml即可
# 数据库地址 spring.datasource.url=jdbc:mysql: spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 自己的数据库名以及密码 spring.datasource.username=root spring.datasource.password=root
# mybatis # 对应的映射文件 mybatis.mapper-locations=classpath:mybatis/mapper
|
架构
四个软件包:controller、service、mapper、entity
以及一个主应用入口:Application

- controller 对应控制器,用于对接接口的映射
- service 用于业务处理(当然目前比较简单,只作用于一个传递的功能)
- mapper 就是一些增删改查的接口
- entity 实体类,数据库中的每一张表对应于一个实体类(当然,可以有更详细的vo,bo之类的,只不过当前的demo比较简单,就一个数据库对应一个实体类啦)
- resource/mapper 用于编写实际sql的xml的地方
编写代码
先直接上所有文件

编写实体类 User
在包entity下,创建User类,然后提供与数据库对应的字段作为属性,现在使用lombok提供的注解,省略了很多构造方法
package com.lanke.player_demo.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; @Data @NoArgsConstructor @AllArgsConstructor @ToString public class User { private int id; private String name; private String password; private String sex; private int age; private String phone; }
|
编写 mapper 接口
目前比较简单,只针对了一张表
package com.lanke.player_demo.mapper; import com.lanke.player_demo.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface UserMapper { List<User> getAllUsers(); int addUser(User user); int updUserById(User user); User findUserById(@Param("id") int id); int delUserById(@Param("id") int id); }
|
编写mapper.xml
文件在 Resource 目录下
<?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.lanke.player_demo.mapper.UserMapper">
<select id="getAllUsers" resultType="com.lanke.player_demo.entity.User"> select * from user </select>
<insert id="addUser" > insert into user (name,password,sex,age,phone) values (#{name},#{password},#{sex},#{age},#{phone}) </insert>
<update id="updUserById"> update user set name = #{name}, sex = #{sex}, phone = #{phone}, age = #{age} where id = #{id} </update>
<select id="findUserById" resultType="com.lanke.player_demo.entity.User"> select * from user where id = #{id} </select>
<delete id="delUserById"> delete from user where id = #{id} </delete> </mapper>
|
注意:
- namespace命名空间,要指定你的mapper接口的完整路径
- 增删改查分别对应于四个标签 insert delete update select
- 每个sql对应于你的mapper接口中的方法,我们需要通过id去指定你当前的sql是哪个接口方法的
#{xxx} 这是mybatis提供的一种占位符,就是之前sql中学的 ? 占位符resultType 结果类型,如果是实体类的话也需要通过指定完整的类路径
编写 service
package com.lanke.player_demo.service;
import com.lanke.player_demo.entity.User; import com.lanke.player_demo.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
import java.util.List;
@Service public class UserService {
@Autowired private UserMapper userMapper;
public List<User> getAllUsers(){ return userMapper.getAllUsers(); }
public int addUser(User user){ return userMapper.addUser(user); }
public int updUserById(User user){ return userMapper.updUserById(user); }
public User findUserById(int id){ return userMapper.findUserById(id); }
public int delUserById(int id){ return userMapper.delUserById(id); } }
|
编写 controller
package com.lanke.player_demo.controller;
import com.lanke.player_demo.entity.User; import com.lanke.player_demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RequestMapping("/user") public class UserController {
@Autowired private UserService userService;
@GetMapping("/list") public List<User> getAllUsers(){ return userService.getAllUsers(); }
@PostMapping("/add") public int addUser(@RequestBody User user){ return userService.addUser(user); }
@PutMapping("/upd") public int updUserById(@RequestBody User user){ return userService.updUserById(user); }
@GetMapping("/find/{id}") public User findUserById(@PathVariable("id") int id){ return userService.findUserById(id); }
@DeleteMapping("/delete/{id}") public int delUserById(@PathVariable("id") int id){ return userService.delUserById(id); } }
|
@RestController 这个注解,可以将你的每个接口的返回值转换为一个json
@RequestMapping 用于指定接口的映射规则,这个的话,接着往下看就明白啦。
详情可以参阅:springbootWeb常用注解使用_springboot web 相关注解-CSDN博客
这样一个简单的增删查改就完成了。
但实际的后端开发仅仅这样是不够的,我们还需要写接口等等内容
Maven 配置
<?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> <groupId>org.lanke</groupId> <artifactId>player_demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>player_demo</name> <description>player_demo</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.7.6</spring-boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.0</version> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>org.lanke.player_demo.PlayerDemoApplication</mainClass> <skip>true</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
</project>
|
MySQL 代码
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;
-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(255) COMMENT '姓名', `password` varchar(255) COMMENT '密码', -- 注意:通常密码不会以明文形式存储,这里仅作示例 `sex` enum('male', 'female', 'other') DEFAULT NULL COMMENT '性别', -- 使用ENUM类型限制性别输入 `age` int DEFAULT NULL COMMENT '年龄', `phone` varchar(20) DEFAULT NULL COMMENT '电话', -- 电话号码通常不需要255个字符那么长 PRIMARY KEY (`id`) -- USING BTREE是多余的,InnoDB默认使用B-Tree索引 ) ENGINE=InnoDB AUTO_INCREMENT=1 -- 通常从1开始自增,除非有特定原因 CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表' ROW_FORMAT=Dynamic;
-- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, '张三', '123456', '男', 25, '18888889999'); INSERT INTO `user` VALUES (3, 'robin', '123456', '男', 22, '14424567789');
SET FOREIGN_KEY_CHECKS = 1;
|
常见问题 :
出现依赖爆红错误
解决方法是选择/文件/使缓存失效,重启就可以了

参考资料
- springboot 如何编写增删改查后端接口,小白极速入门,附完整代码_教你写后端接口-CSDN博客