MyBatis Plus 高级用法 – wiki基地

MyBatis Plus 高级用法详解

MyBatis Plus (MP) 是一款强大的 MyBatis 增强工具,它简化了 MyBatis 的开发流程,提供了丰富的功能,例如代码生成、CRUD 操作、分页查询、逻辑删除等。本文将深入探讨 MyBatis Plus 的高级用法,帮助你更好地掌握这个工具,提升开发效率。

一、代码生成器:快速构建基础代码

MP 的代码生成器可以根据数据库表结构自动生成 Entity、Mapper、Service、Controller 等代码,大大减少了重复劳动。高级用法包括自定义模板、自定义全局策略配置等。

  1. 自定义模板: MP 提供了默认的代码生成模板,但你可以根据项目需求进行自定义。例如,修改模板中的文件命名规则、添加自定义注释、调整代码格式等。你可以通过继承 AbstractTemplateEngine 类并重写相关方法来实现自定义模板。

  2. 自定义全局策略配置: 通过 GlobalConfig 对象可以配置代码生成的全局策略,例如作者信息、输出路径、是否覆盖已有文件等。

java
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("Your Name");
gc.setOpen(false); // 是否打开输出目录
// ... 其他配置

  1. 自定义包名策略: PackageConfig 对象可以配置生成的代码的包名,例如 Entity、Mapper、Service、Controller 的包名。

java
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
pc.setModuleName("blog"); // 模块名
pc.setEntity("entity");
pc.setMapper("mapper");
// ... 其他配置

  1. 自定义注入策略: InjectionConfig 对象可以自定义注入一些额外的配置,例如自定义模板路径、自定义文件输出路径等。

二、条件构造器:灵活构建查询条件

QueryWrapperUpdateWrapper 是 MP 提供的条件构造器,可以方便地构建各种复杂的 SQL 查询条件。

  1. 链式调用: QueryWrapper 支持链式调用,可以简洁地构建复杂的查询条件。

java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三")
.ge("age", 18)
.orderByDesc("create_time");

  1. 条件嵌套: apply 方法可以嵌入 SQL 片段,实现更灵活的查询条件。

java
queryWrapper.apply("date_format(create_time,'%Y-%m-%d') = {0}", "2023-10-27");

  1. 自定义SQL: last 方法可以直接拼接 SQL 语句。

java
queryWrapper.last("limit 1");

  1. 条件拼接: orand 方法可以实现条件的逻辑拼接。

java
queryWrapper.likeLeft("name", "张").or().likeRight("name", "三");

  1. Lambda 表达式: 使用 Lambda 表达式可以避免硬编码字段名,提高代码可读性和可维护性。

java
queryWrapper.lambda().eq(User::getName, "张三");

三、分页插件:高效处理分页查询

MP 提供了分页插件,可以方便地进行分页查询。

  1. 配置分页插件: 需要在 MyBatis 配置文件中配置分页插件拦截器。

  2. 使用分页插件: 通过 IPage 对象进行分页查询。

java
Page<User> page = new Page<>(1, 10);
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);

  1. 自定义分页SQL: 可以通过继承 PaginationInterceptor 并重写 intercept 方法来自定义分页 SQL。

四、逻辑删除:优雅处理数据删除

MP 提供了逻辑删除功能,可以避免物理删除数据,方便数据恢复和审计。

  1. 配置逻辑删除字段: 在实体类中使用 @TableLogic 注解标记逻辑删除字段。

java
@TableLogic
private Integer deleted;

  1. 使用逻辑删除: MP 会自动将删除操作转换为更新操作,修改逻辑删除字段的值。

五、乐观锁:保障数据并发安全

MP 提供了乐观锁功能,可以防止数据并发修改带来的问题。

  1. 配置乐观锁字段: 在实体类中使用 @Version 注解标记乐观锁字段。

java
@Version
private Integer version;

  1. 使用乐观锁: MP 会在更新操作时自动校验乐观锁字段的值,如果版本不一致则更新失败。

六、自定义全局配置:灵活适配项目需求

MP 提供了 MybatisPlusConfig 类,可以进行全局配置,例如配置 SQL 注入器、逻辑删除值、乐观锁字段等。

七、性能分析插件:优化SQL执行效率

PerformanceInterceptor 插件可以打印 SQL 执行时间,帮助你分析和优化 SQL 性能。

八、Sql 注入器:扩展 SQL 操作

ISqlInjector 接口可以自定义 SQL 注入,例如批量插入、批量更新等。

九、ActiveRecord 模式:简化数据库操作

MP 支持 ActiveRecord 模式,可以直接在实体类上进行数据库操作,进一步简化代码。

十、代码示例:综合应用

“`java
// 查询年龄大于等于 18 岁的用户,并按创建时间倒序排序
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(User::getAge, 18)
.orderByDesc(User::getCreateTime);

Page page = new Page<>(1, 10);
IPage userPage = userService.page(page, queryWrapper);

// 打印查询结果
System.out.println(“总记录数:” + userPage.getTotal());
System.out.println(“当前页数据:” + userPage.getRecords());
“`

通过以上介绍,相信你对 MyBatis Plus 的高级用法有了更深入的了解。熟练掌握这些高级用法,可以帮助你更好地利用 MP 的强大功能,提高开发效率,构建更优秀的应用程序。 记住,实践是检验真理的唯一标准,多动手练习才能真正掌握 MP 的精髓。 不断探索 MP 的更多高级特性,例如自定义拦截器、自定义类型处理器等,将进一步提升你的开发技能。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部