1. 前言
1.1 MyBatis Plus 简介
MyBatis Plus 是一个 MyBatis 的增强工具,旨在简化开发人员在数据库操作上的工作量。它提供了丰富的功能,如自动化的 CRUD 操作、条件构造器、分页查询等,极大地提高了开发效率。
1.2 为什么选择 MyBatis Plus
- 简化代码:自动生成基础的 CRUD 方法,减少重复代码。
- 提高效率:内置多种插件和工具,提升开发速度。
- 易于维护:代码结构清晰,便于后续维护和扩展。
1.3 适用场景与优势
适用于需要频繁进行数据库操作的 Java 项目,尤其是中小型项目或对开发效率有较高要求的团队。
2. 环境准备
2.1 开发环境搭建
确保您的开发环境中已经安装了以下组件:
- JDK 8 或更高版本
- Maven 或 Gradle 构建工具
- IDE(如 IntelliJ IDEA 或 Eclipse)
2.1.1 JDK 安装与配置
确保 JDK 已正确安装并配置好环境变量 JAVA_HOME
和 PATH
。
2.1.2 IDE 配置
推荐使用 IntelliJ IDEA 或 Eclipse,并安装 MyBatis 插件以获得更好的代码提示和调试支持。
2.2 引入 MyBatis Plus 依赖
2.2.1 Maven 依赖配置
在 pom.xml
文件中添加以下依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version>
</dependency>
2.2.2 Gradle 依赖配置
在 build.gradle
文件中添加以下依赖:
implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.3'
3. 快速入门
3.1 创建数据库表结构
假设我们有一个简单的用户表 user
:
CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT NOT NULL,email VARCHAR(100)
);
3.2 实体类定义
创建对应的实体类 User.java
:
package com.example.demo.entity;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {@TableIdprivate Long id;private String name;private Integer age;private String email;
}
3.3 Mapper 接口编写
创建 UserMapper.java
,继承 BaseMapper
:
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> {
}
3.4 第一个 CRUD 示例
编写测试用例来验证基本的 CRUD 操作:
package com.example.demo;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class UserTests {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {User user = new User();user.setName("John Doe");user.setAge(30);user.setEmail("john.doe@example.com");userMapper.insert(user);}@Testpublic void testSelectById() {User user = userMapper.selectById(1L);System.out.println(user);}@Testpublic void testUpdateById() {User user = new User();user.setId(1L);user.setAge(31);userMapper.updateById(user);}@Testpublic void testDeleteById() {userMapper.deleteById(1L);}@Testpublic void testSelectList() {List<User> users = userMapper.selectList(null);users.forEach(System.out::println);}
}
4. 核心功能详解
4.1 CRUD 操作自动化
4.1.1 自动生成基础 CRUD 方法
通过继承 BaseMapper
,您可以直接使用如下方法:
insert(T entity)
:插入记录deleteById(Serializable id)
:根据 ID 删除记录updateById(T entity)
:根据 ID 更新记录selectById(Serializable id)
:根据 ID 查询记录selectList(Wrappper<T> queryWrapper)
:查询列表
4.1.2 自定义 SQL 注解
如果需要更复杂的查询,可以使用 @Select
、@Update
、@Delete
和 @Insert
注解来自定义 SQL 语句。
package com.example.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.util.List;@Mapper
public interface UserMapper extends BaseMapper<User> {@Select("SELECT * FROM user WHERE age > #{age}")List<User> selectUsersByAge(int age);@Insert("INSERT INTO user(name, age, email) VALUES(#{name}, #{age}, #{email})")int insertUser(User user);@Update("UPDATE user SET age = #{age} WHERE id = #{id}")int updateUserAgeById(User user);@Delete("DELETE FROM user WHERE id = #{id}")int deleteUserById(Long id);
}
4.2 条件构造器 (Wrapper)
4.2.1 QueryWrapper 和 UpdateWrapper 使用
QueryWrapper
和 UpdateWrapper
提供了链式调用来构建查询和更新条件。
package com.example.demo