国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

學習Hibernate in Action讀書筆記

2019-11-18 11:50:05
字體:
來源:轉載
供稿:網友

  讓我們還是以這個經久不衰的例子"Hello World"開始:)
  
  1.Message.java: 一個簡單的持久類
  package hello;
  
  public class Message {
  
  PRivate Long id;  //說明
  
  private String text;
  
   private Message nextMessage;
  
   private Message() {}
  
  public Message(String text) {
  
  this.text = text;
  
  }
  
  public Long getId() {
  
  return id;
  
  }
  
  private void setId(Long id) {
  
  this.id = id;
  
  }
  
  public String getText() {
  
  return text;
  
  }
  
  public void setText(String text) {
  
  this.text = text;
  
  }
  
  public Message getNextMessage() {
  
  return nextMessage;
  
  }
  
  public void setNextMessage(Message nextMessage) {
  
  this.nextMessage = nextMessage;
  
  }
  
  }
  
  說明: ID標識符 (identifier) ,它答應應用去訪問數據庫以一個唯一的標識,這個標識也就是持久類的主鍵值。假如一個Message對象有兩個實例,它們擁有同一個標識,那么代表他們訪問的是數據庫的同一個數據。在這里我們選擇了Long做這個標識的數據類型,但是這不是必須的。因為Hibernate答應這個identifier為任何的數據類型。
  
  2. 保存數據信息到數據庫:
  session session = getSessionFactory().openSession();
  
  Transaction tx = session.beginTransaction();
  
  Message message = new Message("Hello World");
  
  session.save(message);
  
  tx.commit();
  
  session.close();
  
  在這段代碼中,我們引用了Hibernate的Session和Transaction接口。這段代碼的執行,就似乎我們做了下面這段SQL所做的事:
  
  insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
  
  values (1, 'Hello World', null)
  
  注:這個例子中,我們假設數據中已經存在MESSAGES這張表了。
  
  3.從數據庫中讀出信息并打印它們
  Session newSession = getSessionFactory().openSession();
  
  Transaction newTransaction = newSession.beginTransaction();
  
  List messages =
  
  newSession.find("from Message as m order by m.text asc");
  
  System.out.println( messages.size() + " message(s) found:" );
  
  for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
  
  Message message = (Message) iter.next();
  
  System.out.println( message.getText() );
  
  }
  
  newTransaction.commit();
  
  newSession.close();
  
  這段代碼中,大家看到了“from Message as m order by m.text asc”,這是Hibernate自帶的面向對象查詢語言Hibernate Query Language (HQL).那么翻譯一下這句話,就是下面這個SQL了:
  
  select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
  
  from MESSAGES m
  
  order by m.MESSAGE_TEXT asc
  
  輸出結果:
  
  1 message(s) found:
  
  Hello World
  
  4.簡單的xml映射文件
  "-//Hibernate/Hibernate Mapping DTD//EN"
  
  "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  
  name="hello.Message"
  
  table="MESSAGES">
  
  
  name="id"
  
  column="MESSAGE_ID">
  
  name="text"
  
  column="MESSAGE_TEXT"/>
  
  name="nextMessage"
  
  cascade="all"
  
  column="NEXT_MESSAGE_ID"/>
  
  這個映射文件告訴Hibernate,Message這個類是持久化的MESSAGES這張數據庫表,identifier屬性對應的是表中的MESSAGE_ID字段,text屬性對應的是MESSAGE_TEXT字段,nextMessage是一個多對一的關聯,對應的是NEXT_MESSAGE_ID字段。
  
  上面這個文件可以手工編寫,也可以借助第三方工具生成。
  
  5.更新一條信息
  下面讓我們修改一下剛才存到數據庫里面的第一條信息。
  
  Session session = getSessionFactory().openSession();
  
  Transaction tx = session.beginTransaction();
  
  // 1 is the generated id of the first message
  
  Message message =
  
  (Message) session.load( Message.class, new Long(1) );
  
  message.setText("Greetings Earthling");
  
  Message nextMessage = new Message("Take me to your leader (please)");
  
  message.setNextMessage( nextMessage );
  
  tx.commit();
  
  session.close();
  
  這段代碼等同以下三個SQL語句所要實現的東西:
  
  select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
  
  from MESSAGES m
  
  where m.MESSAGE_ID = 1
  
  insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
  
  values (2, 'Take me to your leader (please)', null)
  
  update MESSAGES
  
  set MESSAGE_TEXT = 'Greetings Earthling', NEXT_MESSAGE_ID = 2
  
  where MESSAGE_ID = 1
  
  再次運行“Hello World”,輸入信息如下:
  
  2 message(s) found:
  
  Greetings Earthling
  
  Take me to your leader (please)
  
  *補充,在Hibernate中最核心的五個接口:
  
  Session接口:這是Hibernate中一個主要的接口,Session接口的建立和消毀都是輕量級并且耗費資源很少的。這一點很重要,因為在我們的應用,我們每時每刻都在做著Session的create和distroy工作。它不是線程安全的,原則上它應該設計成一個時間只有一個Session才對。Session可以加載一個與一個工作流相關的對象,它可以監測著這個對象的變化,它被稱之為持久對象的治理器,當我們要對數據對象進行編輯操作時,就要調用它了。
  
  SessionFactory接口:我們請求一個Session實例,就是從SessionFactory中取得了。當然SessionFactory就不是個輕量級的東西了,它被多個應用的線程所共享。假如你通過Hibernate訪問多個數據庫,就要為每一個數據庫建立一個SessionFactory。在Hibernate的運行時,SessionFactory緩存了SQL段和其它的中介映射數據。它也保持one unit of work正在讀取的數據和將來可能被用到的數據。
  
  Configuration接口:Configuration用于指定一個應用所使用的映射文件的地址和Hibernate指定的屬性文件,然后建立一個SessionFactory。
  
  Transaction接口:
  
  Query and Criteria接口:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武定县| 昌黎县| 越西县| 柳林县| 应城市| 车险| 双城市| 淮安市| 开江县| 蒙城县| 玉田县| 大埔县| 宁化县| 西吉县| 获嘉县| 类乌齐县| 葫芦岛市| 富川| 呼伦贝尔市| 涞水县| 邳州市| 鸡西市| 静乐县| 寿光市| 和林格尔县| 海淀区| 泸州市| 长寿区| 新沂市| 巢湖市| 开封县| 泰州市| 鄂州市| 鹿泉市| 崇明县| 白银市| 双峰县| 克东县| 佛坪县| 池州市| 周口市|