SpringData分析

學(xué)習(xí)ORM思想啟發(fā)


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

學(xué)習(xí)ORM思想


2.1 orm思想

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

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

2.2 hibernate框架介紹

Hibernate是一個開放源代碼的對象關(guān)系映射框架,
    它對JDBC進行了非常輕量級的對象封裝,
    它將POJO與數(shù)據(jù)庫表建立映射關(guān)系,是一個全自動的orm框架

2.3 JPA規(guī)范

jpa規(guī)范,實現(xiàn)jpa規(guī)范,內(nèi)部是由接口和抽象類組成

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

圖片1.png

JPA和Hibernate的關(guān)系就像JDBC和JDBC驅(qū)動的關(guān)系,JPA是規(guī)范,Hibernate除了作為ORM框架之外,它也是一種JPA實現(xiàn)。JPA怎么取代Hibernate呢?JDBC規(guī)范可以驅(qū)動底層數(shù)據(jù)庫嗎?答案是否定的,也就是說,如果使用JPA規(guī)范進行數(shù)據(jù)庫操作,底層需要hibernate作為其實現(xiàn)類完成數(shù)據(jù)持久化工作。

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 '客戶聯(lián)系地址',
     cust_phone varchar(64) DEFAULT NULL COMMENT '客戶聯(lián)系電話',
     PRIMARY KEY (`cust_id`)
   ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;  

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

1 創(chuàng)建maven工程 導(dǎo)入坐標(biāo)
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:事務(wù)管理的方式
                   JTA:分布式事務(wù)管理
                   RESOURCE_LOCAL:本地事務(wù)管理
   -->
   <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
       <!--jpa的實現(xiàn)方式 -->
       <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

       <!--可選配置:配置jpa實現(xiàn)方的配置信息-->
       <properties>
           <!-- 數(shù)據(jù)庫信息
               用戶名,javax.persistence.jdbc.user
               密碼,  javax.persistence.jdbc.password
               驅(qū)動,  javax.persistence.jdbc.driver
               數(shù)據(jù)庫地址   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實現(xiàn)方(hibernate)的配置信息
               顯示sql           :   false|true
               自動創(chuàng)建數(shù)據(jù)庫表    :  hibernate.hbm2ddl.auto
                       create      : 程序運行時創(chuàng)建數(shù)據(jù)庫表(如果有表,先刪除表再創(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 配置客戶實體類和表,類中屬性和表中字段映射關(guān)系
5 保存客戶信息

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

* 解決實體管理器工廠的浪費資源和耗時問題
* 通過靜態(tài)代碼塊的形式,當(dāng)程序第一次訪問此工具類時,創(chuàng)建一個公共的實體管理器工廠對象
* 第一次訪問getEntityManager方法:經(jīng)過靜態(tài)代碼塊創(chuàng)建一個factory對象,再調(diào)用方法創(chuàng)建一個EntityManager對象
* 第二次方法getEntityManager方法:直接通過一個已經(jīng)創(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)建事務(wù)對象,開啟事務(wù)
           EntityManager對象:實體類管理器
               beginTransaction : 創(chuàng)建事務(wù)對象
               presist : 保存
               merge  : 更新
               remove : 刪除
               find/getRefrence : 根據(jù)id查詢
               
           Transaction 對象 : 事務(wù)
               begin:開啟事務(wù)
               commit:提交事務(wù)
               rollback:回滾
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容