自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

1 Hibernate的基本配置

開(kāi)發(fā) 開(kāi)發(fā)工具
博主發(fā)表的文章,有的是自己原創(chuàng),有的是這些年本人從網(wǎng)上積累的,方便大家學(xué)習(xí)。

 [[178963]]

添加所需 jar 包

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

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

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

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE hibernate-configuration 
  3. PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
  4. "http://www.hibernate.org/dtd/hibernate-configuration- 3.0.dtd" > 
  5. <hibernate-configuration> 
  6.  <session-factory> 
  7.  <!-- 配置如何連接數(shù)據(jù)庫(kù) --> 
  8.  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
  9.  <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property> 
  10.  <property name="hibernate.connection.username">hr</property> 
  11.  <property name="hibernate.connection.password">hr</property> 
  12.  <!-- hibernate支持多種數(shù)據(jù)庫(kù), 需要選擇一種方言 --> 
  13.  <property name="hibernate.dialect">org.hibernate.dialect.Oracle10g Dialect</property> 
  14.  <!-- 二級(jí)緩存配置 --> 
  15.  <!-- 啟用二級(jí)緩存 --> 
  16.  <property name="hibernate.cache.use_second_level_cache">true</property> 
  17.  <!-- 啟用hql查詢(xún)緩存 --> 
  18.  <property 
  19.  
  20.  name="hibernate.cache.use_query_cache">true</property> 
  21.  <!-- 選擇緩存實(shí)現(xiàn)類(lèi) --> 
  22.  <property name="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</property> 
  23.  <!-- 跟連接池相關(guān)的配置 --> 
  24.  <!-- 連接的***個(gè)數(shù) --> 
  25.  <property name="hibernate.c3p0.max_size">10</property> 
  26.  <!-- 每次創(chuàng)建連接的增長(zhǎng)數(shù) --> 
  27.  <property name="hibernate.c3p0.acquire_increment">2</property> 
  28.  <!-- 連接最小保留個(gè)數(shù) --> 
  29.  <property name="hibernate.c3p0.min_size">2</property> 
  30.  <!-- 獲取連接的超時(shí)時(shí)間 --> 
  31.  <property name="hibernate.c3p0.timeout">20</property> 
  32.  <property name="current_session_context_class">thread</property> 
  33.  <!-- 加入sql監(jiān)控 --> 
  34.  <property name="hibernate.show_sql">true</property> 
  35.  <mapping resource="entity/User.hbm.xml" /> 
  36.  </session-factory> 
  37. </hibernate-configuration> 

配置映射文件

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

對(duì)實(shí)體類(lèi)的要求:

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

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

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

映射文件(格式為 xml):

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

hibernate 主鍵生成方式:

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

例:

  1. -- 數(shù)據(jù)庫(kù) 
  2. create table person 
  3. id number(10) primary keyname varchar2(10), 
  4. age number(2), 
  5. gender varchar2(4), 
  6. city varchar2(10) 
  7. ); 
  1. //實(shí)體類(lèi) 
  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. <!--person.hbm.xml(映射文件)--> 
  2. <?xml version="1.0" encoding="UTF-8"?> 
  3. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 
  4.  
  5. <hibernate-mapping package="com.zyb.entity"
  6.  <class name="Person" table="person"
  7.  <id name="id"
  8.  <generator class="increment"/> 
  9.  </id> 
  10.  <property name="name" /> 
  11.  <property name="age" /> 
  12.  <property name="gender" /> 
  13.  </class> 
  14. </hibernate-mapping> 

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

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

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

要先查詢(xún)、后刪除

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

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

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

session.createQuery(hql 語(yǔ)句).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 (類(lèi)似于) 
  9.  Session session = sf.openSession(); // 打開(kāi)新session, 類(lèi)似 于打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接 
  10.  // 4. 進(jìn)行實(shí)體類(lèi)的增刪改查 
  11.  Person p = new Person(); 
  12.  p.setName("王五"); p.setAge(19); 
  13.  p.setGender("男"); 
  14.  // 開(kāi)始事務(wù) 
  15.  session.beginTransaction(); 
  16.  // 參數(shù)即為實(shí)體對(duì)象 
  17.  session.save(p); 
  18.  // 提交事務(wù) rollback()回滾事務(wù) 
  19.  session.getTransaction().commit(); 
  20.  // 5. 釋放資源 
  21.  session.close(); 
  22.  sf.close(); 

掌握 HibernateUtil 的工具類(lèi)

理解同一個(gè)線(xiàn)程要使用同一個(gè) session 對(duì)象的實(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<Session> threadLocal = new ThreadLocal<Session>(); 
  16.  /** 
  17.  * 同一個(gè)線(xiàn)程要使用同一個(gè)session對(duì)象 
  18.  * 
  19.  * @return 
  20.  */ 
  21.  public static Session getSession() { 
  22.  Session session = threadLocal.get(); 
  23.  if (session == null) { 
  24.  // ***次調(diào)用,線(xiàn)程中還沒(méi)有session,這時(shí)創(chuàng)建新的session對(duì)象 
  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)前線(xiàn)程清除此session 
  35.  } 
  36.  } 

使用 jUnit 來(lái)進(jìn)行單元測(cè)試

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

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

責(zé)任編輯:武曉燕 來(lái)源: 上下求索的Z先生博客
相關(guān)推薦

2012-03-19 16:27:05

JavaHibernate

2009-06-12 15:13:12

Hibernate學(xué)習(xí)

2009-06-30 16:44:10

Criteria基本查

2009-09-21 17:46:25

Hibernate數(shù)據(jù)

2009-06-29 08:50:20

Hibernate主鍵

2012-02-06 13:52:32

HibernateJava

2012-02-03 10:54:50

HibernateJava

2009-06-17 09:59:46

Hibernate 連

2009-09-24 15:03:30

Hibernate配置

2009-09-22 10:23:15

Hibernate配置

2009-09-23 14:00:07

Hibernate連接

2009-02-16 09:20:39

基本定則OR映射Hibernate

2009-09-22 15:04:37

Hibernate M

2009-09-27 14:24:10

Hibernate配置

2009-09-25 10:49:25

Hibernate加載

2009-09-22 16:04:50

Hibernate連接

2009-09-22 14:44:18

Hibernate.c

2009-09-29 15:52:26

Hibernate X

2009-09-29 17:29:43

Hibernate S

2009-09-27 13:25:22

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)