SSH——Hibernate學習筆記

1.  什麼是ORM

    ORMObject/Relationship Mapping):對象/關係映射

 

2. SQL語句有什麼不好?

    不同的數據庫使用的SQL語法不同。比如:PL/SQLT/SQL

 同樣的功能在不同的數據庫中有不同的實現方式。比如分頁SQL

    程序過分依賴SQL語句對程序的移植及擴展,維護帶來很大麻煩。

 

3. 什麼是Hibernate

  HibernateJava領域的一款開源的ORM框架技術。

  HibernateJDBC進行了非常輕量級的對象封裝。

 

4. 編寫Hibernate例子

 創建Hibernate的配置文件——hibernate.cfg.xml

 創建持久化類

   創建對象——關係映射文件

 通過Hibernate API編寫訪問數據庫的代碼

 導入Hibernate必須的jar---hibernate-release-4.2.4.Final\lib\required

   導入Mysqljdbc驅動--mysql-connector-java-5.1.7-bin.jar

 導入Junit4jar--junit-4.10.jar

 

5. 使用Junit進行測試

@Test:測試方法②

@Before:初始化方法①

@After:釋放資源③

 

6. hibernate.cfg.xml常用配置

 

7. Session

 session可以理解爲操作數據庫的對象。

 sessionconnection,是多對一關係,每個session都有一個與之對應的

 connection,一個connection不同時刻可以供多個session使用。

把對象保存在關係數據庫中需要調用session的各種方法,如:save()update()delete()createQuery()等。

 

8. Transaction簡介

 hibernate對數據庫的操作都是封裝在事務中的,並且默認是非自動提交的方式。所以session保存對象時,如果不開啓事務,並且手工提交事務,對象並不會真正保存在數據庫中。

 如果你想讓hibernatejdbc那樣自動提交事務,必須調用session對象的doWork()方法,獲得jdbcconnection後,設置其爲自動提交事務模式。(注意:不推薦使用

 

 

9. 如何獲取session對象

1) openSession

2) getCurrentSession

如果使用getCurrentSession需要在hibernate.cfg.xml文件進行配置:

如果是本地事務(jdbc事務)

<property name=hibernate.current_session_context_class>thread</property>

如果是全局事務(jta事務)

<property name=hibernate.current_session_context_class>jta</property>

 

 

 

 

10. openSessiongetCurrentSession的區別

 getCurrentSession在事務提交或者回滾之後自動關閉,而openSession需要你手動關閉。如果使用openSession而沒有手動關閉,多次之後導致連接池溢出。

 openSession每次創建新的session對象,getCurrentSession使用現有的session對象。

 

11. Hbm配置文件常用設置

   <hibernate-mapping

         schema=schemalName

         catalog=catalogName 

         default-cascade=cascade_style//級聯風格

         default-access=field|property|ClassName//訪問策略

         default-lazy=true|false//加載策略

         package=package/>

 

<class

     name=ClassName

     table=tableName//表明

     batch-size=N//數據條數

     where=condition//抓取數據條數

     entity-name=EntityName/>

<id//主鍵

     name=propertyName//屬性

     type=typename//數據類型

     column=column_name//映射的字段的名稱

     length=length//字段的長度

     <generator class=generatorClass/>//主鍵生成策略

 </id>

 

 

12. 單一主鍵

 assigned  java應用程序負責生成(手工賦值)。

 native    由底層數據庫自動生成標識符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。

 

 

13. 基本類型

 


 

 

14. 對象類型

 

 

    MySql不支持標準SQLCLOB類型,在Mysql中,用TEXTMEDIUMTEXTLONGTEXT類型來表示長度超過255的長文本數據。

 

15. 組建屬性

實體類中的某個屬性屬於用戶自定義的類的對象

<component name=address class=Address>

   <property name=postcode column=POSTCODE></property>

   <property name=phone column=PHONE></property>

   <property name=address column=ADDRESS></property>

</component>

 

 

16. 單表CRUD操作實例

 save

update

delete

get/load(查詢單個記錄)

 

17. getload的區別

①. 在不考慮緩存的情況下,get方法會在調用之後立即向數據庫發出sql句,返回持久化對象。

②. load方法會在調用後返回一個代理對象。該代理對象只保存了實體對象的id,直到使用對象的非主鍵屬性時纔會發出sql語句。

③. 查詢數據庫中不存在的數據時,get方法返回null

④. load方法拋出異常org.hibernate.ObjectNotFoundException

 

18. Hibernate開發流程

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章