歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Hibernate構建一個CURD的程序

Hibernate構建一個CURD的程序

日期:2017/3/1 10:39:46   编辑:Linux編程

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

1、項目結構

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

3、編寫一個HibernateUtil工具類

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

4、完成Event實體

[java]
  1. package com.akwolf.bean;
  2. import java.util.Date;
  3. public class Event {
  4. private long id;
  5. private String title;
  6. private Date date;
  7. public long getId() {
  8. return id;
  9. }
  10. public void setId(long id) {
  11. this.id = id;
  12. }
  13. public String getTitle() {
  14. return title;
  15. }
  16. public void setTitle(String title) {
  17. this.title = title;
  18. }
  19. public Date getDate() {
  20. return date;
  21. }
  22. public void setDate(Date date) {
  23. this.date = date;
  24. }
  25. @Override
  26. public String toString() {
  27. return "Event [date=" + date + ", id=" + id + ", title=" + title + "]";
  28. }
  29. }
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. <hibernate-mapping package="com.akwolf.bean">
  6. <class name="Event" table="EVENTS">
  7. <id name="id" column="EVENT_ID">
  8. <generator class="native" />
  9. </id>
  10. <property name="date" column="EVENT_DATE" type="timestamp"></property>
  11. <property name="title" column="EVENT_TITLE" type="java.lang.String" />
  12. </class>
  13. </hibernate-mapping>

6、編輯一個測試類:

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