1. 程式人生 > >Hibernate核心API

Hibernate核心API

tran 語言 過期 custom onf list() 二級緩存 就會 可用

(1)Configuration:Hibernate的配置對象:

Configuration類的作用是對Hibernate進行配置,以及對它進行啟動。在Hibernate的啟動過程中,Configuration類的實例首先定位映射文檔的位置,讀取這些配置,然後創建一個SessionFactory對象。雖然Configuration類在整個Hibernate項目中只扮演著一個很小的角色,但它是啟動Hibernate時所遇到的第一個對象。

作用:  

  加載核心配置文件。

    1.hibernate.properties

Configuration cfg = new Configuration().configure();

    2.hibernate.cfg.xml

Configuration cfg = new Configuration().configure();

  加載映射文件:

//手動加載映射文件:
configuration.addResource("com/hibernate/demo1/Customer.hbm.xml");

(2).SessionFactory:Session工廠

SessionFactory內部維護了Hibernate的連接池和HIbernate的二級緩存。是線程安全的對象。一個項目創建一個對象即可。

(了解)配置c3p0連接池:

<!-- 配置C3P0連接池 
--> <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <!--在連接池中可用的數據庫連接的最少數目 --> <property name="c3p0.min_size">5</property> <!--在連接池中所有數據庫連接的最大數目 --> <property name="c3p0.max_size"
>20</property> <!--設定數據庫連接的過期時間,以秒為單位, 如果連接池中的某個數據庫連接處於空閑狀態的時間超過了timeout時間,就會從連接池中清除 --> <property name="c3p0.timeout">120</property> <!--每3000秒檢查所有連接池中的空閑連接 以秒為單位--> <property name="c3p0.idle_test_period">3000</property>

抽取工具類:

為了簡化初始化session工廠。

public class HibernateUtils {

    public static final Configuration cfg;
    public static final SessionFactory sf;
    
    static{
        cfg = new Configuration().configure();
        sf = cfg.buildSessionFactory();
    }
    
    public static Session openSession(){
        return sf.openSession();
    }
}

(3)Session:類似Connection對象是連接對象

Session代表的是Hibernate與數據庫的連接對象。非線程安全的。是與數據庫交互的橋梁。

Session中的API:

  保存方法:

    Serializable save(Object obj);

  查詢方法:

    T get(Class c,Serializable id);

    T load(Class c,Serializable id);

get和load方法的區別?

        //使用get方法查詢
        Customer customer = session.get(Customer.class, 2l);
        System.out.println(customer);

        //使用load方法查詢
        Customer customer = session.load(Customer.class, 1l);
        System.out.println(customer.getCust_id());    

get方法和load方法的區別:
get方法:

  • 采用的是立即加載,執行到這行代碼的時候就馬上發送SQL語句去查詢。
  • 查詢後返回的是真實對象本身
  • 查詢一個找不到的對象的時候,返回null。

load方法:

  • 采用的是延遲加載,也稱為lazy懶加載,執行到這行代碼的時候,不會發送SQL語句,當真正使用這個對象的時候才會發送SQL語句。
  • 查詢後返回的是代理對象。javaassist-3.18.1-GA.jar 利用javassist技術產生的代理。
  • 查詢一個找不到的對象的時候,返回ObjectNotFoundException。

  刪除方法:

    void delete(Object obj);

@Test
    public void demo04() {
        //刪除
        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, 1l);
        session.delete(customer);

        transaction.commit();
        session.close();
    }

  保存和更新:

    void saveOrUpdate(Object obj);

@Test
    public void demo05() {
        //保存或更新
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        Customer customer = new Customer();
        customer.setCust_name("瓜皮");
        session.saveOrUpdate(customer);

        transaction.commit();
        session.close();
    }

  查詢數據庫所有:

@Test
    public void demo06() {
        //查詢所有
        Session session = HibernateUtils.openSession();
        Transaction transaction = session.beginTransaction();

        //接收HQL:Hibernate Query Language 面向對象的查詢語言
        Query query = session.createQuery("from Customer");
        List<Customer> customerList = query.list();
        for (Customer customer : customerList) {
            System.out.println(customer);
        }

        //接收SQL
        session.createSQLQuery("select * from cst_customer");
        List<Object[]> objectList = query.list();
        for (Object[] customer : objectList) {
            System.out.println(Arrays.toString(customer));
        }

        transaction.commit();
        session.close();
    }

Hibernate核心API