一、 前言
SpringBoot 框架入门,整合 MyBatis完成对 MySQL 数据库的 CRUD(增删改查),并实现两个自定义查询。
二、 环境与依赖准备
类型选择maven、依赖项勾选Spring Web、MYSQL Driver
JDK: 17
Maven: 3.9.16
数据库: MySQL 8.0.44
测试工具: Apifox
核心依赖 (pom.xml):
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webmvc</artifactId> </dependency> <!-- ✅ Boot 4.x 专用 MyBatis-Plus starter,不能混用 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot4-starter</artifactId> <version>3.5.16</version> </dependency> <!-- 分页插件,版本须与 starter 对应 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-jsqlparser</artifactId> <version>3.5.16</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webmvc-test</artifactId> <scope>test</scope> </dependency> </dependencies>
三、 数据库表设计
在 Navicat 中创建名为 L06的数据库,并建立字段
四、 核心代码实现 (四层架构)
文件目录结构如下
1. Domain (实体类)/User
package com.example.demo.domain; import java.util.Date; public class User { private Integer id; private String name; private Date birthday; private String sex; private Date createTime; //此处get和set方式省略,自行右键生成补充 }2. Mapper (数据访问层)/UserMapper
package com.example.demo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.domain.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user ORDER BY name DESC") List<User> getAllUserSortByNameDesc(); List<User> selectUserList(); }配合 XML (resources/mapper/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="selectUserList" resultType="com.example.demo.domain.User"> SELECT id, name, birthday, sex, create_time AS createTime FROM user </select> </mapper>3. Service (业务逻辑层)
package com.example.demo.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.example.demo.domain.User; import com.example.demo.mapper.UserMapper; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Integer id) { return userMapper.selectById(id); } @Override public List<User> getAllUsers() { return userMapper.selectList(null); } @Override public boolean addUser(User user) { return userMapper.insert(user) > 0; } @Override public boolean updateUser(User user) { return userMapper.updateById(user) > 0; } @Override public boolean deleteUser(Integer id) { return userMapper.deleteById(id) > 0; } @Override public List<User> getAllUserSortByNameDesc() { return userMapper.getAllUserSortByNameDesc(); } @Override public List<User> selectUserList() { return userMapper.selectUserList(); } }4. Controller (控制层)
package com.example.demo.controller; import com.example.demo.domain.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/user") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUser(@PathVariable("id") Integer id) { return userService.getUserById(id); } @GetMapping("/list") public List<User> listUsers() { return userService.getAllUsers(); } @PostMapping public String addUser(@RequestBody User user) { return userService.addUser(user) ? "添加成功" : "添加失败"; } @PutMapping public String updateUser(@RequestBody User user) { return userService.updateUser(user) ? "更新成功" : "更新失败"; } @DeleteMapping("/{id}") public String deleteUser(@PathVariable("id") Integer id) { return userService.deleteUser(id) ? "删除成功" : "删除失败"; } @GetMapping("/sort") public List<User> sortUsers() { return userService.getAllUserSortByNameDesc(); } @GetMapping("/xmlList") public List<User> xmlUsers() { return userService.selectUserList(); } }五、 Apifox 接口测试结果
1. GET 根据 ID 获取:GET http://localhost:8080/api/user
2. GET 获取列表:GET http://localhost:8080/api/user/list
3. POST 添加用户:POST http://localhost:8080/api/user
4. PUT 更新用户:PUT http://localhost:8080/api/user
5. DELETE 删除用户:DELETE http://localhost:8080/api/user/3