MyBatis-Plus

mybatis-plus 用法 看了我的 mybatis-plus 用法,全公司同事开始悄悄模仿了 阅读详情

基础概念

MyBatis-Plus 使用教程、特性与介绍

MyBatis-Plus(简称 MP)是 MyBatis 的增强工具库,在保留 MyBatis 原生功能的基础上,提供了更简洁高效的 CRUD 操作、代码生成、条件构造器等特性,大幅减少 SQL 编写量。以下是核心内容:

一、核心特性
  1. 无侵入设计
    仅扩展 MyBatis 功能,不改变原生结构,兼容所有 MyBatis 配置。

  2. 强大的 CRUD 封装

    • 通过继承 BaseMapper<T> 接口,自动实现单表增删改查,无需手动写 SQL。
      public interface UserMapper extends BaseMapper<User> { }  // 自动获得 17 个基础方法
      
    • 内置通用 Service 层封装(IService + ServiceImpl):
      public interface UserService extends IService<User> { }
      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> 
                                  implements UserService { }
      
  3. 智能条件构造器
    使用 QueryWrapper 或 LambdaQueryWrapper 动态构建 SQL 条件:

    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.like("name", "Tom").lt("age", 30);  // WHERE name LIKE '%Tom%' AND age < 30
    List<User> users = userMapper.selectList(wrapper);
    
  4. 主键策略支持
    支持自增、UUID、雪花算法等分布式 ID 生成(通过 @TableId 注解配置)。

  5. 插件扩展

    • 分页插件:无需手动处理分页逻辑。
    • 性能分析插件:输出 SQL 执行时间,优化慢查询。
    • 乐观锁插件:通过 @Version 注解实现并发控制。
二、快速使用教程(Spring Boot)
  1. 添加依赖

    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.5.0</version>
    </dependency>
    
  2. 配置数据源与 MP(application.yml)

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/db
        username: root
        password: 123456
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志
    
  3. 实体类注解

    @Data
    @TableName("sys_user")  // 指定表名
    public class User {
      @TableId(type = IdType.AUTO) // 自增主键
      private Long id;
      private String name;
      private Integer age;
      @TableField("user_email") // 映射字段名
      private String email;
    }
    
  4. 基础 CRUD 示例

    // 插入
    User user = new User();
    user.setName("John");
    userMapper.insert(user); // SQL自动生成
    
    // 批量插入(Service层)
    List<User> userList = ...;
    userService.saveBatch(userList); 
    
    // 查询记录数
    long count = userService.count(); 
    
    // 条件查询
    LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(User::getName, "John");
    List<User> users = userService.list(wrapper);
    
三、进阶功能
  1. 代码生成器
    自动生成 Entity、Mapper、Service、Controller 代码:

    AutoGenerator generator = new AutoGenerator();
    generator.setGlobalConfig(...); // 配置包路径、作者等
    generator.setDataSource(...);  // 数据库配置
    generator.setStrategy(...);    // 生成策略
    generator.execute(); // 执行生成
    
  2. 逻辑删除
    添加注解实现软删除:

    @TableField("is_deleted")
    @TableLogic // 逻辑删除字段
    private Integer deleted;
    

    执行 deleteById(id) 实际触发 UPDATE 操作。

  3. 字段自动填充
    配合 @TableField(fill = FieldFill.INSERT) 自动填充创建时间/更新时间。

四、适用场景
  1. 快速开发后台管理系统(如权限管理、数据报表)。
  2. 需要减少重复 SQL 编写的单表操作场景。
  3. 微服务架构中基础数据模块开发。
  4. 需要动态条件查询但不想用 JPA 的项目。

提示:复杂多表关联查询仍建议使用 MyBatis 原生 XML 编写 SQL。

思维导图

在这里插入图片描述


进阶内容

MyBatis-Plus 核心功能详解

一、多表联合查询实现方法

MyBatis-Plus 主要专注于单表操作,多表查询需结合原生 MyBatis 实现:

  1. XML 映射文件实现
<select id="selectUserWithOrders" resultMap="userOrderMap">
  SELECT u.*, o.order_id, o.order_amount 
  FROM user u 
  LEFT JOIN orders o ON u.id = o.user_id
  WHERE u.id = #{userId}
</select>
  1. 注解方式实现
@Select("SELECT u.name, o.order_no FROM user u INNER JOIN orders o ON u.id = o.user_id")
@Results({
  @Result(property = "name", column = "name"),
  @Result(property = "orders", column = "order_no")
})
List<UserOrderDTO> selectUserOrders();

注意:对比 MyBatis-Flex/Fluent-MyBatis 的联表支持(引用[1]),MP 在多表查询方面较弱,复杂场景建议结合原生 MyBatis


二、分页功能配置与使用
  1. 配置分页插件
@Configuration
public class MybatisPlusConfig {
  @Bean
  public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    return interceptor;
  }
}
  1. 分页查询实践
// 构造分页参数(当前页, 每页数量)
Page<User> page = new Page<>(1, 10); 

// 单表分页
Page<User> userPage = userMapper.selectPage(page, null);

// 自定义SQL分页
Page<UserOrderDTO> resultPage = userMapper.selectUserOrders(page, params);
List<UserOrderDTO> records = resultPage.getRecords(); // 当前页数据
long total = resultPage.getTotal(); // 总记录数

分页总量缓存设计可优化性能(引用[1])


三、数据库字段加密存储

通过 @TableField 注解和自定义 TypeHandler 实现:

  1. 实体类配置
public class User {
  @TableField(typeHandler = AESEncryptHandler.class)
  private String mobile; // 手机号加密存储
}
  1. 自定义加密处理器
public class AESEncryptHandler extends BaseTypeHandler<String> {
  @Override
  public void setNonNullParameter(...) {
    // 加密逻辑
    String encrypted = AESUtil.encrypt(parameter);
    ps.setString(i, encrypted);
  }
  
  @Override
  public String getNullableResult(ResultSet rs, String columnName) {
    // 解密逻辑
    return AESUtil.decrypt(rs.getString(columnName));
  }
}

支持在数据存储层自动加解密(引用[3])


四、乐观锁机制

通过 @Version 注解实现并发控制:

  1. 实体类配置
public class Product {
  @Version
  private Integer version; // 乐观锁字段
}
  1. 更新操作流程
-- 更新时自动附加版本条件
UPDATE product SET stock=10, version=version+1 
WHERE id=100 AND version=2
  1. 更新冲突处理
Product product = productMapper.selectById(100);
product.setStock(product.getStock() - 1);

int attempts = 0;
while (attempts++ < 3) {
  try {
    productMapper.updateById(product);
    break; // 更新成功
  } catch (OptimisticLockingFailureException ex) {
    // 重试:重新查询最新数据
    product = productMapper.selectById(100);
  }
}

五、MyBatis-Plus 与 MyBatis 核心区别
特性MyBatisMyBatis-Plus
CRUD 操作需手动编写SQL自动生成基础SQL(BaseMapper)
条件构造器无QueryWrapper/LambdaQueryWrapper
分页支持需手动实现内置分页插件
代码生成需第三方工具内置代码生成器
性能分析需手动配置内置性能分析插件
多表联查完整支持需结合原生MyBatis实现
依赖复杂度轻量依赖更多(如注解处理)
学习曲线较陡峭更平缓(开箱即用)

核心定位:MP 是 MyBatis 的增强工具而非替代品,解决重复 CRUD 编码问题(引用[2])

思维导图

在这里插入图片描述

mybatis 和 mybatis-plus 配置文件: 用于配置数据库连接和 MyBatis 运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性、映射文件的位置。mapper接口和mapper.xml之间需要遵循一定规则,才能成功的让mybatis将mapper接口和mapper.xml绑定起来。创建IUserMapper接口: 用于操作数据库CURD的方法。文件:用于mybatis配置文件读取数据库信息。resources 目录下 创建。resources 目录下 创建。resources 目录下 的。类:用于跟数据库字段做映射。 阅读详情

相关推荐

告别手动操作!用Python脚本批量处理Siemens NX零件文件(导入/导出/移除参数)

本文详细介绍了如何利用Python脚本实现Siemens NX零件文件的批量处理,包括导入、导出和移除参数等操作。通过NX Open API和Python UF接口,工业设计师可以大幅提升工作效率,告别繁琐的手动操作。文章提供了完整的实战指南,涵盖环境配置、核心功能实现以及性能优化技巧,特别适合需要进行Siemens-NXUG二次开发的工程师参考。

weixin_28222493的博客 261

Mybatisplus-插件使用

mybatis的插件使用(建议这些共用的字段放到BaseBean.java)

qq_33879443的博客 3927

深入理解EtherCAT状态机:从IGH代码看伺服电机如何从‘上电’到‘使能’

本文深入解析EtherCAT状态机的工作原理,重点探讨伺服电机从'上电'到'使能'的状态转换过程。通过分析状态字(Status Word)和控制字(Control Word)的交互机制,结合IGH代码实例,揭示DS402状态机的核心逻辑,帮助工程师解决60%以上的伺服控制问题,提升EtherCAT网络调试效率。

weixin_42549037的博客 289

MybatisPlus插件使用

*** 根据区域查询服务列表* @return*/> <!

weixin_45690338的博客 1122

逍遥模拟器改真机参数全指南:从ARM伪装到电池传感器模拟

本文提供逍遥模拟器深度伪装实战指南,重点讲解如何通过修改ARM架构、系统属性和模拟传感器数据,使其在硬件信息、电池状态等维度逼近真实设备,有效规避应用检测。文章详细介绍了使用Magisk模块、LSPosed框架进行设备指纹伪装和动态数据模拟的策略,帮助用户实现从静态信息到动态行为的全方位真机模拟。

weixin_29279101的博客 452

ComfyUI面部修复FaceDetailer保姆级教程:从模型选择到参数调优全解析

本文提供ComfyUI面部修复FaceDetailer的保姆级教程,深度解析从模型选择到参数调优的全过程。针对常见的五官模糊、肤色不均等问题,详细对比了BBox与Segm检测器的优劣,并给出SD1.5与SDXL模型的核心参数联动策略与实战方案,帮助用户精准掌控AI绘画中的面部修复效果。

weixin_29073241的博客 472

Mybatis-Plus使用详解

(1)简介上面介绍的 接口方法的参数中,会出现各种 wrapper,比如 queryWrapper、updateWrapper 等。wrapper 的作用就是用于定义各种各样的查询条件(where)。Wrapper 条件构造抽象类-- AbstractWrapper 查询条件封装,用于生成 sql 中的 where 语句。-- QueryWrapper Entity 对象封装操作类,用于查询。-- UpdateWrapper Update 条件封装操作类,用于更新。

weixin_54673484的博客 2378

Selenium自动化测试遇到shadow-root元素?3种实用解决方案帮你搞定

本文针对Selenium自动化测试中遇到shadow-root元素难以定位的常见问题,提供了三种实用的解决方案。详细阐述了通过JavaScript直接穿透Shadow DOM、利用浏览器工具快速获取JS Path以及使用Python第三方库进行优雅封装的方法,并分享了提升脚本健壮性的实战策略与最佳实践,帮助测试人员有效应对现代Web组件化开发带来的挑战。

code8的博客 408

MyBatis-Plus 使用指南

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具包,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了许多便捷的功能,如代码生成器、分页插件、性能分析插件等。本文将通过实例详细介绍如何在项目中集成和使用 MyBatis-Plus。通过本文的介绍,相信您已经掌握了如何在项目中集成和使用 MyBatis-Plus。MyBatis-Plus 不仅简化了开发过程,还提供了丰富的功能来提升开发效率。希望这篇文章对您有所帮助。

codeMonkey_gxy的博客 1074

yocto系列讲解[实战篇]54 - 添加Qt5和生成带Qt5的SDK

为了满足读者盆友想看yocto如何添加qt5的需求,今天就开始尝试添加meta-qt5

fulinux的博客 3871

【Docker】一招解决超时镜像超时报错:`ERROR: Get https://registry-1.docker.io/v2/`

Docker 镜像拉取超时或失败并不是 Docker 本身的缺陷,而是网络环境和默认配置在特定场景下的限制所导致的结果。通过本文的分析可以看到,问题的核心往往集中在三个方面:网络访问延迟、DNS 解析速度以及客户端默认超时时间。针对这些问题,最直接、有效的做法是使用国内镜像加速器,这不仅能够显著提升拉取速度,还能保证在企业内网或家庭网络中更加稳定

博客 1027

MyBatis Plus 如何实现连表查询 mybatis plus join

MyBatis-Plus 连表插件 mybati-plus-join, 完全按照mybats plus API风格扩展,支持一对一返回映射,多对多返回映射,自定义返回ResultType,引入后不会对原有的业务产生影响, 只拓展不修改

qq_31116181的博客 6万+

运维颠覆!一文解锁AI赋能运维实战秘籍,效率飙升!

将AI应用于运维工作是一场极具价值的变革,从故障预测与诊断到自动化任务执行,再到资源管理优化,AI都展现出巨大潜力。尽管在实践过程中会面临数据质量、模型复杂性等挑战,但通过合理的技术选型和解决方案,我们能够充分挖掘AI的优势,实现运维工作的高效、智能转型。持续探索和创新AI在运维领域的应用,将为企业的数字化发展提供坚实保障。在科技飞速发展的当下,运维领域正经历着深刻变革,AI的融入成为提升运维效率与质量的关键。本文将深入实战,带你领略AI如何在运维各环节大显身手,让你的运维工作开启智能高效新模式。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 401

mybatis plus

mybatis的缺点: 1.mybatis sql工作量很大,尤其是字段多的时候。虽然说单表的增删改查操作可以通过mybatis generator工具来生成(或者自己写模板工具生成),但项目开发的过程中总免不了要新添加新字段,这些工具就帮不了我了,我得把新字段写到原来的所有增删改查的sql中。这是个痛苦的过程,特别是当你重复了很多次之后。 2.mybatis的单表操作也是贼麻烦的事,因为筛选的...

java开发郭靖 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

简述MyBatis、MyBatis-Plus、以及MyBatis-Plus的简单运用

是一个基于MyBatis的轻量级、强大且功能丰富的持久层框架,它进一步简化了与关系型数据库的交互。它是在MyBatis的基础上进行扩展和增强的工具集,提供了更多便捷的开发功能和增强的查询能力。MyBatis-Plus提供了一系列的增删改查操作的封装方法,使得开发人员可以通过简单的API调用完成常见的数据库操作,无需编写繁琐的SQL语句。它还提供了诸如分页查询、条件构造器、Lambda表达式查询等高级查询功能,极大地简化了复杂查询的编写过程。

5062

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

关于mybatis-plus 和 mybatis-plus-boot-starter 异同点分析

在采用mybatis-plus做代码生成器时,我前面的文章https://blog.youkuaiyun.com/u012329294/article/details/90473681讲过,必须把其他的mybatis-plus删掉,只留下mybatis-plus-boot-starter。 但用mybatis-plus-boot-starter生成的代码,放在mybatis-plus依赖环境中, &l...

u012329294的专栏 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MyBatis 与 MyBatis-Plus

MyBatis: 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis-Plus: 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis: 适用于对 SQL 有较高要求的复杂项目,需要更多的自定义和灵活性。MyBatis-Plus: 适用于快速开发中小型项目,特别是对开发效率有较高要求的场景。

qq_54802811的博客 1214

Mybatis & Mybatis Plus

为了防止sql语句只写在业务处理层,所以有了自定义SQL,我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自定义SQL语句中剩下的部分。

2301_81230656的博客 1146

mybatis升级mybatis-plus

application.yml server: port: 8080 servlet: spring: thymeleaf: prefix: classpath:/templates/ cache: false datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mys...

虫二 7586

Mybatis与Mybatis-plus的比较

MyBatis 和 MyBatis-Plus 都是流行的 Java ORM 框架,它们在处理数据库操作时各有优势和特点。总的来说,MyBatis-Plus 在开发效率和某些性能优化方面可能优于 MyBatis,但 MyBatis 在灵活性和定制化方面仍然具有优势。开发者应根据项目的具体需求和团队的技术栈来选择合适的框架。

qq_56438516的博客 2730

【mybatis 和 mybatis-plus 的解释】

通过学习 MyBatis 和 MyBatis-Plus,你将能够高效地进行数据库操作,并且能根据需求选择使用 MyBatis 或 MyBatis-Plus。MyBatis:更适合于复杂的 SQL 查询和对 SQL 的完全控制,适合需要高度定制化的场景。:提供了大量自动化的功能,可以快速开发,减少样板代码,适合常见的 CRUD 操作。

qq_45973421的博客 932

MyBatis和MyBatis-Plus

MyBatis-Plus不是要替代MyBatis,而是在MyBatis基础上的增强,提供了更多开箱即用的功能,让开发者能够更专注于业务逻辑而不是重复的基础编码工作。对于大多数新项目,特别是追求开发效率的团队,MyBatis-Plus是更好的选择。它保留了MyBatis的所有灵活性,同时大幅提升了开发效率。MyBatis-Plus提供了多种灵活的方式来处理非规范命名的数据库表。java// 自定义表名处理器@Component@Override// 根据业务逻辑动态返回表名。

BillKu的博客 1265

MyBatis 和 MyBatis-Plus 的区别

和是 Java 中常用的持久层框架,用于简化与数据库的交互。它们的主要区别在于是对的增强,提供了更多的功能以减少手动写 SQL 和代码量。

weixin_44719499的博客 1972

Mybatis与Mybatis-Plus实现及区别详解

本文将详细介绍Mybatis和Mybatis-Plus的实现原理以及它们之间的区别。通过文字和图片并茂的方式,帮助读者更好地理解这两种持久层框架。 Mybatis和Mybatis-Plus都是基于MyBatis的持久层框架,用于简化数据库操作。Mybatis是一个底层的持久层框架,它支持定制化SQL、存储过程以及高级映射。而Mybatis-Plus则是在Mybatis的基础上进行增强的工具,提供了一套通用的CRUD操作接口,省去了每次都要手写sql语句的麻烦。

a_20220306283ljc的博客 2626

mybatis vs mybatis-plus

​。

dzhou1991的博客 1111
上一篇: MyBatis
下一篇: Hibernate
HuiSoul200
博客等级 码龄8年 274粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值