歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Hibernate構建一個CURD的程序

完成功能:對實體Event進行CURD操作

1、項目結構

2、配置hibernate.xml和log4j的控制台輸出描述文件log4j.properties

3、編寫一個HibernateUtil工具類

[java]
  1. package com.akwolf.util;  
  2.   
  3. import org.hibernate.SessionFactory;  
  4. import org.hibernate.cfg.Configuration;  
  5.   
  6. public class HibernateUtil {  
  7.     private static final SessionFactory SESSION_FACTORY = buildSessionFactory();  
  8.   
  9.     private static SessionFactory buildSessionFactory() {  
  10.         try {  
  11.             return new Configuration().configure("hibernate.xml")  
  12.                     .buildSessionFactory();  
  13.         } catch (Throwable e) {  
  14.             throw new ExceptionInInitializerError(e);  
  15.         }  
  16.     }  
  17.   
  18.     public static SessionFactory getSessionFactory() {  
  19.         return SESSION_FACTORY;  
  20.     }  
  21. }  

4、完成Event實體

[java]
  1. package com.akwolf.bean;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class Event {  
  6.     private long id;  
  7.     private String title;  
  8.     private Date date;  
  9.   
  10.     public long getId() {  
  11.         return id;  
  12.     }  
  13.   
  14.     public void setId(long id) {  
  15.         this.id = id;  
  16.     }  
  17.   
  18.     public String getTitle() {  
  19.         return title;  
  20.     }  
  21.   
  22.     public void setTitle(String title) {  
  23.         this.title = title;  
  24.     }  
  25.   
  26.     public Date getDate() {  
  27.         return date;  
  28.     }  
  29.   
  30.     public void setDate(Date date) {  
  31.         this.date = date;  
  32.     }  
  33.   
  34.     @Override  
  35.     public String toString() {  
  36.         return "Event [date=" + date + ", id=" + id + ", title=" + title + "]";  
  37.     }  
  38.       
  39.       
  40. }  
5、設置Event實體的映射文件

[html]
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping package="com.akwolf.bean">  
  7.     <class name="Event" table="EVENTS">  
  8.         <id name="id" column="EVENT_ID">  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="date" column="EVENT_DATE" type="timestamp"></property>  
  12.         <property name="title" column="EVENT_TITLE" type="java.lang.String" />  
  13.     </class>  
  14. </hibernate-mapping>  

6、編輯一個測試類:

[java]
  1. package com.akwolf.test;  
  2.   
  3. import java.util.Date;  
  4. import java.util.List;  
  5.   
  6. import org.hibernate.Session;  
  7. import org.hibernate.SessionFactory;  
  8.   
  9. import com.akwolf.bean.Event;  
  10. import com.akwolf.util.HibernateUtil;  
  11.   
  12. public class EventManager {  
  13.     public static void main(String[] args) {  
  14.         EventManager mgr = new EventManager() ;  
  15.         //createAndStoreEvent();   
  16.         mgr.listEvent() ;  
  17.     }  
  18.   
  19.     public static void createAndStoreEvent() {  
  20.         Event event = new Event();  
  21.         event.setDate(new Date());  
  22.         event.setTitle("ok張");  
  23.         // 取得會話工廠   
  24.         SessionFactory sessionFactory = HibernateUtil.getSessionFactory();  
  25.         // 取得一個會話   
  26.         Session session = sessionFactory.getCurrentSession();  
  27.         // 開始事物   
  28.         session.beginTransaction();  
  29.         session.save(event);  
  30.   
  31.         // System.out.println(event);   
  32.   
  33.         // 提交事物   
  34.         session.getTransaction().commit();  
  35.         sessionFactory.close();  
  36.     }  
  37.   
  38.     public void listEvent() {  
  39.         Session session = HibernateUtil.getSessionFactory().getCurrentSession();  
  40.         session.beginTransaction();  
  41.         List<Event> list = session.createQuery("from Event").list();  
  42.         session.getTransaction().commit();  
  43.         HibernateUtil.getSessionFactory().close();  
  44.         for (Event event : list) {  
  45.             System.out.println(event);  
  46.         }  
  47.   
  48.     }  
  49.   
  50. }  
7、注意問題:

(1)當事物結束的時候,不管是提交還是回滾,Hibernate會自動把Session從當前線程剝離,並且關閉它。若再次調用getCurrrentSession(),會得到一個新的Session,並開始一個新的工作單元。

(2)絕不要把程序設計成每次操作數據庫都取得一個新的Session。

(3)連接池使用c3p0,在網上看了一篇文章說dbcp的bug很多,以至於Hibernate的作者比較惱火,官方支持的c3p0。


8、遇到問題:

在做插入操作是出現亂碼,檢查了一下原因是在剛開始安裝mysql時,配置選擇的是默認配置,而漠視的是Latin-1,是不支持中文,於是重裝mysql調整編碼,但插入時報錯了,郁悶了一下,,想了一下,數據庫hibernate是以上一個lation-1的編碼創建的,於是刪掉重建,問題解決。

Copyright © Linux教程網 All Rights Reserved