日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
1Hibernate的基本配置

添加所需 jar 包

hibernate-distribution-3.6.10.Final 下的 hibernate.jar;

 
 
  1. \hibernate-distribution-3.6.10.Final\lib\required下的所有 jar 包。 

編寫 hibernate.cfg.xml (hibernate 配置文件) 配置 hibernate 如何連接到數(shù)據(jù)庫

 
 
  1.  
  2. PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
  3. "http://www.hibernate.org/dtd/hibernate-configuration- 3.0.dtd" > 
  4.  
  5.   
  6.   
  7.  oracle.jdbc.driver.OracleDriver 
  8.  jdbc:oracle:thin:@localhost:1521:xe 
  9.  hr 
  10.  hr 
  11.   
  12.  org.hibernate.dialect.Oracle10g Dialect 
  13.   
  14.   
  15.  true 
  16.   
  17.  
  18.  
  19.  name="hibernate.cache.use_query_cache">true 
  20.   
  21.  net.sf.ehcache.hibernate.EhCacheRegionFactory 
  22.   
  23.   
  24.  10 
  25.   
  26.  
  27.   
  28.  
  29.   
  30.  20 
  31.  thread 
  32.   
  33.  true 
  34.   
  35.   
  36.  

配置映射文件

在java實(shí)體類和數(shù)據(jù)庫表之間建立對應(yīng)關(guān)系,來簡化增刪改查操作對象(java實(shí)體類) 關(guān) 系(關(guān)系型數(shù)據(jù)庫) 映射(對應(yīng)關(guān)系) ORM(object relationship mapping)

對實(shí)體類的要求:

1. 要有無參構(gòu)造方法

2. 實(shí)體類不能加 final

3. 建議實(shí)現(xiàn) Serializable 接口(以后二級緩存會用到)

映射文件(格式為 xml):

習(xí)慣上格式為 實(shí)體類名.hbm.xml

hibernate 主鍵生成方式:

 
 
  1. increment 取 id 的***值+1 
  2. sequence 默認(rèn)找 hibernate_sequence `
  3.  如果要自定義序列名: 
  4.   
  5.  自定義序列名 
  6.   
  7. assigned 由應(yīng)用程序指定 id 
  8.  
  9. identity 例如 sqlserver, mysql 需要使用這種方式生成主鍵值 
  10.  
  11. native (會根據(jù)方言選擇是用 sequence 或是 identity) 

例:

 
 
  1. -- 數(shù)據(jù)庫 
  2. create table person 
  3. id number(10) primary key, name varchar2(10), 
  4. age number(2), 
  5. gender varchar2(4), 
  6. city varchar2(10) 
  7. ); 
 
 
  1. //實(shí)體類 
  2. public class Person { 
  3.  
  4.  private Integer id; 
  5.  
  6.  private String name; 
  7.  
  8.  private Integer age; 
  9.  
  10.  private String gender; 
  11.  
 
 
  1.  
  2.  
  3.  
  4.  
  5.  
  6.   
  7.   
  8.   
  9.   
  10.   
  11.   
  12.   
  13.   
  14.  

使用 hibernate 的 api 進(jìn)行 CRUD

session.save(實(shí)體對象); 執(zhí)行 insert 來保存數(shù)據(jù)

session.delete(實(shí)體對象); 執(zhí)行 delete 來刪除數(shù)據(jù)

要先查詢、后刪除

session.get(實(shí)體類型, 實(shí)體 id 主鍵值) ; 執(zhí)行 select 來查詢單個(gè)實(shí)體

session.update(實(shí)體對象);

在 session 打開的過程中, 對實(shí)體的修改,***事務(wù)提交時(shí),hibernate 都會將這些修改同步到數(shù)據(jù)庫,如果實(shí)體對象的數(shù)據(jù)與數(shù)據(jù)庫數(shù)據(jù)不一致,就稱此數(shù)據(jù)變”臟”了。hibernate 會進(jìn)行臟數(shù)據(jù)檢查,事務(wù)提交時(shí),如果數(shù)據(jù)變”臟”了,hibernate才會執(zhí)行 update 查詢多個(gè)實(shí)體。

session.createQuery(hql 語句).list(); 返回一個(gè) List 集合

例:

 
 
  1. import org.hibernate.SessionFactory; 
  2. import org.hibernate.cfg.Configuration; 
  3. public static void main(String[] args) { 
  4.  // 1. 讀取配置文件 
  5.  Configuration cfg = new Configuration().configure(); 
  6.  // 2. 創(chuàng)建SessionFactory 
  7.  SessionFactory sf = cfg.buildSessionFactory(); 
  8.  // 3. Session <-> Connection (類似于) 
  9.  Session session = sf.openSession(); // 打開新session, 類似 于打開一個(gè)數(shù)據(jù)庫連接 
  10.  // 4. 進(jìn)行實(shí)體類的增刪改查 
  11.  Person p = new Person(); 
  12.  p.setName("王五"); p.setAge(19); 
  13.  p.setGender("男"); 
  14.  // 開始事務(wù) 
  15.  session.beginTransaction(); 
  16.  // 參數(shù)即為實(shí)體對象 
  17.  session.save(p); 
  18.  // 提交事務(wù) rollback()回滾事務(wù) 
  19.  session.getTransaction().commit(); 
  20.  // 5. 釋放資源 
  21.  session.close(); 
  22.  sf.close(); 

掌握 HibernateUtil 的工具類

理解同一個(gè)線程要使用同一個(gè) session 對象的實(shí)現(xiàn)方式

 
 
  1. import org.hibernate.HibernateException; 
  2. import org.hibernate.Session; 
  3. import org.hibernate.SessionFactory; 
  4. import org.hibernate.cfg.Configuration; 
  5. public class HibernateUtil { 
  6.  private static Configuration cfg; 
  7.  private static SessionFactory sf; 
  8.  static { 
  9.  try { 
  10.  cfg = new Configuration().configure(); sf = cfg.buildSessionFactory(); 
  11.  } catch (HibernateException e) { 
  12.  e.printStackTrace(); 
  13.  } 
  14.  } 
  15.  private static ThreadLocal threadLocal = new ThreadLocal(); 
  16.  /** 
  17.  * 同一個(gè)線程要使用同一個(gè)session對象 
  18.  * 
  19.  * @return 
  20.  */ 
  21.  public static Session getSession() { 
  22.  Session session = threadLocal.get(); 
  23.  if (session == null) { 
  24.  // ***次調(diào)用,線程中還沒有session,這時(shí)創(chuàng)建新的session對象 
  25.  session = sf.openSession(); 
  26.  threadLocal.set(session); 
  27.  } 
  28.  return session; 
  29.  } 
  30.  public static void closeSession() { 
  31.  Session session = threadLocal.get(); 
  32.  if (session != null) { 
  33.  session.close(); // 關(guān)閉session 
  34.  threadLocal.remove(); // 并從當(dāng)前線程清除此session 
  35.  } 
  36.  } 

使用 jUnit 來進(jìn)行單元測試

它是一種單元測試工具junit類中的方法都可以作為程序入口點(diǎn), 要添加@Test注解到方法上

【本文是專欄作者張勇波的原創(chuàng)文章,轉(zhuǎn)載請通過獲取作者授權(quán)】


本文名稱:1Hibernate的基本配置
文章來源:http://www.dlmjj.cn/article/cosheso.html