MyBatis Plus 是一个基于 MyBatis 的增强工具,旨在简化开发过程,提高开发效率。它提供了许多实用的功能,如代码生成器、分页插件、条件构造器等,使得开发者可以更专注于业务逻辑的实现,而不必过多关注 MyBatis 的配置和 SQL 编写。
MyBatis Plus 概述
1. 主要特性
- 无侵入:MyBatis Plus 在 MyBatis 的基础上进行扩展,不会对 MyBatis 的现有功能造成影响。
- 依赖少:仅依赖于 MyBatis 和 Spring,没有其他额外的依赖。
- 强大的 CRUD 操作:内置通用的 Mapper 和 Service,只需要简单的配置即可实现单表的 CRUD 操作。
- 支持 Lambda 表达式:通过 Lambda 表达式,方便地进行 SQL 操作。
- 支持主键自动生成:支持多种主键生成策略,如 UUID、自增 ID 等。
- 支持 ActiveRecord 模式:实体类只需继承 Model 类即可进行 CRUD 操作。
- 内置分页插件:基于 MyBatis 物理分页,开发者无需手动编写分页 SQL。
- 内置性能分析插件:可输出 SQL 语句及其执行时间,帮助开发者优化 SQL。
- 内置全局拦截插件:提供全局的 SQL 拦截功能,方便进行 SQL 改写和日志记录。
2. 核心组件
- BaseMapper:提供了通用的 CRUD 方法,如
insert
、delete
、update
、select
等。 - IService:提供了更丰富的服务层方法,如分页查询、批量操作等。
- Wrapper:条件构造器,用于构建复杂的查询条件。
- PaginationInnerInterceptor:分页插件,支持物理分页。
- AutoGenerator:代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口、Service 接口及其实现类。
入门程序介绍
下面我们将通过一个简单的入门程序来介绍如何使用 MyBatis Plus。
1. 环境准备
- JDK 1.8 或更高版本
- Maven 3.5 或更高版本
- MySQL 5.7 或更高版本
- Spring Boot 2.x
2. 创建 Spring Boot 项目
使用 Spring Initializr 创建一个新的 Spring Boot 项目,添加以下依赖:
- Spring Web
- Spring Data JPA
- MySQL Driver
- MyBatis Plus
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
</dependencies>
3. 配置数据库连接
在 application.properties
文件中配置数据库连接信息:
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus_demo?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=com.example.demo.entity
4. 创建实体类
创建一个简单的实体类 User
,并使用 MyBatis Plus 的注解:
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
// getters and setters
}
5. 创建 Mapper 接口
创建一个继承自 BaseMapper
的 Mapper 接口 UserMapper
:
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
public interface UserMapper extends BaseMapper<User> {
}
6. 配置 MyBatis Plus
在 Spring Boot 启动类上添加 @MapperScan
注解,扫描 Mapper 接口所在的包:
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")
public class MybatisPlusDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusDemoApplication.class, args);
}
}
7. 编写测试代码
编写一个简单的测试类,测试 MyBatis Plus 的 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 MybatisPlusDemoApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testInsert() {
User user = new User();
user.setName("John Doe");
user.setAge(30);
user.setEmail("john.doe@example.com");
userMapper.insert(user);
System.out.println("Inserted user with ID: " + user.getId());
}
@Test
public void testSelect() {
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
@Test
public void testUpdate() {
User user = userMapper.selectById(1L);
user.setAge(31);
userMapper.updateById(user);
System.out.println("Updated user: " + user);
}
@Test
public void testDelete() {
userMapper.deleteById(1L);
System.out.println("Deleted user with ID: 1");
}
}
总结
通过以上步骤,我们创建了一个简单的 Spring Boot 项目,并集成了 MyBatis Plus。MyBatis Plus 提供了许多实用的功能,简化了 MyBatis 的开发过程,使得开发者可以更专注于业务逻辑的实现。通过继承 BaseMapper
接口,我们可以轻松实现单表的 CRUD 操作,而无需手动编写 SQL 语句。此外,MyBatis Plus 还提供了分页插件、条件构造器等实用功能,进一步提高了开发效率。
MyBatis Plus 是一个功能强大且易于使用的 MyBatis 增强工具,适用于各种规模的 Java Web 项目。通过学习和使用 MyBatis Plus,开发者可以显著提高开发效率,减少重复代码,从而更快地交付高质量的软件产品。