勇往向前冲击 發表於 2026-3-28 19:35:00

MyBatis-Plus实战:从入门到精通的10个技巧

<h2>前言</h2>
<p>MyBatis-Plus是MyBatis的增强工具,在MyBatis基础上只做增强不做改变,简化CRUD操作。本文总结10个实用技巧,帮你快速掌握MP的核心用法。</p>
<h2>技巧1:快速入门</h2>
<pre><code>// 依赖
&lt;dependency&gt;
    &lt;groupId&gt;com.baomidou&lt;/groupId&gt;
    &lt;artifactId&gt;mybatis-plus-boot-starter&lt;/artifactId&gt;
    &lt;version&gt;3.5.5&lt;/version&gt;
&lt;/dependency&gt;

// 实体类
@TableName("t_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

// Mapper接口
public interface UserMapper extends BaseMapper&lt;User&gt; {
}

// 直接使用CRUD
userMapper.insert(user);
userMapper.selectById(1L);
userMapper.updateById(user);
userMapper.deleteById(1L);</code></pre>
<h2>技巧2:条件构造器QueryWrapper</h2>
<pre><code>QueryWrapper&lt;User&gt; wrapper = new QueryWrapper&lt;&gt;();
wrapper.eq("name", "张三")
       .ge("age", 18)
       .orderByDesc("create_time");
List&lt;User&gt; users = userMapper.selectList(wrapper);</code></pre>
<h2>技巧3:Lambda条件构造器</h2>
<pre><code>// 推荐使用LambdaWrapper,避免字段名写错
LambdaQueryWrapper&lt;User&gt; wrapper = new LambdaQueryWrapper&lt;&gt;();
wrapper.eq(User::getName, "张三")
       .ge(User::getAge, 18)
       .likeRight(User::getEmail, "test");</code></pre>
<h2>技巧4:分页查询</h2>
<pre><code>// 配置分页插件
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
      return interceptor;
    }
}

// 分页查询
Page&lt;User&gt; page = new Page&lt;&gt;(1, 10); // 第1页,每页10条
LambdaQueryWrapper&lt;User&gt; wrapper = new LambdaQueryWrapper&lt;&gt;()
    .eq(User::getStatus, 1);
Page&lt;User&gt; result = userMapper.selectPage(page, wrapper);

// 获取结果
List&lt;User&gt; records = result.getRecords();
long total = result.getTotal();</code></pre>
<h2>技巧5:自动填充</h2>
<pre><code>// 实体类字段
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

// 自动填充处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
      this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
      this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
   
    @Override
    public void updateFill(MetaObject metaObject) {
      this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}</code></pre>
<h2>技巧6:逻辑删除</h2>
<pre><code>// 配置
mybatis-plus:
global-config:
    db-config:
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0

// 实体类
@TableLogic
private Integer deleted;</code></pre>
<h2>技巧7:枚举类型处理</h2>
<pre><code>public enum UserStatus {
    NORMAL(0, "正常"),
    LOCKED(1, "锁定");
   
    @EnumValue
    private final int code;
    private final String desc;
}</code></pre>
<h2>技巧8:多租户插件</h2>
<pre><code>@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
      @Override
      public Expression getTenantId() {
            return new LongValue(1); // 当前租户ID
      }
    }));
    return interceptor;
}</code></pre>
<h2>技巧9:代码生成器</h2>
<pre><code>AutoGenerator generator = new AutoGenerator();
generator.setGlobalConfig(globalConfig);
generator.setDataSource(dataSourceConfig);
generator.setPackageInfo(packageConfig);
generator.setStrategy(strategyConfig);
generator.execute();</code></pre>
<h2>技巧10:性能分析插件</h2>
<pre><code>// 开发环境开启SQL性能分析
@Bean
public PerformanceInterceptor performanceInterceptor() {
    PerformanceInterceptor interceptor = new PerformanceInterceptor();
    interceptor.setMaxTime(1000); // SQL最大执行时间
    interceptor.setFormat(true);// 格式化SQL
    return interceptor;
}</code></pre>
<h2>总结</h2>
<p>MyBatis-Plus大大简化了MyBatis的开发工作,掌握这10个技巧可以应对大部分日常开发场景。核心是灵活使用条件构造器和各种插件。</p>
<p><em>本文由AI辅助创作。</em></p>

</div>
<div id="MySignature" role="contentinfo">
   

---

📌 **如果觉得文章对你有帮助,欢迎点赞👍收藏⭐!**

💬 有问题或建议?欢迎在评论区留言讨论~

🔗 更多技术干货请关注作者:弥烟袅绕

📚 本文地址:https://www.cnblogs.com/czlws/p/19788432<br><br>
来源:https://www.cnblogs.com/czlws/p/19788432
頁: [1]
查看完整版本: MyBatis-Plus实战:从入门到精通的10个技巧