当前位置: 首页 > news >正文

【MyBatisPlus】一文讲清 MyBatisPlus 基本原理及基本使用方式

一、概述

  1. 定义:一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

  2. 原理 (MyBatisPlus 实现 “Table → Class” 映射的原理)

    功能原理
    1. 驼峰类名 → 下划线表名MyClass 类名自动转为 my_class 表名
    如果命名不符合规范,应该用 @TableName(”my_table”) 指定对应的数据库表
    2. id 属性 → primary keyMyClass 中的 id 属性自动认定为表名
    如果命名不符合规范,应该用 @TableId(”my_primary_key”) 指定对应的表的主键
    3. 属性名 → 下划线表字段MyClass 中的属性 myAttribute 自动转为 my_attribute 字段
    如果命名不符合规范,应该用 @TableField(”my_attribute”) 指定对应的表的字段
  3. 优点

    1. 代码无侵入:只对数据库功能进行增强,不会影响现有工程
    2. 效率至上:节省大量书写基础 CRUD 代码的时间,只需要继承 BaseMapper<> 即可

二、使用流程

1 .引入依赖

  1. 注意:引入 MyBatis-Plus 之后不要再次引入 MyBatis 以及 MyBatis-Spring,避免因版本差异导致的问题

    <!-- mybatis-plus 依赖 -->
    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version>
    </dependency>
    <!-- mybatis-plus 测试依赖 -->
    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter-test</artifactId><version>3.5.6</version>
    </dependency>
    

2 .实现 Table 实体类

  1. 功能:将数据库中的表进行实体化,指定实体类与表的映射关系
  2. 实现流程:可以直接使用 MyBatisX 自动从数据库生成 Entity 对象,提升开发效率

@TableName(value=”my_table”)

  1. 功能:声明当前类所对应的 table

@TableId(type=IdType.ASSIGN_ID)

  1. 功能:声明当前类所对应的 table 中的主键
  2. 属性
    1. value:主键名称

    2. type:primary key 的自增方式(默认策略: Defaultdentifiergenerator 雪花算法)

      类型说明
      IdType.AUTO数据库自增长
      IdType.INPUT通过 SET 方法自行输入
      IdType.ASSIGN_ID通过雪花算法分配 Id(接口 IdentifierGenerator 的方法 nextId() 来生成 id)

@TableField

  1. 功能:声明当前类所对应的 table 中的字段
  2. 使用场景
    1. 成员变量与数据库字段名不一致
    2. 成员变量以 is 开头,且是 boolean 类型
    3. 成员变量与数据库关键字冲突(注解:@TableField("database_keyword") )
    4. 成员变量不是数据库字段 (注解:@TableField(exist = false) )

@Data & @Builder

  1. 功能:Lombok 注解,自动生成 getter/setter 等相关方法
@Data
@Builder
@TableName("tb_user")
public class User{@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private Integer gender;@TableField("is_married");private boolean isMarried;@TableField("`order`")private Integer order;
}

3 .继承 BaseMapper / IService / ServiceImpl

  1. 基本类型

    1. BaseMapper :使得自定义的 MyClassMapper 接口可以直接调用 BaseMapper 中的 CRUD 基本功能
    2. IService:使自定义的 MyClassService 接口可以直接调用 MyMapper 中的方法
    3. ServiceImpl<MyClassMapper, MyClass>:实现 MyClassService 中的方法
  2. 代码实现

    public interface MyClassMapper extends BaseMapper<MyClass> {}
    
    public interface MyClassService extends IService<MyClass> {}
    
    public class MyClassServiceImpl extends ServiceImpl<MyClassMapper, MyClass> implements MyClassService {}
    

4 .添加 @MapperScan 注解

  1. 功能:给启动类添加 MapperScan 注解,确保 MyBatis 可以找到 Mapper 在项目中的位置

    @SpringBootApplication
    @MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
    public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
    

5 .添加配置 application.yml

mybatis-plus:type-aliases-package: com.myproject.mypackage.domain.entity         # 别名扫描包, 用于简化 MyBatisPlus 映射文件的引用mapper-locations: "classpath*:/mapper/**/*.xml"                     # Mapper.xml 文件地址, 默认值configuration:                                         # MyBatis 核心行为map-underscore-to-camel-case: true                 # 开启 "驼峰->下划线" 映射cache-enabled: false                               # 开启二级缓存global-config:db-config:id-type:assign_id                              # id 默认由雪花算法生成update-strategy: not_null                      # 更新策略:只更新非空字段

http://www.dtcms.com/a/291673.html

相关文章:

  • EMA《2025-2028年药品监管中的数据与AI 1.3版》信息分析
  • 深度分析:Kimi K2开源模型
  • 拆分、合并PDF
  • Qt基本控件使用:按钮、标签、文本框等
  • docker阿里云安装
  • [2025CVPR]ViKIENet:通过虚拟密钥实例增强网络实现高效的 3D 对象检测
  • AI Agent-Manus 构建经验解读(下)
  • powerquery如何实现表的拼接主键
  • mybatis多对一一对多的关联及拼接操作以及缓存处理
  • Java 与 Android 回收机制深度解析
  • 行业出海研究报告
  • Apache Ignite 中的 SQL 模式(Schema)管理机制
  • Qt字符串处理与正则表达式应用
  • MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
  • 使用vue-pdf-embed发现某些文件不显示内容
  • Jenkins接口自动化测试(构建)平台搭建
  • Jenkins 多架构并发构建实战
  • 计算机网络:连接世界的数字脉络
  • Python爬虫实战:研究pymorphy2库相关技术
  • JVM:工具
  • 字节跳动视觉算法面试30问全景精解
  • Python爬虫实战:研究PyPLN库相关技术
  • PCIe之P2P应用
  • 从ZooKeeper到KRaft:Kafka架构演进与无ZooKeeper部署指南
  • Android perfetto 工具使用
  • 【前端】ikun-pptx编辑器前瞻问题二: pptx的压缩包结构,以及xml正文树及对应元素介绍
  • 从重复劳动到自动化:火语言 RPA 的实践与思考
  • python办自动化--读取邮箱中特定的邮件,并下载特定的附件
  • 物联网_TDengine_EMQX_性能测试
  • RabbitMQ-交换机(Exchange)