Hibernate核心API
(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