最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

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

2021-12-01 14:42 作者:樓蘭java寶藏圈  | 我要投稿

不知道大家在整合SpringBoot+MyBatis有沒有想過, 為什么SpringBoot不提供MyBatis的官方Starter呢?你以為是為了和SpringDataJPA競爭?

?不不不
首先Hibernate才是正統(tǒng)的JPA血脈!JPA(Java Persistence API )是JDK欽點的ORM規(guī)范! 那SpringBoot要做ORM框架肯定跟著JDK玩,畢竟JDK才是整個java的標準,所以SpringBoot會選擇Hibernate作為SpringDataJPA的ORM實現框架也理所當然。 MyBatis?根本算不上ORM框架,不過是一個封裝了JDBC的持久化框架!SpringBoot我都不愿意跟你玩,你對標的應該是我的JDBCTemplate,我都有一個封裝了JDBC的組件干嘛還跟你玩,你要跟我玩自己寫Starter來適配我! 這才是真正的原因!


我知道你看完還是無法打動你,我們來比較一下Hibernate VS MyBatis:

Hibernate VS MyBatis

Hibernate 是一個對象關系映射框架 (ORM),它將 Java 類映射到數據庫表。 MyBatis 是一個持久化框架——不是 ORM。它將 SQL 語句映射到 Java 方法。

為什么國人更偏愛MyBatis

總結原因: 1.你連JPA、Hibernate、ORM 都搞不清楚,還咋用Hibernate?Hibernate學習和使用門檻比MyBatis高 2.MyBatis簡單易學上手快—符合培訓機構的教學標準。培訓機構都教MyBatis能不流行嘛! 3.中國特色的業(yè)務需求更復雜,使用MyBatis實現簡單快捷。Hibernate要實復雜需求現難度更大! 4.為了無條件實現領導的需求。需要面向領導編程。

  1. 隨著SSH的落幕,SSM的帶動下。時代變遷\技術變更\大眾選擇

ps:那說來說去感覺還是應該MyBatis更好用啊..Hibernate還是被時代被社會環(huán)境拋棄了啊..雖然它確實有用又能怎么樣呢?但是hibernate在實現一些需求單一的應用還是有它的優(yōu)勢的:相較傳統(tǒng)的Mybatis來說,持久層代碼碼少了60%,當然大部分都是體現在xml文件上,你無需花精力去維護你SQL語句,大大簡化了持久層的開發(fā)、提升了開發(fā)效率。所以他們可以用于不同場景:

不同使用場景

Hibernate用于
● 常規(guī) CRUD功能、偏簡單的業(yè)務需求 。
● 編程方式由對象模型驅動—CodeFisrt。
● 有更換數據庫的需求。

MyBatis 用于
● 編程方式由數據庫驅動—DBFisrt。
● 對SQL語句有極致的優(yōu)化需求。
● 對復雜的搜索查詢,動態(tài)條件查詢支持更舒服。

哦~~看樣子他們各有各的好處,難不成我Hibernate和MyBatis混用?確實有很多應用這么干,但是我不建議在一個應用中混用,增加了應用架構的復雜度,但是如果一個應用可以拆成互不相干的小應用呢?各自小應用可以根據自己的業(yè)務復雜度選擇自己所需的技術呢?

所以迎來Hibernate的又一春來了—— 微服務下結合SpringDataJpa

微服務架構下的關鍵就是:“拆!”,代碼和數據庫都會隨之拆分,單個服務的業(yè)務復雜度也就降低了,隨之SQL復雜度也就降低了,并且我每個服務可以自由選擇自己的技術互不干涉,SpringDataJpa的用武之地毋庸置疑??!

使用SpringDataJPA

SpringBoot下使用SpringDataJPA不要太方便:

1.只需加入對應springdatajpa依賴

<dependency> ? ?

????<groupId>org.springframework.boot</groupId> ? ?

????<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

2.添加Repository接口

結合dao層的Repository內置接口即可快速的CRUD,多種持久化方式供你自由選擇,以下示例中7種:

public interface CustomerRepository extends PagingAndSortingRepository<Customer,Long> ??

????//1.實現分頁排序和CRUD ?// 需要實現動態(tài)條件也有很多內置接口可選擇, QueryByExampleExecutor<Customer> ?// 2.實現動態(tài)條件:快速精確匹配(查), JpaSpecificationExecutor<Customer> // 3.實現動態(tài)條件:Specification(查), QuerydslPredicateExecutor<Customer> ?// 4.實現動態(tài)條件:Querydsl(查){ ?

????// 5.還可以根據規(guī)定方法名進行快速定制持久化操作(查刪)

????List<Customer> findByCustName(String custName);

????// 即可生成SELECT * FROM Customer WHERE custName=? ? ? ?


????// 如果你想自定義語句查詢,依然提供: ?

????// 6.通過JPQL進行持久化操作(增刪改查) ?

????@Query("FROM Customer where custName=:custName ") ?

????List<Customer> findCustomerByCustName(@Param("custName") String custName); ?

????// 7.通過原生SQL進行持久化操作(增刪改查) ?

????@Query(value="select * FROM tb_customer where cust_name=:custName ",nativeQuery = true) ?

????List<Customer> findCustomerByCustNameBySql(@Param("custName") String custName); }

第5種更多規(guī)定方法名對照表:?

使用:

直接調用持久化方法即可、無需依賴任何代碼生成器

@Autowired

CustomerRepository repository;

// 1.PagingAndSortingRepositoryrepository.findById(20L);

// 5.規(guī)定方法名repository.findByCustName("圖靈");

// 4.通過QueryDSL可以進行復雜查詢: 是不是跟SQL很像:

JPAQuery<Tuple> tupleJPAQuery = factory

?.select(customer.custId, customer.custName)

?.from(customer)

?.where(customer.custId.eq(1L))

?.orderBy(customer.custId.desc());

?? ?// ...更多方式可以學習springdatajpa課程

總結和展望

SpringDataJPA使用起來的感受就是一個字 “快” ,它能快速的搭建起一個持久層,也不用像Mybatis一樣太多的關心SQL。 其實在互聯網項目中涉及到實時直接操作數據的場景會越來越少, 大多數都會通過緩存或其他NoSql存儲(ES、MongoDB)、定時任務、MQ等技術 來為數據庫減壓。所以我覺得以后數據庫的運用就應該是簡單直接的。 所以推薦簡單業(yè)務的應用和微服務架構下都可以采用SpringDataJpa,而MyBatis的則為實現那些復雜的ERP\OA等各種系統(tǒng)、為了應付領導各種復雜的需求才有它的用武之地。


Hibernate淘汰了?只是你不會用而已!的評論 (共 條)

分享到微博請遵守國家法律
铜山县| 南陵县| 沁水县| 永泰县| 榆林市| 富锦市| 六盘水市| 绥江县| 阿克苏市| 澳门| 阳朔县| 福安市| 玉山县| 乃东县| 洱源县| 吉首市| 昌宁县| 湘潭县| 保靖县| 平阴县| 洪湖市| 玉溪市| 连云港市| 邛崃市| 静安区| 安徽省| 嘉善县| 宁乡县| 阿拉尔市| 拜泉县| 西乌珠穆沁旗| 贵港市| 潮安县| 新民市| 简阳市| 拉孜县| 依安县| 绥棱县| 军事| 社旗县| 昌邑市|