一 Hibernate入門

  • Hibernate環境搭建

  • Hibernate的API

  • Hibernate的CRUD

EE三層結構:

  • web層      
  • 業務邏輯層   
  • 持久層         jdbc,DBUTils,Hibernate 

 

Hibernate簡介:

一個開源的對象關係映射框架,對JDBC進行了輕量級封裝,將pojo與數據庫表創建映射關係,是一個全自動的ORM(Object Relation  Mapping,對象關係映射,經過操做對象操做表)框架,能夠自動生成sql語句,自動執行。java

 能夠根據映射自動建表web

HIbernate配置sql

Hibernate Configuration:Customer.hbm.xml數據庫

 

 

class標籤:創建類與表的映射關係緩存

屬性:安全

  • name: 類的全路徑
  • table:表名(類名和表名一致,table可省略)
  • catalog:數據庫名,可不填

id標籤:創建類中的屬性和表中主鍵對應關係session

  • name:類中屬性
  • column:表中字段(類中屬性和表中字段一致,可省略該項)
  • length:長度
  • type:類型

property標籤:普通屬性和表中字段對應關係app

  • name:類中屬性
  • column:表中字段
  • length:長度
  • type:類型
  • not-null:設置非空
  • unique:設置惟一,默認false

Hibernate核心配置:框架

  • 屬性文件的方式  hibernate.properties(手動編寫代碼加載映射文件)
  • xml文件的方式    hibernate.cfg.xml  

 

必須配置:ide

  • 鏈接數據庫的基本參數:
    • 驅動類
    • url
    • 用戶名
    • 密碼
  • 方言

可選配置:

  • 顯示sql:<property name="hibernate.show_sql">true</property>
  • 格式化sql:<property name="hibernate.format_sql">true</property>
  • 自動建表:<property name="hibernate.hbm2ddl.auto">update</property>
      • none:不使用Hibernate的自動建表 
      • create:若是數據庫已經有表,會刪除原有表從新闖進啊
      • create-drop:刪除原有表建立新表,使用完後刪除表。
      • update:使用原來的表,在原來的表的上更新數據。若是沒有表,建立新表(更新表結構)。  
      • validate: 若是沒有表,不會建立表。只會用數據庫中原有表(校驗數據庫表結構,自帶校驗功能)
  • 映射文件的引入:<mapping resource="com/Hidemo1/Customer.hbm.xml"/>

 

編寫測試類:

 

 

Hibernate的核心API:

Configuration類:

Hibernate的配置對象,以及對它進行啓動。定位映射文檔,讀取配置,建立SessionFactory對象。

做用:加載核心配置文件,加載映射文件

SessionFactory接口:

負責初始化Hibernate,建立Session對象,用到了工廠模式。

做用:內部維護了Hibernate鏈接池和Hibernate的二級緩存(不講,通常用Redis替換)。線程安全的,一個項目建立一個對象就能夠。

配置成c3p0鏈接池(瞭解):

 

抽取工具類:

工具類測試:

 

Hibernate的核心對象:Session

相似鏈接對象Connection,負責執行被持久化對象的CRUD操做,是與數據庫交互的橋樑。

因爲是非線程安全對象,因此不能定義成全局的,須要定義在方法內部,不然有線程安全問題。

Session中的API:

保存:Serializable save(obj)

查詢:T get(Class c ,Serializable id)  ,  T load(Class c ,Serializable id)  

      • get採用的是當即加載,執行到這一行代碼的時候就立刻發送sql語句查詢。
      • get查詢後返回的是對象自己。
      • get查詢找不到對象返回空
      • load採用的是延遲加載(懶加載),執行到這行代碼的時候,不會發送sql語句,當使用到這個對象的時候纔會發送sql語句.
      • load返回的是代理對象(非java動態代理,而是javasist技術產生的代理對象)
      • load查詢找不到對象返回ObjectNotFoundException

 

修改: void update(obj)

//直接建立對象進行修改,沒有被set的屬性會被置爲null,不推薦              

 //先查詢再修改(推薦方式)

刪除:void delete(obj)

//直接建立對象進行刪除

//先查詢再刪除(推薦方式,Hibernate下面有個級聯刪除,前提 是先查詢再刪除)

保存或更新:void saveOrUpdate(obj)

查詢全部:

//接收HQL,Hibernate Query Language 面向對象的查詢語言
Query query = session.createQuery("from Customer");

//接收sql
SQLQuery query2 = session.createSQLQuery("select * from cst_customer");

 

代碼:

package com.Hidemo1;

import java.util.Arrays;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import com.HiUtils.HibernateUtils;
/**
 * Hibernate入門
 *
 */
public class HibernateDemo1 {

   @Test
   //保存客戶的需求
   public void demo1(){
       //1 加載核心配置文件
       Configuration configuration = new Configuration().configure();
       //2 建立一個SessionFactory對象,至關於JDBC鏈接池
       SessionFactory sessionFactory = configuration.buildSessionFactory();
       //3 經過SessionFactory獲取到Session對象:相似於JDBC重Connection
       Session session = sessionFactory.openSession();
       //4 手動開啓事務
       Transaction transaction = session.beginTransaction();
       //5 編寫代碼
       Customer customer = new Customer();
       customer.setCust_name("王可可");
       session.save(customer);
       //6 事務提交
       transaction.commit();
       //7資源釋放
       session.close();
   }
   
   @Test
   /*
    *Hibernate工具類測試
    */
   public void demo2(){
       Session session = HibernateUtils.openSession();      
       Transaction tx = session.beginTransaction();
       Customer customer = new Customer();
       customer.setCust_name("工具類測試");
       session.save(customer);
       tx.commit();
       session.close();
   }
   
   @Test
   /*
    * 查詢操做
    */
   public void demo3(){
       Session session = HibernateUtils.openSession();
       Transaction transaction = session.beginTransaction();
       //使用get方法
//       Customer customer = session.get(Customer.class, 1l);
       //使用load方法查詢
       Customer customer = session.load(Customer.class, 1l);
       System.out.println(customer);
       
       transaction.commit();
       session.close();
   }
@Test
/* * 修改操做 */ public void demo4(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //直接建立對象進行修改,沒有被set的屬性會被置爲null,不推薦 /*Customer customer = new Customer(); customer.setCust_id(1l); customer.setCust_name("wangkeke"); session.update(customer);*/ //先查詢再修改(推薦方式) Customer customer = session.get(Customer.class, 1l); customer.setCust_name("王改改"); session.update(customer); transaction.commit(); session.close(); }
@Test
/* * 刪除操做 */ public void demo5(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //直接建立對象進行刪除,不推薦 /* Customer customer = new Customer(); customer.setCust_id(1l); session.delete(customer);*/ //先查詢再刪除(推薦方式) Customer customer = session.get(Customer.class, 2l); session.delete(customer); transaction.commit(); session.close(); }
@Test
/* * 保存或者更新 */ public void demo6(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer = new Customer(); customer.setCust_id(3l); customer.setCust_name("王改改"); session.saveOrUpdate(customer); transaction.commit(); session.close(); }
@Test
/* * 查詢全部 */ public void demo7(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //接收HQL,Hibernate Query Language 面向對象的查詢語言 Query query = session.createQuery("from Customer"); List<Customer> list = query.list(); for (Customer customer : list) { System.out.println(customer); } //接收sql SQLQuery query2 = session.createSQLQuery("select * from cst_customer"); List<Object[]> list2 = query2.list(); for (Object[] objects : list2) { System.out.println(Arrays.toString(objects)); } transaction.commit(); session.close(); } }

 

 Transaction對象:

Hibernate中管理事務的對象。

commit()

rollback()

相關文章
相關標籤/搜索