MyBatis Plus 是一个基于 MyBatis 的增强工具,旨在简化开发过程,提高开发效率。它提供了许多实用的功能,如代码生成器、分页插件、条件构造器等,使得开发者可以更专注于业务逻辑的实现,而不必过多关注 MyBatis 的配置和 SQL 编写。
MyBatis Plus 的约定
MyBatis Plus 遵循一些约定,这些约定使得开发更加简单和高效。以下是 MyBatis Plus 的一些主要约定:
1. 默认的表名和字段名映射
MyBatis Plus 默认情况下会根据实体类的类名和字段名自动映射到数据库表名和字段名。具体规则如下:
- 表名:默认情况下,表名是实体类名的下划线命名形式。例如,实体类名为
UserInfo
,则默认表名为user_info
。 - 字段名:默认情况下,字段名是实体类字段名的下划线命名形式。例如,实体类字段名为
userName
,则默认字段名为user_name
。
public class UserInfo {
private Long id;
private String userName;
private Integer age;
private String email;
}
对应的表结构:
CREATE TABLE user_info (
id BIGINT PRIMARY KEY,
user_name VARCHAR(50),
age INT,
email VARCHAR(100)
);
2. 主键生成策略
MyBatis Plus 提供了多种主键生成策略,默认情况下使用数据库的自增主键。具体策略如下:
- IdType.AUTO:数据库自增主键。
- IdType.INPUT:手动输入主键。
- IdType.ASSIGN_ID:使用雪花算法生成全局唯一 ID。
- IdType.ASSIGN_UUID:使用 UUID 生成全局唯一 ID。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
public class UserInfo {
@TableId(type = IdType.AUTO)
private Long id;
// 其他字段
}
3. 逻辑删除
MyBatis Plus 支持逻辑删除,即通过一个字段标记记录是否被删除,而不是物理删除记录。默认情况下,逻辑删除字段名为 deleted
,类型为 Integer
,值为 0
表示未删除,值为 1
表示已删除。
import com.baomidou.mybatisplus.annotation.TableLogic;
public class UserInfo {
@TableLogic
private Integer deleted;
// 其他字段
}
4. 乐观锁
MyBatis Plus 支持乐观锁,通过一个版本号字段实现。默认情况下,乐观锁字段名为 version
,类型为 Integer
。
import com.baomidou.mybatisplus.annotation.Version;
public class UserInfo {
@Version
private Integer version;
// 其他字段
}
5. 分页插件
MyBatis Plus 内置了分页插件,可以方便地进行分页查询。默认情况下,分页插件会自动处理分页逻辑,开发者只需调用相应的分页方法即可。
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public class UserService {
private UserMapper userMapper;
public Page<UserInfo> getUserPage(int current, int size) {
Page<UserInfo> page = new Page<>(current, size);
QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
return userMapper.selectPage(page, queryWrapper);
}
}
6. 条件构造器
MyBatis Plus 提供了强大的条件构造器 QueryWrapper
和 UpdateWrapper
,可以方便地构建复杂的查询和更新条件。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public class UserService {
private UserMapper userMapper;
public List<UserInfo> getUsersByAge(int age) {
QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", age);
return userMapper.selectList(queryWrapper);
}
}
7. 代码生成器
MyBatis Plus 提供了代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口、Service 接口及其实现类。
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(System.getProperty("user.dir") + "/src/main/java");
globalConfig.setAuthor("author");
globalConfig.setOpen(false);
generator.setGlobalConfig(globalConfig);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus_demo?useSSL=false&serverTimezone=UTC");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
generator.setDataSource(dataSourceConfig);
// 包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setModuleName("user");
packageConfig.setParent("com.example.demo");
generator.setPackageInfo(packageConfig);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
strategyConfig.setEntityLombokModel(true);
strategyConfig.setRestControllerStyle(true);
generator.setStrategy(strategyConfig);
generator.execute();
}
}
总结
MyBatis Plus 通过一系列的约定简化了开发过程,使得开发者可以更高效地进行数据库操作。这些约定包括默认的表名和字段名映射、主键生成策略、逻辑删除、乐观锁、分页插件、条件构造器和代码生成器。通过遵循这些约定,开发者可以显著提高开发效率,减少重复代码,从而更快地交付高质量的软件产品。
MyBatis Plus 是一个功能强大且易于使用的 MyBatis 增强工具,适用于各种规模的 Java Web 项目。通过学习和使用 MyBatis Plus,开发者可以更专注于业务逻辑的实现,而不必过多关注 MyBatis 的配置和 SQL 编写。