MyBatis Plus 高级用法详解
MyBatis Plus (MP) 是一款强大的 MyBatis 增强工具,它简化了 MyBatis 的开发流程,提供了丰富的功能,例如代码生成、CRUD 操作、分页查询、逻辑删除等。本文将深入探讨 MyBatis Plus 的高级用法,帮助你更好地掌握这个工具,提升开发效率。
一、代码生成器:快速构建基础代码
MP 的代码生成器可以根据数据库表结构自动生成 Entity、Mapper、Service、Controller 等代码,大大减少了重复劳动。高级用法包括自定义模板、自定义全局策略配置等。
-
自定义模板: MP 提供了默认的代码生成模板,但你可以根据项目需求进行自定义。例如,修改模板中的文件命名规则、添加自定义注释、调整代码格式等。你可以通过继承
AbstractTemplateEngine
类并重写相关方法来实现自定义模板。 -
自定义全局策略配置: 通过
GlobalConfig
对象可以配置代码生成的全局策略,例如作者信息、输出路径、是否覆盖已有文件等。
java
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("Your Name");
gc.setOpen(false); // 是否打开输出目录
// ... 其他配置
- 自定义包名策略:
PackageConfig
对象可以配置生成的代码的包名,例如 Entity、Mapper、Service、Controller 的包名。
java
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
pc.setModuleName("blog"); // 模块名
pc.setEntity("entity");
pc.setMapper("mapper");
// ... 其他配置
- 自定义注入策略:
InjectionConfig
对象可以自定义注入一些额外的配置,例如自定义模板路径、自定义文件输出路径等。
二、条件构造器:灵活构建查询条件
QueryWrapper
和 UpdateWrapper
是 MP 提供的条件构造器,可以方便地构建各种复杂的 SQL 查询条件。
- 链式调用:
QueryWrapper
支持链式调用,可以简洁地构建复杂的查询条件。
java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三")
.ge("age", 18)
.orderByDesc("create_time");
- 条件嵌套:
apply
方法可以嵌入 SQL 片段,实现更灵活的查询条件。
java
queryWrapper.apply("date_format(create_time,'%Y-%m-%d') = {0}", "2023-10-27");
- 自定义SQL:
last
方法可以直接拼接 SQL 语句。
java
queryWrapper.last("limit 1");
- 条件拼接:
or
和and
方法可以实现条件的逻辑拼接。
java
queryWrapper.likeLeft("name", "张").or().likeRight("name", "三");
- Lambda 表达式: 使用 Lambda 表达式可以避免硬编码字段名,提高代码可读性和可维护性。
java
queryWrapper.lambda().eq(User::getName, "张三");
三、分页插件:高效处理分页查询
MP 提供了分页插件,可以方便地进行分页查询。
-
配置分页插件: 需要在 MyBatis 配置文件中配置分页插件拦截器。
-
使用分页插件: 通过
IPage
对象进行分页查询。
java
Page<User> page = new Page<>(1, 10);
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
- 自定义分页SQL: 可以通过继承
PaginationInterceptor
并重写intercept
方法来自定义分页 SQL。
四、逻辑删除:优雅处理数据删除
MP 提供了逻辑删除功能,可以避免物理删除数据,方便数据恢复和审计。
- 配置逻辑删除字段: 在实体类中使用
@TableLogic
注解标记逻辑删除字段。
java
@TableLogic
private Integer deleted;
- 使用逻辑删除: MP 会自动将删除操作转换为更新操作,修改逻辑删除字段的值。
五、乐观锁:保障数据并发安全
MP 提供了乐观锁功能,可以防止数据并发修改带来的问题。
- 配置乐观锁字段: 在实体类中使用
@Version
注解标记乐观锁字段。
java
@Version
private Integer version;
- 使用乐观锁: MP 会在更新操作时自动校验乐观锁字段的值,如果版本不一致则更新失败。
六、自定义全局配置:灵活适配项目需求
MP 提供了 MybatisPlusConfig
类,可以进行全局配置,例如配置 SQL 注入器、逻辑删除值、乐观锁字段等。
七、性能分析插件:优化SQL执行效率
PerformanceInterceptor
插件可以打印 SQL 执行时间,帮助你分析和优化 SQL 性能。
八、Sql 注入器:扩展 SQL 操作
ISqlInjector
接口可以自定义 SQL 注入,例如批量插入、批量更新等。
九、ActiveRecord 模式:简化数据库操作
MP 支持 ActiveRecord 模式,可以直接在实体类上进行数据库操作,进一步简化代码。
十、代码示例:综合应用
“`java
// 查询年龄大于等于 18 岁的用户,并按创建时间倒序排序
LambdaQueryWrapper
queryWrapper.ge(User::getAge, 18)
.orderByDesc(User::getCreateTime);
Page
IPage
// 打印查询结果
System.out.println(“总记录数:” + userPage.getTotal());
System.out.println(“当前页数据:” + userPage.getRecords());
“`
通过以上介绍,相信你对 MyBatis Plus 的高级用法有了更深入的了解。熟练掌握这些高级用法,可以帮助你更好地利用 MP 的强大功能,提高开发效率,构建更优秀的应用程序。 记住,实践是检验真理的唯一标准,多动手练习才能真正掌握 MP 的精髓。 不断探索 MP 的更多高级特性,例如自定义拦截器、自定义类型处理器等,将进一步提升你的开发技能。