Spring Boot 3与MyBatis集成:从零实现增删改查全流程指南

一、项目初始化与基础配置

1.1 创建标准化项目结构

推荐使用Spring Initializr工具生成项目骨架,选择以下核心依赖:

  • Spring Web (构建RESTful接口)
  • MyBatis Framework (ORM框架)
  • MySQL Driver (数据库连接)
  • Lombok (简化实体类开发)

项目生成后需执行以下优化操作:

  1. 删除src/test目录下自动生成的测试类(后续按需补充)
  2. 清空application.properties文件并转换为YAML格式配置
  3. 统一项目编码为UTF-8(IDE设置中需同步修改文件编码与控制台编码)

1.2 构建工具配置优化

pom.xml中补充关键插件配置:

  1. <build>
  2. <plugins>
  3. <!-- Maven编译插件 -->
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-compiler-plugin</artifactId>
  7. <version>3.11.0</version>
  8. <configuration>
  9. <source>17</source>
  10. <target>17</target>
  11. <encoding>UTF-8</encoding>
  12. </configuration>
  13. </plugin>
  14. <!-- MyBatis Generator插件(可选) -->
  15. <plugin>
  16. <groupId>org.mybatis.generator</groupId>
  17. <artifactId>mybatis-generator-maven-plugin</artifactId>
  18. <version>1.4.2</version>
  19. </plugin>
  20. </plugins>
  21. </build>

二、数据库集成配置

2.1 连接池配置最佳实践

推荐使用HikariCP连接池,在application.yml中配置:

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC
  4. username: root
  5. password: '012345' # 密码以0开头需加引号
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. hikari:
  8. maximum-pool-size: 10
  9. connection-timeout: 30000
  10. idle-timeout: 600000

2.2 实体类与Mapper接口设计

创建标准化的实体类(以User为例):

  1. @Data
  2. @TableName("sys_user") // 若使用MyBatis-Plus可添加此注解
  3. public class User {
  4. @TableId(type = IdType.AUTO) // 主键自增策略
  5. private Long id;
  6. private String username;
  7. private String email;
  8. private LocalDateTime createTime;
  9. }

对应的Mapper接口应遵循以下规范:

  1. @Mapper
  2. public interface UserMapper {
  3. // 基础CRUD方法
  4. int insert(User user);
  5. int deleteById(Long id);
  6. int update(User user);
  7. User selectById(Long id);
  8. List<User> selectAll();
  9. // 条件查询示例
  10. List<User> selectByUsername(@Param("username") String username);
  11. }

三、MyBatis核心配置

3.1 XML映射文件规范

resources/mapper目录下创建UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.example.mapper.UserMapper">
  5. <resultMap id="BaseResultMap" type="com.example.entity.User">
  6. <id column="id" property="id"/>
  7. <result column="username" property="username"/>
  8. <result column="email" property="email"/>
  9. <result column="create_time" property="createTime"/>
  10. </resultMap>
  11. <insert id="insert" parameterType="com.example.entity.User"
  12. useGeneratedKeys="true" keyProperty="id">
  13. INSERT INTO sys_user(username, email, create_time)
  14. VALUES(#{username}, #{email}, #{createTime})
  15. </insert>
  16. <!-- 其他SQL语句省略... -->
  17. </mapper>

3.2 动态SQL高级应用

推荐使用<where><set>等标签实现动态SQL:

  1. <update id="update" parameterType="com.example.entity.User">
  2. UPDATE sys_user
  3. <set>
  4. <if test="username != null">username = #{username},</if>
  5. <if test="email != null">email = #{email},</if>
  6. </set>
  7. WHERE id = #{id}
  8. </update>

四、业务层实现

4.1 Service层设计规范

创建标准的UserService接口:

  1. public interface UserService {
  2. User createUser(UserDTO userDTO);
  3. User updateUser(Long id, UserDTO userDTO);
  4. void deleteUser(Long id);
  5. User getUserById(Long id);
  6. PageInfo<User> getAllUsers(int pageNum, int pageSize);
  7. }

实现类中应包含事务管理:

  1. @Service
  2. @RequiredArgsConstructor
  3. public class UserServiceImpl implements UserService {
  4. private final UserMapper userMapper;
  5. @Override
  6. @Transactional
  7. public User createUser(UserDTO userDTO) {
  8. User user = new User();
  9. BeanUtils.copyProperties(userDTO, user);
  10. user.setCreateTime(LocalDateTime.now());
  11. userMapper.insert(user);
  12. return user;
  13. }
  14. // 其他方法实现省略...
  15. }

4.2 分页查询实现

推荐使用PageHelper分页插件:

  1. 添加依赖:

    1. <dependency>
    2. <groupId>com.github.pagehelper</groupId>
    3. <artifactId>pagehelper-spring-boot-starter</artifactId>
    4. <version>1.4.7</version>
    5. </dependency>
  2. 服务层实现:

    1. @Override
    2. public PageInfo<User> getAllUsers(int pageNum, int pageSize) {
    3. PageHelper.startPage(pageNum, pageSize);
    4. List<User> users = userMapper.selectAll();
    5. return new PageInfo<>(users);
    6. }

五、控制器层实现

5.1 RESTful API设计规范

创建UserController遵循以下原则:

  1. @RestController
  2. @RequestMapping("/api/users")
  3. @RequiredArgsConstructor
  4. public class UserController {
  5. private final UserService userService;
  6. @PostMapping
  7. public ResponseEntity<User> createUser(@Valid @RequestBody UserDTO userDTO) {
  8. User user = userService.createUser(userDTO);
  9. return ResponseEntity.created(URI.create("/api/users/" + user.getId()))
  10. .body(user);
  11. }
  12. @GetMapping("/{id}")
  13. public ResponseEntity<User> getUser(@PathVariable Long id) {
  14. return ResponseEntity.ok(userService.getUserById(id));
  15. }
  16. // 其他接口省略...
  17. }

5.2 统一异常处理

创建全局异常处理器:

  1. @ControllerAdvice
  2. public class GlobalExceptionHandler {
  3. @ExceptionHandler(MethodArgumentNotValidException.class)
  4. public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
  5. Map<String, String> errors = new HashMap<>();
  6. ex.getBindingResult().getAllErrors().forEach(error -> {
  7. String fieldName = ((FieldError) error).getField();
  8. String errorMessage = error.getDefaultMessage();
  9. errors.put(fieldName, errorMessage);
  10. });
  11. return ResponseEntity.badRequest().body(errors);
  12. }
  13. }

六、项目优化建议

  1. 配置管理:使用Spring Cloud Config或Nacos实现配置中心化
  2. 日志体系:集成Logback+SLF4J实现结构化日志
  3. 监控告警:通过Micrometer+Prometheus+Grafana构建监控体系
  4. API文档:使用Swagger/OpenAPI生成交互式文档
  5. 安全防护:集成Spring Security实现JWT认证授权

本文完整演示了从项目初始化到业务实现的完整流程,开发者可根据实际需求调整技术选型和实现细节。建议在实际项目中结合单元测试(JUnit 5+Mockito)和集成测试(Testcontainers)保证代码质量,并通过CI/CD流水线实现自动化部署。