MyBatis-Plus的引入和配置

定义:
MyBatis 是一个"半自动"的 ORM(对象关系映射)框架。

它的核心作用是:帮你把 Java 代码里的对象(Object)和数据库里的表(Table/SQL)连接起来。

如果没有 MyBatis,你需要手动写大量的 JDBC 代码来操作数据库;有了 MyBatis,你只需要写 SQL 语句和定义接口,剩下的脏活累活它帮你干。

MyBatis-Plus (简称 MP)MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

作用:

  • 建立数据库连接
  • 发送 SQL 给数据库
  • 拿到结果集
  • 自动把结果集里的字段映射成 Java 对象(User)
  • 关闭连接

以下是基于 Spring Boot 整合 MyBatis-Plus 的详细步骤:

1. 引入依赖 (Maven)

pom.xml 中添加 MyBatis-Plus starter 依赖。

xml 复制代码
<dependencies>
    <!-- Spring Boot Web (可选,根据项目需求) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- MyBatis-Plus Starter -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.5</version> <!-- 建议使用最新稳定版 -->
    </dependency>

    <!-- 数据库驱动 (以 MySQL 为例) -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    <!-- Lombok (可选,简化实体类代码) -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

2. 配置 application.yml

在 src/main/resources/application.yml 中配置数据源和 MP 的基本设置

xml 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: your_password

# MyBatis-Plus 配置
mybatis-plus:
  # 配置 Mapper XML 文件的位置 (如果使用了 XML 方式)
  mapper-locations: classpath*:/mapper/**/*.xml
  # 配置类型别名包扫描 (可选,简化 XML 中的类型引用)
  type-aliases-package: com.example.demo.entity
  
  # 全局配置
  global-config:
    db-config:
      # 主键策略: ASSIGN_ID (雪花算法), AUTO (数据库自增), INPUT (手动输入)
      id-type: ASSIGN_ID
      # 逻辑删除字段名 (可选)
      logic-delete-field: deleted
      # 逻辑删除值: 1表示删除, 0表示未删除
      logic-delete-value: 1
      logic-not-delete-value: 0

  # 开启控制台 SQL 打印 (开发环境推荐)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 开启驼峰命名自动映射 (user_name -> userName)
    map-underscore-to-camel-case: true

3. 创建实体类 (Entity)

使用注解将 Java 对象与数据库表映射。

java 复制代码
package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

@Data
@TableName("user") // 指定对应的数据库表名
public class User implements Serializable {

    @TableId(type = IdType.ASSIGN_ID) // 主键策略
    private Long id;

    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT) // 插入时自动填充
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新时自动填充
    private LocalDateTime updateTime;

    @TableLogic // 逻辑删除注解
    private Integer deleted;
}

4. 创建 Mapper 接口

继承 BaseMapper,即可获得通用的 CRUD 方法,无需编写 XML 或实现类。

java 复制代码
package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper // 或者在启动类上加 @MapperScan("com.example.demo.mapper")
public interface UserMapper extends BaseMapper<User> {
    // 这里可以定义自定义的复杂查询方法
    // 例如: List<User> selectUsersByCustomCondition(@Param("ew") Wrapper<User> queryWrapper);
}

完整项目结构,及代码示例

项目结构

各文件详细内容:
1.主入口文件:src/main/java/com/example/demo/DemoApplication.java

java 复制代码
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") // 👈 扫描 Mapper 接口
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

2. 配置类(Configuration):src/main/java/com/example/demo/config/WebConfig.java

java 复制代码
package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOriginPatterns("*") // ✅ 改用 allowedOriginPatterns,支持通配符 + 凭证
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true);    // 允许携带 Cookie/Auth Header
    }
}

3.控制层(Presentation Layer):src/main/java/com/example/demo/controller/UserController.java

java 复制代码
package com.example.demo.controller;

import com.example.demo.entity.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("/users")
public class UserController {

    @Autowired
    private UserService userService;

    // 查询所有
    @GetMapping
    public List<User> getAll() {
        return userService.getAllUsers();
    }

    // 根据 ID 查询
    @GetMapping("/{id}")
    public User getById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    // 新增
    @PostMapping
    public String add(@RequestBody User user) {
        userService.addUser(user);
        return "User added successfully";
    }

    // 更新
    @PutMapping
    public String update(@RequestBody User user) {
        userService.updateUser(user);
        return "User updated successfully";
    }

    // 删除
    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id) {
        userService.deleteUser(id);
        return "User deleted successfully";
    }

    // 模糊查询
    @GetMapping("/search")
    public List<User> search(@RequestParam String name) {
        return userService.searchUsersByName(name);
    }
}

4. 实体类: src/main/java/com/example/demo/entity/User.java

java 复制代码
package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

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

    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;
    private Integer age;
    private String email;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

5.Mapper 接口:src/main/java/com/example/demo/mapper/UserMapper.java

java 复制代码
package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper 后,无需写任何代码即可拥有 CRUD 方法
}

6.业务接口:src/main/java/com/example/demo/service/UserService.java

java 复制代码
package com.example.demo.service;

import com.example.demo.entity.User;
import java.util.List;

public interface UserService {
    List<User> getAllUsers();
    User getUserById(Long id);
    void addUser(User user);
    void updateUser(User user);
    void deleteUser(Long id);
    List<User> searchUsersByName(String name);
}

7.业务实现类:src/main/java/com/example/demo/service/impl/UserServiceImpl.java

java 复制代码
package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.demo.entity.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 List<User> getAllUsers() {
        return userMapper.selectList(null);
    }

    @Override
    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }

    @Override
    public void addUser(User user) {
        userMapper.insert(user);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void deleteUser(Long id) {
        userMapper.deleteById(id);
    }

    @Override
    public List<User> searchUsersByName(String name) {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(User::getName, name);
        return userMapper.selectList(wrapper);
    }
}

8.resources/application.properties ------ 配置文件

yaml 复制代码
server:
  port: 8080

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    #  注意:demo_db 数据库必须存在,否则启动后会报连接错误(但不是现在的 Bean 错误)
    url: jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 你的个人密码  # 👈 确保这个密码是你本地 MySQL 的真实密码

  sql:
    init:
      mode: never  # 👈 这行很重要,保留它

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      id-type: auto

9.完整的pom.xml依赖文件非常重要

xml 复制代码
<?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>3.2.12</version> <!-- ✅ 稳定版,避免兼容性问题 -->
		<relativePath/>
	</parent>

	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>MyBatis-Plus CRUD Demo</description>

	<properties>
		<java.version>17</java.version>
	</properties>

	<dependencies>
		<!-- Spring Boot Web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- MyBatis-Plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<!-- ✅ 改为 3.5.7 或更高,这是支持 Spring Boot 3.2/3.3 的稳定版本 -->
			<version>3.5.7</version>
		</dependency>

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

		<!-- Lombok (简化实体类) -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.30</version>
			<optional>true</optional>
		</dependency>

		<!-- Test -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</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.7</version>
			<exclusions>
				<!-- 1. 排除旧版的 mybatis-spring -->
				<exclusion>
					<groupId>org.mybatis</groupId>
					<artifactId>mybatis-spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!-- 2. 手动引入兼容 Spring Boot 3 的 mybatis-spring 3.0.3+ -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>3.0.3</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

请严格遵守上述依赖文件,不然可能会造成版本依赖问题
Spring JDBC 版本冲突,
MyBatis-Plus 版本不兼容,
MyBatis-Spring 核心依赖过旧等问题可以完美避开!!!!

经过修改的 pom.xml,请执行以下命令:

1.清理并重新构建:

bash 复制代码
mvn clean install -U -DskipTests

2.验证依赖树:

bash 复制代码
mvn dependency:tree -Dincludes=org.mybatis:mybatis-spring

正确输出:

text 复制代码
[INFO] \- org.mybatis:mybatis-spring:jar:3.0.3:compile

3.运行:

bash 复制代码
mvn spring-boot:run

最后打开浏览器访问http://localhost:8080

出现以下截图:

恭喜你!成功引入MyBatis-Plus

总结

MyBatis 就是让你能用 Java 对象的方式操作数据库,同时还能让你自己掌控 SQL 语句,从而保证性能的工具

相关推荐
日月云棠1 小时前
JAVA数据结构与算法 - 基础:常用集合简述
java·算法
日月云棠1 小时前
JAVA数据结构与算法 - 基础:BlockingQueue
java·算法
哪吒编程1 小时前
GPT 5.5 Thinking深度思考了十几分钟,给我挖了一个排查一周的并发大坑
java
likerhood1 小时前
设计模式 · 享元模式(Flyweight Pattern)java
java·设计模式·享元模式
Royzst2 小时前
图书管理案例
java·开发语言
带刺的坐椅2 小时前
SolonCode v2026.5.21 发布,Web 能看项目,IM 能找队友
java·ai编程·数字员工·soloncode·终端智能体
dunky2 小时前
副本机制与 ISR 设计:为什么 Kafka 这么快又这么可靠
java
夕除2 小时前
spring boot 9
java·mysql·spring
执明wa2 小时前
从 T 到协变逆变
java·开发语言·数据结构