首页 > 图灵资讯 > 技术篇>正文

Hibernate淘汰了?只是你不会用而已!

2021-12-01 14:25:40

Hibernate淘汰了吗?那是因为你没有正确的方法!不知大家对整合SpringBoot+Mybatis有没有想过为什么SpringBoot没有提供MyBatis的官方Starter?与SpringDataJPA竞争?
第一,Hibernate是正统JPA血脉!JPA(JavaPersistenceAPI)是JDK推崇的ORM规范!那么SpringBoot要做ORM框架肯定会跟JDK一起玩,毕竟JDK是整个java的标准,因此SpringBoot会选择Hibernate作为SpringDataJPA的ORM实现框架。
MyBatis?完全没有ORM框架,它只是封装了JDBC的持久性框架!SpringBoot我根本就不想和你玩,你的目标应该是我的JDBCTemplate,我有一个封装了JDBC的组件干吗要和你玩呢,你要和我玩自己写Starter来适配我!那是真正的理由!如果您已经完成了,还不能让您感动,我们可以比较HibernateVSMyBatis:HibernateVSMyBatisHibernate是一个对象关系映射框架(ORM)。MyBatis是一个持久的框架,而非ORM。这是把SQL语句和Java方法映射的。
 
为何国人更喜欢MyBatis总结的理由:
1.你连JPA、Hibernate、ORM都搞不清楚,还怎么用Hibernate?Hibernate比MyBatis高
2.MyBatis简单易学易用——符合培训机构的教学标准。训练机构都教MyBatis能不流行什么!
3.具有中国特色的业务需求更加复杂,使用MyBatis实现简单、快速。Hibernate要实现复杂的需求,现在困难得多!
4.要无条件地满足领导需要。必须有领导导向的程序。
5.当SSH落幕时,由SSM驱动。时过境迁\技术更新换代\大众选择
ps:那算是去感觉还是应该MyBatis好一点啊..Hibernate还是被时代抛弃了啊…虽然它真的有用又能怎么样?不过,hibernate在实现某些单一需求的应用上有其优点:与传统Mybatis相比,持久层代码减少了60%,xml文件中的大部分内容当然包括在内,您不需要花费时间来维护您的SQL语句,从而极大地简化持久层的开发并提高开发效率。因此,它们可用于不同的场景:
用Hibernate实现常规CRUD功能,偏简单的业务需求。以对象模型为基础进行编程—CodeFisrt。需要替换数据库。MyBatis用数据库驱动的方式编程—DBFisrt。SQL语句需要最严格的优化。对于复杂的搜索查询,动态条件查询更加方便。噢~~看起来它们各有千秋,难道没有把我的Hibernate和MyBatis混在一起?的确有许多应用这样做,但我不推荐将它们混合在一起,这增加了应用架构的复杂性,但如果一种应用可以拆分为不相关的小程序怎么办?每个应用都能根据其业务复杂性来选择他们需要的技术吗?在与SpringDataJpa微服务体系结构的整合下,微服务将迎来另一个春天:“拆开!”同时,代码和数据库都将被分离,单个服务的业务复杂性也将减少,SQL复杂性也随之减少,而且我每项服务都可以自由选择自己的技术不干预,SpringDataJpa的用武之地是毫无疑问的!在SpringDataJPASpringBoot下使用SpringDataJPA也不太方便:只要加入相应的springdatajpa依赖项即可。
org.springframework.boot。
spring-boot-starter-data-jpa。
2.添加Repository接口与dao层的内置界面相结合,您可以快速CRUD实现快速的CRUD,并提供多种持久方式供您选择,下面的7个例子:公共访问访问权限扩展器。
PagingAndSortingRepository//1.实现分页排序和CRUD。
//还可以选择许多内建的接口来实现动态条件。
,QueryByExampleExecutor//2.实现动态条件:快速精确匹配(查)
JpaSpecificationExecutor//3.具体的实施动态条件(查)
QuerydslPredicateExecutor//4.实现动态条件:查询(查)
{
//5.还可以根据指定的方法名称进行快速定制的持久操作(查删除)
可以生成SELECT*FROMCustomerWHEREcustName=?
//如果您希望定制语句查询,仍然提供:
//6.通过JPQL实现持久性操作(添加和删除)
@Query("FROMCustomerwherecustName=:客户名称")
ListfindCustomerByCustName(@Param("custName));
//7.通过本机SQL执行持久性操作(增删和修改)
@Query(value="select*FROMtb_customerwherecust_name=:custName",nativeQuery=true)
ListfindCustomerByCustNameBySql(@Param("custName));
}更多指定方法名称:使用:直接调用持久性方法,不依赖任何代码生成器@Autowired。
客户报告库;
//1.页面报表记录。
repository.findById(20L);
//5.指定方法名称。
repository.findBycustName("Turing");
//4.通过QueryDSL可以执行复杂的查询:它是否类似于SQL:
JPAQuerytupleJPAQuery=Factory。
.select(customer.custId,customer.custName)
.from(客户)
.where(customer.custId.eq)
.orderBy(customer.custId.desc());
//...更多关于springdatajpa课程的学习方法。
对SpringDataJPA总结和展望,SpringDataJPA使用一个词“快”,它可以迅速建立起一套。
上一篇 【图灵干货】java高级教程第二十节:LinkedList源码解析
下一篇 【图灵干货】java教程keepalived实现双机热备

文章素材均来源于网络,如有侵权,请联系管理员删除。