2026/5/21 14:30:33
网站建设
项目流程
wordpress 动作钩子,seo 合理的网站结构,公司名字大全不重名,网页制作教程网站一文搞懂 JDBC、MyBatis、JPA 的区别与底层原理在 Java 后端开发中#xff0c;数据库访问层#xff08;DAO / Repository#xff09;几乎是每个项目的核心。
而在实际开发中#xff0c;我们最常见的三种方案是#xff1a;JDBC#xff08;最底层#xff09;MyBatis#…一文搞懂 JDBC、MyBatis、JPA 的区别与底层原理在 Java 后端开发中数据库访问层DAO / Repository几乎是每个项目的核心。而在实际开发中我们最常见的三种方案是JDBC最底层MyBatis半自动 ORMJPA / Hibernate全自动 ORM很多初学者会有这些疑问 JDBC、MyBatis、JPA 到底差在哪 为什么公司不用 JDBC MyBatis 为什么还能写 SQL JPA 为什么“简单但慢”本文将从底层原理 实战角度带你一次彻底搞懂。一、整体分层视角先有全局概念从抽象程度来看JPAHibernate ↑ MyBatis ↑ JDBC从工作量与控制力来看技术抽象层级SQL 控制开发效率JDBC最低⭐⭐⭐⭐⭐⭐MyBatis中等⭐⭐⭐⭐⭐⭐⭐JPA最高⭐⭐⭐⭐⭐⭐⭐二、JDBC最原始、最底层的数据库访问方式1️⃣ JDBC 是什么JDBCJava Database Connectivity是 Java 官方提供的一套数据库访问 API 标准。 本质Java 代码直接操作数据库2️⃣ JDBC 的核心流程Connection conn DriverManager.getConnection(url, user, pwd); PreparedStatement ps conn.prepareStatement(select * from user where id?); ps.setInt(1, 1); ResultSet rs ps.executeQuery(); while (rs.next()) { System.out.println(rs.getString(name)); }JDBC 做了什么加载数据库驱动建立数据库连接手写 SQL设置参数执行 SQL解析 ResultSet手动关闭资源几乎所有细节都要你自己处理3️⃣ JDBC 的优缺点✅ 优点性能最好最少封装完全掌控 SQL学习数据库原理必经之路❌ 缺点模板代码极多易出错忘关连接代码可读性差不适合大型项目4️⃣ JDBC 的真实定位JDBC 是“地基”不是“商品房” 实际开发中JDBC 很少直接使用MyBatis / JPA 底层最终都是 JDBC三、MyBatis半自动 ORMSQL 仍在你手中1️⃣ MyBatis 是什么MyBatis JDBC SQL 映射 动态 SQL 核心思想SQL 我来写对象你来帮我映射2️⃣ MyBatis 的核心架构Mapper 接口 ↓ XML / 注解 SQL ↓ MyBatis Executor ↓ JDBC ↓ Database3️⃣ MyBatis 工作原理重点以一次查询为例调用 Mapper 接口方法MyBatis 找到对应 SQLXML / 注解解析#{}参数生成 PreparedStatement通过 JDBC 执行 SQL自动封装 ResultSet → Java 对象返回结果你只负责 SQL 和接口JDBC 细节 MyBatis 帮你搞定4️⃣ MyBatis 示例Mapper public interface UserMapper { User selectById(Long id); }select idselectById resultTypeUser select * from user where id #{id} /select5️⃣ MyBatis 的优势✅ 优点SQL 可控非常适合复杂查询动态 SQL 强大学习成本低性能可预测国内使用最广泛❌ 缺点SQL 与 Java 分离维护成本CRUD 代码仍偏多对象关系映射能力有限6️⃣ MyBatis 适合谁强 SQL 驱动项目金融系统报表系统数据分析系统历史项目改造四、JPA真正的 ORM面向对象操作数据库1️⃣ JPA 是什么JPAJava Persistence API是一套ORM 规范不是实现。常见实现Hibernate最常用EclipseLink 核心思想把数据库当成对象集合来操作2️⃣ JPA 的核心概念概念含义Entity数据库表EntityManager数据操作入口Persistence Context一级缓存JPQL面向对象的查询语言3️⃣ JPA 的工作原理Entity Table(name user) class User { Id private Long id; private String name; }userRepository.findById(1L);内部发生了什么JPA 解析实体映射根据方法名 / JPQL 生成 SQLHibernate 生成 JDBC SQL执行 SQL结果放入一级缓存返回实体对象你几乎看不到 SQL4️⃣ JPA 的“黑魔法”能力方法名生成 SQLfindByNameAndAge()自动脏检查不用手写 update级联保存 / 删除对象关系自动管理5️⃣ JPA 的优缺点✅ 优点CRUD 开发效率极高面向对象思维代码极简非常适合业务系统❌ 缺点SQL 不直观学习曲线陡复杂查询性能不易掌控调优成本高五、三者核心对比总结必看维度JDBCMyBatisJPA抽象程度⭐⭐⭐⭐⭐⭐⭐⭐⭐SQL 控制最强强弱开发效率最低中最高学习成本低中高性能可控⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐适合项目底层复杂 SQL业务系统六、真实项目中该怎么选✅ 选择建议经验之谈 用 MyBatis 的情况SQL 复杂强调性能需要精确控制查询国内传统项目 用 JPA 的情况CRUD 为主业务变化快表结构相对稳定追求开发效率 JDBC 什么时候用写框架学原理极端性能场景七、混合使用是最佳实践JPA MyBatis 并不冲突常见组合JPA80% CRUDMyBatis20% 复杂 SQLSpring Boot 中非常常见 八、一句话总结JDBC 是基础MyBatis 是工程利器JPA 是效率神器