SpringData分析

學習ORM思想啟發(fā)


04-orm思想的概述[00_00_02][20210225-092143].png
  • 1 建立實體類與表中的關系
  • 2 建立實體類中屬性和表中字段關系

學習ORM思想


2.1 orm思想

主要目的:操作實體類就相當于操作數據庫表
建立兩個映射關系:
    實體類和表的映射關系
    實體類中屬性和表中字段的映射關系
不再重點關注:sql語句
實現了ORM思想的框架:mybatis,hibernas'da'fte

hibernate
Hibernate是一個開放源代碼的對象關系映射框架杂曲,它對JDBC進行了非常輕量級的對象封裝,
    它將POJO與數據庫表建立映射關系,是一個全自動的orm框架,hibernate可以自動生成SQL語句辐烂,
    自動執(zhí)行棍现,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。

2.2 hibernate框架介紹

Hibernate是一個開放源代碼的對象關系映射框架五慈,
    它對JDBC進行了非常輕量級的對象封裝,
    它將POJO與數據庫表建立映射關系主穗,是一個全自動的orm框架

2.3 JPA規(guī)范

jpa規(guī)范泻拦,實現jpa規(guī)范,內部是由接口和抽象類組成

附加 PA與hibernate的關系
JPA規(guī)范本質上就是一種ORM規(guī)范忽媒,注意不是ORM框架——因為JPA并未提供ORM實現争拐,它只是制訂了一些規(guī)范,提供了一些編程的API接口晦雨,但具體實現則由服務廠商來提供實現架曹。

圖片1.png

JPA和Hibernate的關系就像JDBC和JDBC驅動的關系,JPA是規(guī)范闹瞧,Hibernate除了作為ORM框架之外绑雄,它也是一種JPA實現。JPA怎么取代Hibernate呢奥邮?JDBC規(guī)范可以驅動底層數據庫嗎万牺?答案是否定的,也就是說洽腺,如果使用JPA規(guī)范進行數據庫操作脚粟,底層需要hibernate作為其實現類完成數據持久化工作。

2.4 jpa的基本操作

2.2.1 創(chuàng)建客戶表 (客戶是一家公司)
     cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',
     cust_name varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)',
     cust_source varchar(32) DEFAULT NULL COMMENT '客戶信息來源',
     cust_industry varchar(32) DEFAULT NULL COMMENT '客戶所屬行業(yè)',
     cust_level varchar(32) DEFAULT NULL COMMENT '客戶級別',
     cust_address varchar(128) DEFAULT NULL COMMENT '客戶聯系地址',
     cust_phone varchar(64) DEFAULT NULL COMMENT '客戶聯系電話',
     PRIMARY KEY (`cust_id`)
   ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;  

2.2.2 環(huán)境搭建過程

1 創(chuàng)建maven工程 導入坐標
2 需要配置jpa核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
   <!--需要配置persistence-unit節(jié)點
       持久化單元:
           name:持久化單元名稱
           transaction-type:事務管理的方式
                   JTA:分布式事務管理
                   RESOURCE_LOCAL:本地事務管理
   -->
   <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
       <!--jpa的實現方式 -->
       <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

       <!--可選配置:配置jpa實現方的配置信息-->
       <properties>
           <!-- 數據庫信息
               用戶名蘸朋,javax.persistence.jdbc.user
               密碼核无,  javax.persistence.jdbc.password
               驅動,  javax.persistence.jdbc.driver
               數據庫地址   javax.persistence.jdbc.url
           -->
           <property name="javax.persistence.jdbc.user" value="root"/>
           <property name="javax.persistence.jdbc.password" value="root"/>
           <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
           <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///springssm"/>

           <!--配置jpa實現方(hibernate)的配置信息
               顯示sql           :   false|true
               自動創(chuàng)建數據庫表    :  hibernate.hbm2ddl.auto
                       create      : 程序運行時創(chuàng)建數據庫表(如果有表藕坯,先刪除表再創(chuàng)建)
                       update      :程序運行時創(chuàng)建表(如果有表团南,不會創(chuàng)建表)
                       none        :不會創(chuàng)建表
           -->
           <property name="hibernate.show_sql" value="true" />
           <property name="hibernate.hbm2ddl.auto" value="update" />
       </properties>
   </persistence-unit>
</persistence>

3 編寫客戶實體類
4 配置客戶實體類和表噪沙,類中屬性和表中字段映射關系
5 保存客戶信息

1.加載配置文件創(chuàng)建實體管理器工廠
           Persisitence:靜態(tài)方法(根據持久化單元名稱創(chuàng)建實體管理器工廠)
               createEntityMnagerFactory(持久化單元名稱)
           作用:創(chuàng)建實體管理器工廠
           
2.根據實體管理器工廠,創(chuàng)建實體管理器
           EntityManagerFactory :獲取EntityManager對象
           方法:createEntityManager
           * 內部維護的很多的內容
               內部維護了數據庫信息已慢,
               維護了緩存信息
               維護了所有的實體管理器對象
               再創(chuàng)建EntityManagerFactory的過程中會根據配置創(chuàng)建數據庫表
           * EntityManagerFactory的創(chuàng)建過程比較浪費資源
           特點:線程安全的對象
               多個線程訪問同一個EntityManagerFactory不會有線程安全問題
           * 如何解決EntityManagerFactory的創(chuàng)建過程浪費資源(耗時)的問題曲聂?
           思路:創(chuàng)建一個公共的EntityManagerFactory的對象
           * 靜態(tài)代碼塊的形式創(chuàng)建EntityManagerFactory

* 解決實體管理器工廠的浪費資源和耗時問題
* 通過靜態(tài)代碼塊的形式,當程序第一次訪問此工具類時佑惠,創(chuàng)建一個公共的實體管理器工廠對象
* 第一次訪問getEntityManager方法:經過靜態(tài)代碼塊創(chuàng)建一個factory對象朋腋,再調用方法創(chuàng)建一個EntityManager對象
* 第二次方法getEntityManager方法:直接通過一個已經創(chuàng)建好的factory對象,創(chuàng)建EntityManager對象

public class JpaUtils {

   private static EntityManagerFactory factory;

   static  {
       //1.加載配置文件膜楷,創(chuàng)建entityManagerFactory
       factory = Persistence.createEntityManagerFactory("myJpa");
   }

   /**
    * 獲取EntityManager對象
    */
   public static EntityManager getEntityManager() {
      return factory.createEntityManager();
   }
}



           
3.創(chuàng)建事務對象旭咽,開啟事務
           EntityManager對象:實體類管理器
               beginTransaction : 創(chuàng)建事務對象
               presist : 保存
               merge  : 更新
               remove : 刪除
               find/getRefrence : 根據id查詢
               
           Transaction 對象 : 事務
               begin:開啟事務
               commit:提交事務
               rollback:回滾
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赌厅,隨后出現的幾起案子穷绵,更是在濱河造成了極大的恐慌,老刑警劉巖特愿,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仲墨,死亡現場離奇詭異,居然都是意外死亡揍障,警方通過查閱死者的電腦和手機目养,發(fā)現死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毒嫡,“玉大人癌蚁,你說我怎么就攤上這事《祷” “怎么了努释?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咬摇。 經常有香客問我伐蒂,道長,這世上最難降的妖魔是什么肛鹏? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任饿自,我火速辦了婚禮,結果婚禮上龄坪,老公的妹妹穿的比我還像新娘。我一直安慰自己复唤,他們只是感情好健田,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佛纫,像睡著了一般妓局。 火紅的嫁衣襯著肌膚如雪总放。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天好爬,我揣著相機與錄音局雄,去河邊找鬼。 笑死存炮,一個胖子當著我的面吹牛炬搭,可吹牛的內容都是我干的。 我是一名探鬼主播穆桂,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宫盔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了享完?” 一聲冷哼從身側響起灼芭,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎般又,沒想到半個月后彼绷,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡茴迁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年寄悯,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笋熬。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡热某,死狀恐怖,靈堂內的尸體忽然破棺而出胳螟,到底是詐尸還是另有隱情昔馋,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布糖耸,位于F島的核電站秘遏,受9級特大地震影響,放射性物質發(fā)生泄漏嘉竟。R本人自食惡果不足惜邦危,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舍扰。 院中可真熱鬧倦蚪,春花似錦、人聲如沸边苹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽个束。三九已至慕购,卻和暖如春聊疲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沪悲。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工获洲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人殿如。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓贡珊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親握截。 傳聞我的和親對象是個殘疾皇子飞崖,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容

  • 1、ORM思想 主要目的:操作實體類就相當于操作數據庫表 建立兩個映射關系:1)實體類和表的映射關系谨胞;2)實體類中...
    魔笛使者閱讀 278評論 0 0
  • 本文中我們介紹并比較兩種最流行的開源持久框架:iBATIS和Hibernate胯努,我們還會討論到Java Persi...
    大同若魚閱讀 4,310評論 4 27
  • 本文章只是自己在學習中記的筆記(可能有點亂)牢裳,只提供參考。如有錯誤請指出 什么是jpa JPA (Java Per...
    沃林閱讀 324評論 0 0
  • 本文轉自Java 最常見 200+ 面試題全解析:面試必備(轉載) 序言 在本篇文章開始之前叶沛,我想先來回答一個問題...
    林偉成閱讀 1,199評論 0 3
  • 推薦指數: 6.0 書籍主旨關鍵詞:特權蒲讯、焦點、注意力灰署、語言聯想判帮、情景聯想 觀點: 1.統(tǒng)計學現在叫數據分析,社會...
    Jenaral閱讀 5,721評論 0 5