了解ORM

简介: MyBatis与MyBatis-Plus区别在于:MyBatis是半自动ORM框架,需手动编写SQL,适合复杂查询场景;而MyBatis-Plus是其增强工具,提供零SQL的CRUD操作,简化开发流程,适用于简单增删改查场景,提升开发效率。

mybatias和mybatias-plus区别

特性

MyBatis

MyBatis-Plus (MP)

基础定位

半自动 ORM 框架(需手动编写 SQL)

MyBatis 的增强工具(简化 CRUD 操作)

设计哲学

强调 SQL 的灵活性和可控性

强调零 XML极简 CRUD开发

适用场景

复杂 SQL 场景(如多表联查、自定义分页)

简单 CRUD 场景(如管理系统、快速开发)

场景

推荐方案

原因

快速开发 CRUD 应用

MyBatis-Plus

减少 90% 的 CRUD 代码,专注业务逻辑

复杂 SQL 查询(如报表系统)

MyBatis

支持自定义 SQL,灵活控制查询逻辑

已有 MyBatis 项目

MyBatis-Plus

可平滑集成,逐步替换简单 CRUD,保留复杂 SQL

微服务架构

MyBatis-Plus + 代码生成器

快速生成各服务的基础 CRUD 代码,提高开发效率

总结:mybatis 适用于多表,复杂的sql查询(手动编写),mybatis-plus则是零sql,针对大部分的简单crud(增删改查)

mybatis-plus用法

mybatis-plus的依赖包中包含了mybatis,导入mybatis-plus可以不用重复导入mbatis

  1. @Mapper注解
  • 作用于单个 Mapper 接口,用于告诉 MyBatis:“这是一个 Mapper 接口,需要为它生成代理实现类”。
  • 仅能标识单个接口,若项目中有多个 Mapper(通常是这样),每个接口都需要添加该注解,否则 Spring 无法识别。
  1. @MapperScan注解(优先推荐使用)
  • 作用于Spring Boot 引导类(或配置类),用于指定Mapper 接口所在的包路径,Spring 会自动扫描该路径下的所有接口,并将它们注册为 Bean。
  • 无需在每个 Mapper 接口上添加@Mapper,简化了代码(尤其在 Mapper 数量较多时)。
  • 可同时存在

mybatis使用步骤

  1. Mapper 层:继承BaseMapper<Entity>,直接使用内置 CRUD 方法。
  2. Service 层
  • 接口继承IService<Entity>,获得高级方法(分页、批量操作)。
  • 实现类继承ServiceImpl<Mapper, Entity>,简化实现。

不使用sql

通过service调用mapper 层(mp)的方法或者调用service层方法(mp提供的)

关系 1:

mapper 必须继承 BaseMapper<实体属性>,

关系2:

service(自定义的)要继承 service(mp) 同时实现类也要继承

例如:DeptService  extends IService<Dept>   service层继承

DeptServiceImpl extends ServiceImpl<DeptMapp,Dept> implements DeptService

(泛型:mapper(已经继承关系1),实体类)

后面就可以调用原生方法(mp)进行基础的crud

理解mybatis-plus 的映射关系和一些注解

原理:通过解析实体类的成员变量,自动映射为数据库表的字段,并生成对应的 SQL 片段

MyBatis-Plus 会默认将实体类名直接映射为表名不区分大小写,数据库表名通常为小写)。驼峰未设置默认自动开启

  1. 表映射
  • 优先使用 @TableName 注解指定的表名。
  • 无注解时,默认用实体类名作为表名。
  1. 字段映射
  • 优先使用 @TableField(value = "...") 指定的列名。
  • 无注解时,若开启驼峰命名(默认开启),则驼峰变量名(如 userName)映射到下划线列名(如 user_name)。
  • 若未开启驼峰,直接用变量名作为列名。

默认实行的是一实体类一张表(不跨表关联)

综上因此:

  • @TableField(exist = false) 的核心作用是告诉 MyBatis-Plus:该成员变量不是数据库表字段,生成 SQL 时忽略它
  • 若不添加此注解,非表字段会被误判为表字段,导致 SQL 执行错误。
相关文章
|
5月前
|
SQL 前端开发 Java
【分层架构】Spring MVC三层架构 / DDD领域驱动四层架构 / 微服务分布式架构(DAO/Mapper/Repository/Service/Controller/Manager)
本文系统解析Java企业级分层架构(Controller/Service/Manager/Repository/DAO/Mapper),阐明各层职责边界、设计原则与典型误区,强调单一职责、依赖倒置、关注点分离等核心思想,助力构建高内聚、低耦合、易维护的可扩展系统。
1594 11
|
5月前
|
SQL Java 测试技术
告别 CRUD 泥沼!DDD 领域驱动设计:从底层原理到生产级全链路落地实战
DDD是应对复杂业务的架构思想,核心是“领域优先、边界隔离”:通过战略设计(统一语言、限界上下文、上下文映射)划清业务边界;通过战术设计(实体/值对象、聚合根、领域服务等)落地高内聚、低耦合的代码。非银弹,适用于规则多、迭代快、协作难的场景。
1714 1
|
2月前
|
SQL NoSQL 数据可视化
DBeaver|免费全能数据库管理工具 下载和安装
DBeaver 是一款免费开源、跨平台(Windows/macOS/Linux)的通用数据库管理工具,基于 Java/Eclipse 架构。支持 MySQL、PostgreSQL、Oracle、MongoDB、Redis 等 50+ 关系型与 NoSQL 数据库,提供可视化 SQL 编辑、ER 图生成、结构/数据可视化操作及 SSH/SSL 安全连接。
563 0
|
缓存 Java
自旋锁
自旋锁是一种轻量级同步机制,适用于多线程环境。其核心思想是线程在获取锁失败时不阻塞,而是通过忙等待(自旋)不断尝试获取锁,从而避免上下文切换的开销。常见实现依赖CAS原子操作,适用于锁持有时间短、并发度高的场景,如计数器更新或缓存操作。但长时间自旋会浪费CPU资源,因此更适合多核环境下使用。Java中可通过`AtomicBoolean`实现简单自旋锁,JVM也对其进行了自适应优化。合理使用可提升性能,但需注意控制自旋时间和竞争粒度。
515 0
|
8月前
|
负载均衡 Java 应用服务中间件
微服务网关与配置中心
本文介绍了微服务架构下的网关路由与鉴权机制,重点讲解使用Spring Cloud Gateway实现请求路由、负载均衡及JWT身份校验。通过Nacos实现服务发现,网关统一处理前端请求,解决多入口问题,并在全局过滤器中实现用户鉴权,保障系统安全。
|
监控 算法 关系型数据库
分布式事务难题终结:Seata+DRDS全局事务一致性架构设计
在分布式系统中,CAP定理限制了可用性、一致性与分区容错的三者兼得,尤其在网络分区时需做出取舍。为应对这一挑战,最终一致性方案成为常见选择。以电商订单系统为例,微服务化后,原本的本地事务演变为跨数据库的分布式事务,暴露出全局锁失效、事务边界模糊及协议差异等问题。本文深入探讨了基于 Seata 与 DRDS 的分布式事务解决方案,涵盖 AT 模式实践、分片策略优化、典型问题处理、性能调优及高级特性实现,结合实际业务场景提供可落地的技术路径与架构设计原则。通过压测验证,该方案在事务延迟、TPS 及失败率等方面均取得显著优化效果。
686 61
|
SQL 存储 分布式计算
流批一体技术简介
本文由阿里云 Flink 团队苏轩楠老师撰写,旨在向 Flink 用户整体介绍 Flink 流批一体的技术和挑战。
51903 3
流批一体技术简介
|
数据采集 分布式计算 大数据
森马基于MaxCompute+Hologres+DataWorks构建数据中台
本次案例主要分享森马集团面对多年自建的多套数仓产品体系,通过阿里云MaxCompute+Hologres+DataWorks统一数仓平台,保障数据生产稳定性与数据质量,减少ETL链路及计算时间,每年数仓整体费用从300多万降到180万。