MyBatis-Plus 入门
MyBatis-Plus 是一个在 MyBatis 基础上构建的增强工具,旨在简化 MyBatis 的开发过程。它提供了许多开箱即用的功能,如 CRUD 操作、条件构造器和代码生成器,极大地提高了开发效率。本文将介绍 MyBatis-Plus 的核心特性、安装与配置、使用示例及其高级功能,帮助你更好地掌握和利用这一强大的工具。
MyBatis-Plus 简介
MyBatis-Plus 是一个 MyBatis 的增强工具,能够简化开发工作,减少重复代码。它通过封装常见的数据库操作,提供了更简单的 API,支持灵活的查询构造,帮助开发者更高效地进行数据持久化操作。
MyBatis-Plus 的核心特性
- 简化 CRUD 操作:提供了丰富的基础 CRUD 操作方法,减少了手动编写重复代码的需求。
- 条件构造器:支持灵活的条件构造器,可以轻松地进行复杂的查询操作。
- 代码生成器:通过代码生成器自动生成实体类、Mapper 接口和 XML 映射文件,提高开发效率。
- 乐观锁:内置乐观锁功能,支持并发控制。
- 自动分页:支持分页查询,提供了简单易用的分页插件。
- 自定义 SQL:支持自定义 SQL 语句和动态 SQL,满足复杂的业务需求。
MyBatis-Plus 的安装与配置
在 Maven 项目中引入 MyBatis-Plus 依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
在 Spring Boot 项目中,通常需要配置数据源和 MyBatis-Plus。可以在 application.yml
文件中进行配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydatabase
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
global-config:
db-config:
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
基本使用示例
创建实体类
定义一个实体类 User
:
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
}
创建 Mapper 接口
定义一个 Mapper 接口 UserMapper
:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
使用 Service
创建一个 Service 类 UserService
,并使用 MyBatis-Plus 提供的服务方法:
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
执行 CRUD 操作
使用 UserService
进行 CRUD 操作:
@Autowired
private UserService userService;
// 插入
User user = new User();
user.setName("Alice");
user.setAge(25);
userService.save(user);
// 查询
User user = userService.getById(1L);
List<User> userList = userService.list();
// 更新
user.setAge(26);
userService.updateById(user);
// 删除
userService.removeById(1L);
高级功能
条件构造器
MyBatis-Plus 提供了强大的条件构造器 QueryWrapper
,可以用于构建复杂的查询条件:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", "active")
.lt("age", 30)
.orderByDesc("age");
List<User> users = userService.list(queryWrapper);
分页查询
MyBatis-Plus 提供了内置分页插件,可以轻松实现分页查询:
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
Page<User> page = new Page<>(1, 10); // 页码和每页条数
Page<User> userPage = userService.page(page);
List<User> users = userPage.getRecords();
代码生成器
使用 MyBatis-Plus 代码生成器可以自动生成实体类、Mapper 接口和 XML 文件:
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir("src/main/java");
globalConfig.setAuthor("yourname");
globalConfig.setOpen(false);
generator.setGlobalConfig(globalConfig);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
generator.setDataSource(dataSourceConfig);
// 包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example");
packageConfig.setEntity("entity");
packageConfig.setMapper("mapper");
packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");
packageConfig.setController("controller");
generator.setPackageInfo(packageConfig);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
strategyConfig.setEntityLombokModel(true);
generator.setStrategy(strategyConfig);
// 执行生成
generator.execute();
}
}
总结
MyBatis-Plus 作为 MyBatis 的增强工具,提供了丰富的功能和简洁的 API,显著提高了开发效率。通过简化 CRUD 操作、提供灵活的查询构造器和强大的代码生成器,MyBatis-Plus 成为现代 Java 开发中的重要工具。希望这篇文章能帮助你快速上手 MyBatis-Plus,并充分利用其强大的功能。如果你有任何问题或建议,欢迎留言讨论。