持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

2024-06-24 13:58

本文主要是介绍持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://t.51jdy.cn/thread-259-1-1.html

持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。

因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。
选择的 标准:
1,项目的场景。
2,团队的技能掌握情况。
3,开发周期(开发效率)。


传统的 业务系统,通常业务都比较复杂,懂业务的运维人员 对sql查询工具都比较熟悉。
这种以 数据库 为主的 业务场景 使用 以sql为主的持久层框架 例如:ibatis,mybatis
这种 性能优化的时候 sql 语句调整较为方便,甚至 业务人员 会直接提供 业务对于的 sql给开发人员。

对于快速迭代的中小型 新项目,适合使用hibernate(JPA + hibernate驱动)。
快速迭代 适合 使用面向对象的 持久层框架。在开发过程中 对象的变更非常频繁。
这种 持久层框架 适合 快速 重构 ,提高开发效率。
但是 这种框架 易学难精,用的不好就容易造成性能问题,用的好性能并不输于ibatis框架。
在做性能优化方面 可借助 缓存实现。

以上说说到了 项目场景 和 开发效率。
再说说 团队技能掌握情况,这个情况 有的时候 可以忽略,但有时缺不能忽视。
这个情况也和上面说的两个情况 对比着 分析,需要做一个平衡。
分以下几个情况:
老团队新项目 :这个要考虑 是重用公司已有框架资源,持续积累改进,还是放弃旧的,开发新的。
                        这个时候,大部分开发人员会怂恿技术主管或架构师 使用新的框架,尝试新的技术;不关心新技术带来的风险,项目的进度,已用积累的放弃。
                        作为架构师/技术主管,需要考虑项目的场景,周期,核心点,公司技术的可持续积累,风险性,团队技术的培训提升 等方面综合考虑。
                        结论:结合项目场景适度引进新技术(这也是提升团队技术的一个机会,但风险与机会并存,进度紧张的时候不建议更换)。
新项目新团队 :这个要区分地方,大城市好招人,以项目场景为主,选择框架,招聘精通此类框架的人才即可。
                        小城市 招聘人才困难,如果 没有 技术牛人引导使用,建议 还是要以团队技术人员掌握的技术为主。
                        一群人 用一个不熟悉的框架,不如 大部分用一个熟悉的框架。(技术培训 是需要一个周期的,如果没有牛人不建议现学现用)。
                        这里 可能有另外一个声音:大家一起学,边学边用。在项目非紧急的情况下 可以考虑。
                        但本人不太建议拿项目当试验;稳定,高效,靠谱,好扩展,这是作为一个架构师 要肩负的责任。
以技术为核心的项目 :要招聘一些技术牛人,使用符合项目场景的框架,而不是复合团队的框架,但团队技术问题 要通过培训,牛人带路等方式解决。

以上是抽象的说法,以下是我 选取的框架对比资料,选来选取 其实就围绕在两个方向:
是面向对象 还是面向数据结构;
是hibernate 还是ibatis;


何时使用iBATIS

iBATIS最好是用在你需要全面地控制SQL的时候,在需要对SQL查询做微调的时候也很有用。
当你在应用和数据库设计两方面都有完全的控制权的时候,就不应该使用iBATIS,
因为在这样的情况下,应用可能会做出修改以适应数据库,或是反过来。
在这种情形中,你可以构建一个完全的对象-关系应用,其他的ORM工具更适于使用,
因为iBATIS较为以SQL为中心,其通常被称作反转的——功能齐全的ORM工具生成SQL,
而iBATIS直接使用SQL。iBATIS也不适合于非关系型的数据库,
因为这类数据库不支持事务和其他iBATIS用到的键特性。

简单是iBATIS最大的优势,因为它提供一个简单的映射和用于构建数据访问代码的API层。
在这一框架中,数据模型和对象模型不需要做精确的彼此映射。
这是因为iBATIS使用了一个数据映射器(data mapper),
其经由一个XML描述符而不是元数据映射器把对象映射到存储过程、SQL语句或是ResultSet上,
而元数据映射器起的是把领域中的对象映射到数据库中的表上的作用。
因此,iBATIS能够使得数据模型和对象模型彼此独立,互不相干。

为什么我们需要Hibernate?

传统上用于对象-关系映射的实体bean(entity bean)非常难以理解和维护,Hibernate使得对象-关系映射变得简单起来,它的方法是在一个XML文件中映射元数据,该文件定义了需要映射到某个特定类上的数据库中的表。
在其他的持久性框架中,你需要修改应用类来实现对象-关系映射;而在Hibernate中则不需要这样做。
使用了Hibernate后,你就无需担心数据库的改变,因为手工修改SQL脚本文件的工作已被免除。
如果你需要不时改变应用使用到的数据库的话,也可以通过修改配置文件中的dialet属性来很容易地解决这一问题。
Hibernate提供了全部的SQL功能,其中的有些是早先的商业ORM框架一直没有提供的。
Hibernate也支持许多的数据库,其中包括MySQL、Oracle、Sybase、Derby和PostgreSQL等,而且也能够与基于简单Java对象(plain old Java object,POJO)的模型配合得很好。
Hibernate基于所选择的底层数据库来生产JDBC代码,因此省去了编写JDBC代码的麻烦,它还支持连接的池化。Hibernate使用的API很简单也很容易学习,只有很少SQL知识的开发者也能够使用Hibernate,因为它减轻了编写SQL查询的负担。
Hibernate架构

就内部来说,Hibernate用到了JDBC,JDBC提供了数据库的一个抽象层,它同时也采用了Java Transaction API(JTA)和JNDI来集成其他应用。Hibernate需要用来与数据库交互的连接信息由JDBC连接池提供,这需要做配置。
Hibernate的架构主要由两个接口——Session和Transaction组成——以及一个Query接口,该接口位于应用的持久层中。定义于应用的业务层中的类通过Hibernate持久层的独立元数据来进行交互,持久层转而使用某些JDBC API来与数据库层对话。此外,Hibernate还用到了其他的配置接口,其中主要是有着适当命名的Configuration类。Hibernate还使用回调接口和一些用于扩展映射功能的可选接口。


Hibernate组成部分的主要编程接口:
Ÿ           org.hibernate.SessionFactory基本上是用来获取一个session实例,并且可看作是连接池化机制的一个模拟。这是线程安全的,因为所有的应用线程都使用单一的SessionFactory(只要Hibernate只使用一个数据库)。该接口通过配置文件来配置,配置文件决定了要加载的映射文件。
Ÿ           org.hibernate.Session提供了一个单独的线程,该线程确定应用和数据库之间的对话。这是对一个特定(单个)连接的模拟。该接口是非常轻量级的,而且是非线程安全的。
Ÿ           org.hibernate.Transaction提供了一个单线程对象,其横跨整个应用并确定原子工作单元。其基本上抽象了JDBC、JTA和CORBA事务。
Ÿ           org.hibernate.Query被用来执行查询,或以HQL的形式或是以底层数据库的SQL方言形式。Query实例是轻量级的,需要提到的很重要的一点是,它不能用在创建它的session的外部。

51筋斗云(微信公众号:cn51jdy ),欢迎分享本文!

这篇关于持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090340

相关文章

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

雨量传感器的分类和选型建议

物理原理分类 机械降雨量计(雨量桶):最早使用的降雨量传感器,通过漏斗收集雨水并记录。主要用于长期降雨统计,故障率较低。电容式降雨量传感器:基于两个电极之间的电容变化来计算降雨量。当降雨时,水滴堵住电极空间,改变电容值,从而计算降雨量。超声波式降雨量传感器:利用超声波的反射来计算降雨量。适用于大降雨量的场合。激光雷达式降雨量传感器:利用激光技术测量雨滴的速度、大小和形状等参数,并计算降雨量。主

BD错误集锦6——【IDEA报错】tomcat server功能无效,报错Java EE: EJB, JPA, Servlets

在网上查找原因,发现是非法关闭IDEA导致的。 Open Settings | Plugns and enable it. 在设置中enable JAVA EE和tomcat server即可。 参考: https://stackoverflow.com/questions/43607642/intellij-idea-plugin-errorproblems-found-loadin

(1995-2022年) 全国各省份-技术交易活跃度

技术交易活跃度是一个关键指标,用于衡量技术市场的交易频繁程度和活跃性。它不仅显示了市场参与者对技术交易的参与热情,而且交易的频率也体现了市场的活力。这一指标对于不同的利益相关者具有不同的意义: 对投资者而言,技术交易活跃度是把握市场趋势、评估交易策略和预测市场波动的重要工具。对企业来说,技术交易活跃度反映了其技术创新的活跃程度和市场竞争的激烈程度,有助于企业制定技术创新和市场竞争策略。对政策制定

AI与音乐:当技术与艺术发生冲突

AI在创造还是毁掉音乐? 在科技日新月异的今天,人工智能(AI)已经渗透到了我们生活的方方面面,音乐领域也不例外。然而,尽管AI为音乐创作带来了前所未有的便利,我却深感其正在毁掉音乐的本质。 首先,AI的介入使得音乐创作过程变得过于机械化。传统的音乐创作往往需要音乐家们经过长时间的思考、尝试和修改,最终才能创作出触动人心的作品。这一过程不仅体现了音乐家的才华和技艺,更蕴含了他们对生活的感悟和对

IPD推行成功的核心要素(十一)技术规划与平台规划促进公司战略成功

随着外部大环境的影响,各企业仅有良好的愿望是不够的。预测并顺应新兴市场和技术的变化,变危机为转机,不断推出强大的产品才是一个公司持续繁荣的根本保障。而高效的产品开发往往是基于某些关键技术,针对市场推出的一个或几个产品系列,这些产品系列通常共用一些产品平台,共用一种或者几种关键技术。当一家企业进入了平稳发展期,已经建立了较为完善的管理制度和产品开发流程,但是依然认为竞争对手是那样强大,那样不可战胜。

云原生容器技术入门:Docker、K8s技术的基本原理和用途

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、容器技术概述 1、什么是容器技术 2、容器技术的历史与发展 3、容器技术与虚拟机的比较 4、容器技术在云原生中的作用 二、Docker基础 1、Docker简介 2、Docker架构 3、Docker与工作原理 三、Kubernetes(k8s)基础 1、

MyBatis-Plus常用注解详解与实战应用

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了大量的常用注解,使得开发者能够更方便地进行数据库操作。 MyBatis-Plus 提供的注解可以帮我们解决一些数据库与实体之间相互映射的问题。 @TableName @TableName 用来指定表名 在使用 MyBatis-Plus 实现基本的 C