MyBatis-Plus介绍及基本使用

概述

介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

主页: 传送门

引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题。

特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
  • 内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击

MyBatis-Plus 常用配置

MyBatis-Plus 的配置可以通过 application.propertiesapplication.yml 文件进行。以下是一些常用的配置选项及其说明。

mybatis-plus:
  # 指定MyBatis-Plus映射文件的位置
  mapper-locations: classpath:mapper/*.xml
  # 指定MyBatis-Plus映射文件的位置。递归查找所有子目录中符合.xml格式的文件
  #mapper-locations: "classpath*:/mapper/**/*.xml"
  # 指定实体类的包路径,自动扫描并注册别名
  type-aliases-package: com.example.yourproject.entity
  # 全局配置。用于设置MyBatis-Plus的一些整体行为
  global-config:
    db-config:
      # 主键生成策略。默认auto。可选值有auto(自动增长)、none(无)、input(手动输入)、id_worker(雪花算法)、uuid等
      id-type: auto
      # 表前缀,用于生成 SQL 时自动去掉前缀
      table-prefix: t_
      # 配置逻辑删除字段(如果使用了逻辑删除功能)
      logic-delete-field: deleted
      # 逻辑删除字段的值,表示已删除
      logic-delete-value: 1
      # 逻辑删除字段的值,表示未删除
      logic-not-delete-value: 0
      # 字段策略,可选值有 not_null(非空插入)、not_empty(非空插入)、ignore(忽略)等
      field-strategy: not_empty
      # 是否开启大写模式,生成的 SQL 字段名将全部大写
      capital-mode: true
      # 是否刷新缓存,默认为 true
      refresh: true
  # 分页配置。用于启用分页功能
  pagination:
    # 每页大小。默认10
    page-size: 10
    # 是否统计总记录数。默认true
    total: true
    # 是否合理化分页,当分页参数不合理时,自动调整。默认false
    reasonable: true
    # 是否支持方法参数作为分页参数。默认false
    support-methods-arguments: true
    # 分页参数名,可以自定义
    params: null
  # 配置。用于
  configuration:
    # 开启下划线转驼峰命名规则。默认true
    map-underscore-to-camel-case: true
    # 设置MyBatis-Plus的日志输出。日志实现类,org...logging.stdout.StdOutImpl (控制台输出)或其他日志实现类
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 

注:

  • mybatis-plus.mapper-locations:指定MyBatis-Plus映射文件的位置。

    若不指定,MyBatis-Plus 会尝试从 resources/mapper/ 目录下加载 XML 文件(这是 Spring Boot 和 MyBatis 的默认行为)

  • type-aliases-package:指定实体类的包路径,自动扫描并注册别名。

    如果实体类名与数据库表名一致,或者已经通过@TableName 注解指定了正确的表名,则该配置可以缺省

    该配置缺省时,MyBatis-Plus会自动识别实体类并映射到相应的数据库表,但在 XML 中引用实体类时需要使用全限定名


分页插件配置类

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {
   

    /**
     * 分页插件
     * 注:3.5.9版本,MyBatis-Plus 对分页插件做了拆分,需要单独引用mybatis-plus-jsqlparser依赖以支持PaginationInnerInterceptor类
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
   
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

注解配置

  • @MapperScan:用于扫描 Mapper 接口,并将这些接口注册为 Spring 容器中的 Bean

    • 注解位置:通常放在 Spring Boot 应用的主类上,或者放在配置类上

    • 支持通配符:支持使用通配符 * 来匹配一级包路径,如果需要匹配多级包路径,可以使用 ** 来代替

    • 属性

      • value 或 basePackages:指定需要扫描的包路径。可以是一个或多个包路径,用逗号分隔。

      • markerInterface:指定一个标记接口,只有实现了该接口的 Mapper 接口才会被扫描。

        这个参数可以用于更细粒度地控制扫描范围。

      • sqlSessionFactoryRef:指定 SQL 会话工厂的引用名称。

      • 这个参数通常用于多数据源配置时,指定不同数据源对应的 SQL 会话工厂。

    • 注意

      • 包路径的正确性:在使用 @MapperScan 注解时,需要确保指定的包路径是正确的,并且包含了所有需要扫描的 Mapper 接口。
      • 避免重复扫描:如果项目中已经通过其他方式(如 @Mapper 注解)将 Mapper 接口注册为 Bean,那么在使用 @MapperScan 注解时,需要避免重复扫描这些接口,否则可能会导致 Bean 冲突或性能问题。
      • 多数据源配置:在配置多数据源时,需要注意 sqlSessionFactoryRef 参数的使用,以确保不同数据源对应的 Mapper 接口能够正确注册和使用。
  • @TableName:指定实体类对应的数据库表名

    • 说明:如果实体类的名称与数据库表名在命名上保持一致(即遵循驼峰转下划线的命名规则),则此注解不是必需的。但如果命名不一致,则需要使用此注解来明确指定表名。

    • 示例:

      @TableName("user")
      
Mybatis-plusMyBatis增强工具包,用于简化CRUD操作。该工具包为MyBatis提供了一些高效,有用,即用的功能,使用它可以有效地节省您的开发时间。Mybatis-plus特征与MyBatis完全兼容 启动时自动配置 开箱即用的用于操作数据库的界面 强大而灵活的条件包装器 生成主键的多种策略 Lambda样式的API 全能和高度可定制的代码生成器 自动分页操作 SQL注入防御 支持活动记录 支持可插拔的自定义界面 内置许多有用的扩展Mybatis-plus功能1、单表CURD(简单 + 批量)操作,自动完成(支持 like 比较等查询)。 2、分页插件,Count查询自动或自定义SQL查询。 3、Spring根据不同环境加载不同配置支持(支持typeAliasesPackage通配符扫描)。 【自动生成Entity Mapper Service文件】Mybatis-plusMybatis增强工具包) v3.3.2更新日志分页参数提取,单元测试用例修复 达梦数据库代码生成器表过滤支持 微软数据库代码生成器表过滤支持 修复代码生成器属性字段规则错误 SelectById 支持自定义方法名 修复分页插件获取数据库类型问题 Json转换器空值处理 bugfix(mybatis-plus-generator):SQL类型返回错误问题 调整未知方言异常,自动识别url转换小写匹配. fix: 初始化TableInfo中遇到多个字段有@TableId注解时未能抛出异常的问题 SuperController有Class参数的set方法 增加方法StrategyConfig.setSuperServiceImplClass(java.lang.Class<?>). 代码生成器命名策略调整. 扩展分页缓存key值计算. 去除方法推测,直接访问属性字段. 修正枚举处理器类型不匹配比较. 修改表前缀匹配方式 修改在Mybatis全局配置文件中设置分页插件参数不生效问题 修改在Mybatis全局配置文件中设置分页插件参数不生效问 修复PR未指定解析器的时候引发空指针 增加分页插件limit参数配置 修复指定superEntityClass重复生成父类字段问题 无主键的情况无需导入IdType与TableId包 调整生成BaseResultMap格式 支持lombok模式下选择是否进行链式set生成 修复解析器for update错误 过滤PG约束列(只留下主键约束) 增加生成器禁用模板生成 fix(kotlin): 修复动态表名BUG,最大努力替换表名 修复PG约束生成重复属性字段问题 fix(kotlin): 将LambdaUtils中缓存的key改为String 代码生成器增加数据库关键字处理接口 fix github/issues/2454 支持注解可继承 新增 AES 加密数据库用户名密码 优化方法入参泛型,支持更多类型 修复代码生成器开启移除is前缀生成实体缺少包导入 fixed github issues/2470Mybatis-plus截图
评论 174
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨鸦_Cormorant

大家喜欢的话可以点个关注投币哟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值