一個開源的對象關係映射框架,對JDBC進行了輕量級封裝,將pojo與數據庫表創建映射關係,是一個全自動的ORM(Object Relation Mapping,對象關係映射,經過操做對象操做表)框架,能夠自動生成sql語句,自動執行。java
能夠根據映射自動建表web
HIbernate配置sql
Hibernate Configuration:Customer.hbm.xml數據庫
class標籤:創建類與表的映射關係緩存
屬性:安全
id標籤:創建類中的屬性和表中主鍵對應關係session
property標籤:普通屬性和表中字段對應關係app
Hibernate核心配置:框架
必須配置:ide
可選配置:
編寫測試類:
Configuration類:
Hibernate的配置對象,以及對它進行啓動。定位映射文檔,讀取配置,建立SessionFactory對象。
做用:加載核心配置文件,加載映射文件
SessionFactory接口:
負責初始化Hibernate,建立Session對象,用到了工廠模式。
做用:內部維護了Hibernate鏈接池和Hibernate的二級緩存(不講,通常用Redis替換)。線程安全的,一個項目建立一個對象就能夠。
配置成c3p0鏈接池(瞭解):
工具類測試:
相似鏈接對象Connection,負責執行被持久化對象的CRUD操做,是與數據庫交互的橋樑。
因爲是非線程安全對象,因此不能定義成全局的,須要定義在方法內部,不然有線程安全問題。
Session中的API:
保存:Serializable save(obj)
查詢:T get(Class c ,Serializable id) , T load(Class c ,Serializable id)
修改: 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(); } }
Hibernate中管理事務的對象。
commit()
rollback()