尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ORM 框架

ORM 框架
📅 发布时间:2026/7/1 17:42:57

一、ORM 是什么

ORM(Object Relational Mapping)对象关系映射作用:把数据库的表、行、字段和代码里的类、对象、属性自动映射,不用手写大量原生 SQL。

  • 数据库:表(Table)→ 类(Model / 实体类)
  • 数据库:行(Row)→ 对象实例
  • 数据库:字段(Column)→ 类属性

核心优势

  1. 屏蔽数据库差异(MySQL/Oracle/SQLServer 切换基本不用改业务代码)
  2. 杜绝手动拼接 SQL,防止 SQL 注入
  3. 面向对象编程,可读性高,简化 CRUD
  4. 自带分页、事务、关联查询、缓存等能力
缺点
  1. 复杂多表联查、超大批量数据时,性能不如手写原生 SQL
  2. 自动生成 SQL 可能不够优化,出现慢查询
  3. 隐藏底层 SQL,调试问题需要打印执行语句

CRUD 含义

CRUD 是数据库最基础的四类操作英文首字母缩写:

  1. C = Create→新增 / 创建(insert)
  2. R = Read→查询 / 读取(select)
  3. U = Update→修改 / 更新(update)
  4. D = Delete→删除(delete)

对应 SQL

  • Create:INSERT INTO 表(字段) VALUES(...)
  • Read:SELECT * FROM 表 WHERE 条件
  • Update:UPDATE 表 SET 字段=值 WHERE 条件
  • Delete:DELETE FROM 表 WHERE 条件

二、主流 ORM 框架分类

1. Java 生态(后端最常用)

① MyBatis(半 ORM / 持久层框架)
  • 不是完整 ORM,半自动,SQL 自己写,只做结果集映射实体
  • 优点:灵活、可控 SQL、性能好,企业项目首选
  • 配套:MyBatis-Plus(封装 CRUD,实现全自动 ORM 能力)
② JPA / Hibernate(全 ORM)
  • Hibernate:老牌完整 ORM,全自动生成 SQL
  • Spring Data JPA:基于 Hibernate 封装,极简 CRUD,只写接口不用实现类
  • 适合快速开发、简单业务;复杂报表场景容易性能拉胯
其他
  • EclipseLink、QueryDSL(配合 JPA/MyBatis 做类型安全查询)

2. Python 生态

  1. Django ORM:Django 内置,开箱即用,语法简洁
  2. SQLAlchemy:工业级 ORM,分声明式模型,Flask 标配
  3. Peewee:轻量小型 ORM,适合小脚本

3. Go 生态

  1. GORM:最主流,类似 MyBatis-Plus,链式调用
  2. XORM:轻量 ORM

4. PHP

  • Eloquent(Laravel 内置 ORM)

5. C#/.NET

  • Entity Framework Core(EF Core)

三、两种 ORM 模式对比:全 ORM vs 半 ORM

1. 全 ORM(Hibernate/JPA、GORM、Django ORM)

开发只操作对象,完全不用写 SQL,框架自动生成:

// JPA示例 User user = new User(); user.setName("张三"); userRepo.save(user); // 自动insert

适合:CRUD 多、简单单表、快速迭代项目

2. 半 ORM(MyBatis)

只做结果映射,SQL 由开发者自己维护,自由度最高

<select id="listUser" resultType="User"> select id,name from t_user where name = #{name} </select>

适合:复杂统计、多表联查、大数据量、对 SQL 性能有要求的企业系统

四、ORM 核心通用特性

  1. 实体映射:注解绑定表名、字段名、主键、自增
  2. CRUD 封装:内置新增、删除、更新、列表、分页
  3. 关联映射:一对多、多对一、多对多自动关联查询
  4. 事务管理:统一事务 API
  5. 条件构造器:链式拼接查询条件,不用拼字符串
  6. 缓存:一级缓存(会话内)、二级缓存(全局)
  7. 软删除、逻辑删除、自动填充创建 / 更新时间

五、实战示例(MyBatis-Plus 最常用 Java ORM)

1. 实体映射

@TableName("t_user") public class User { @TableId(type = IdType.AUTO) private Long id; @TableField("user_name") private String userName; }

2. 无 SQL CRUD

// 新增 userMapper.insert(new User(null, "李四")); // 查询 List<User> list = userMapper.selectList(Wrappers.lambdaQuery() .eq(User::getUserName, "李四")); // 更新 userMapper.updateById(user); // 删除 userMapper.deleteById(1L);

六、ORM 使用避坑

  1. N+1 查询问题:关联查询没写预加载,循环单条查库,性能雪崩
  2. 批量操作禁用循环单条 save,必须用批量 API
  3. 超大分页避免limit 1000000,10,改用游标分页
  4. 复杂统计 SQL 放弃 ORM,手写原生 SQL
  5. 关闭自动驼峰转换、检查字段映射,防止大小写 / 下划线不匹配
  6. 生产环境打印执行 SQL,监控慢查询

七、ORM 和 JDBC 的关系

JDBC 是 Java 底层操作数据库的原生 API,极其繁琐; ORM 是JDBC 上层封装,简化开发,底层最终还是会转成 JDBC 执行 SQL。

八、Java 两大主流 ORM 详细选型对比(企业最常用)

1. Spring Data JPA(全 ORM)

适合场景
  1. 初创项目、内部后台、简单业务 CRUD 居多
  2. 需求迭代快,不想写 XML / 注解 SQL
  3. 需要快速切换多种数据库
  4. 小型单体、流量不高、无复杂报表统计
缺点
  1. 复杂多表查询容易产生 N+1、低效 SQL,调优成本高
  2. 自定义复杂 SQL 灵活性弱,原生 SQL 书写繁琐
  3. 批量操作性能差,海量数据场景容易卡顿
不适合:ERP、财务报表、大数据统计、高并发交易系统

2. MyBatis + MyBatis-Plus(半自动 ORM)

适合场景
  1. 中大型企业项目、交易、财务、制造 ERP、报表系统
  2. 存在大量联表、聚合、分组、复杂统计 SQL
  3. 对 SQL 性能有严格要求,DBA 需要审核 SQL
  4. 分库分表、批量导入导出、千万级数据操作
  5. 团队有数据库优化人员,习惯手写 SQL
缺点
  1. 简单单表也要写映射,前期开发速度略慢于 JPA
  2. 跨数据库适配需要手动修改 SQL,移植性差

九、分场景直接给出选型结论

场景 1:小型后台管理系统、低并发、单表多

推荐:Spring Data JPA / GORM / Django ORM 理由:零 SQL 开发,内置分页、排序、条件查询,3 分钟完成 CRUD,上线快。

场景 2:中大型业务系统、财务 / 生产 / ERP、大量复杂查询、报表

推荐:MyBatis-Plus(Java) 理由:兼顾基础 CRUD 封装,复杂业务可手写原生 SQL,方便 DBA 优化,大数据友好。

场景 3:高并发交易、订单、库存、海量写入

推荐:MyBatis,尽量少用自动 ORM 封装,手写优化 SQL 理由:可精准控制索引、分页、批量语句,避免框架生成冗余 SQL 拖垮数据库。

场景 4:产品需要兼容多数据库(MySQL、Oracle、PostgreSQL)

推荐:JPA (Hibernate)、EF Core 理由:框架自动适配不同数据库语法,业务代码几乎不用改动。

场景 5:快速开发脚本、小型 Python 工具、Flask 网站

推荐:SQLAlchemy

场景 6:Go 微服务、轻量服务

推荐:GORM v2

场景 7:老旧系统迁移、大量存储过程、原生 SQL 遗留

推荐:MyBatis,直接复用原有 SQL,改动最小。

十、选型避坑关键点

  1. 不要单纯为了开发快选全 ORM前期写代码快,后期复杂查询出现慢 SQL、N+1 问题,重构成本极高,大型业务慎重。
  2. 团队能力匹配优先团队没人会 SQL 却硬上 MyBatis,会出现大量不规范、有注入风险的拼接 SQL; 团队精通 DBA 却用 JPA,会频繁需要改写自动生成的垃圾 SQL。
  3. 批量数据操作慎用全自动 ORM循环 save、循环查询会频繁访问数据库,必须手动写批量 insert/update。
  4. 分库分表场景优先 MyBatis 生态 Sharding-JDBC 对 MyBatis 适配最完善,JPA 自动分页、分页函数容易出现分页偏移问题。
  5. 中小型项目折中方案:MyBatis-Plus 单表用内置 CRUD,多表复杂查询手写 XML,兼顾开发效率与 SQL 可控性,企业最通用折中选择。

十一、简易选型判断流程(快速决策)

  1. 项目是否大量复杂统计、多表联查、大数据?
    • 是 → MyBatis-Plus
    • 否 → 第二步
  2. 是否需要兼容多种数据库?
    • 是 → JPA
    • 否 → 第三步
  3. 追求极致开发速度、简单后台?
    • 是 → JPA/GORM
    • 团队熟悉 SQL、后期可能扩展复杂报表 → MyBatis-Plus

相关新闻

  • 标杆汉沽幼儿园早教
  • 揭秘:离网光伏行业中信用度高的厂家有哪些独特之处?
  • 遗传算法实操指南:参数调优、收敛诊断与早熟规避

最新新闻

  • 2026在线去除本地视频水印工具推荐:免费无水印、安全无广告不压缩
  • OECP性能优化秘籍:如何提升大规模ISO对比效率10倍
  • 揭秘openEuler/CCA:ARM机密计算架构如何彻底改变数据安全?
  • openEuler RISC-V SIG:构建环境配置与依赖解析完全指南
  • 2026Word文件压缩至10M以内完整实操指南
  • 信号白化是什么?原理、作用和实现,以及对自适应滤波器的好处

日新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号