当前位置: 首页 > 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.xdnf.cn/news/1170613.html

相关文章:

  • NumPy库使用教学,简单详细。
  • allegro 16.6配置CIS库报错 ORCIS-6129 ORCIS-6469
  • Matplotlib绘制各种图参考
  • 时序数据库IoTDB好不好?
  • 在 Linux 系统中基于 Nginx 搭建 openlab 网站及子页面
  • 浅谈——C++和C#差异
  • 从 COLMAP 到 3D Gaussian Splatting
  • 【面试】Redis分布式ID与锁的底层博弈:高并发下的陷阱与破局之道
  • 机器人氩弧焊保护气降成本的方法
  • kafka主题管理详解 - kafka-topics.sh
  • 苹果app应用ipa文件程序开发后如何运行到苹果iOS真机上测试?
  • IntelliJ IDEA (2024.3.1)优雅导入 Maven 项目的两种方式详解
  • 【小学】小学学习资料合集(不定时更新,有需要及时保存,避免失效)
  • LNMP平台部署
  • 设计模式——责任链模式
  • 欧式装修颜色要怎么搭配?
  • Linux研学-MySQL安装
  • C# 类 封装 属性 练习题
  • 暑假算法训练.6
  • [LLM]Synthetic Visual Genome
  • pluto example, heat-1d优化分析
  • ClearML库详解:从实验跟踪到模型部署的全流程管理
  • KafkaMQ 日志采集最佳实践
  • Hadoop调度器深度解析:FairScheduler与CapacityScheduler的优化策略
  • Navicat 远程连接SQLlite数据库
  • 【锁】MySQL中有哪几种锁?
  • 标记语言---XML
  • 《Webpack热更新瓶颈突破:全链路优化指南》
  • Java函数指南:从Function到BiFunction的深度解析
  • 从ZooKeeper到KRaft:Kafka架构演进与无ZooKeeper部署指南