事前準備工具&技術:
1. JDK1.7.0_04
2. Hibernate 3.2.3.GA
3. JBoss Hibernate Tools
4. MySQL 5.5
5. Eclipse Java EE KEPLER
相關表格的建立
於MySQL Server執行如下的script,創建User表格
1 2 3 4 5 6 7 8 9 10 | DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) DEFAULT NULL, `birth_date` date DEFAULT NULL, `sex` int(1) DEFAULT NULL, `age` int(3) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; |
取得Hibernate的jar檔案
到右側的連結下載Hibernate 3.2.3.GA版本的Hibernate來作為後續的教學之使用。 連結: http://sourceforge.net/projects/hibernate/files/hibernate3/3.2.3.ga/
以下就是我們需要使用到的hibernate的libraries.
antlr-2.76.jar
asm.jar
cglib-2.1.3.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
hibernate3.jar
javassist.jar
jta.jar
commons-collections-2.1.1.jar
commons-logging-1.1.1.jar
log4j-1.2.11.jar
其他必要的jar檔:
mysql-connector-java-5.05-bin.jar
建立一個MyHibernate專案
請依据圖1.的專案目錄結構來建立各個重要的程式檔。
第一步,利用JBoss Hibernate Tool從資料庫逆向將user_info表格映射出相應POJO、XML、DAO檔案,如下所示:
UserInfo.java
UserInfo.hbm.xml
UserInfoHome.java
第二步,修改UserInfoHome的getSessionFactory()方法
把以下的一段代碼
1 2 3 4 5 6 7 8 9 | protected SessionFactory getSessionFactory() { try { return (SessionFactory) new InitialContext() .lookup("SessionFactory"); } catch (Exception e) { log.error("Could not locate SessionFactory in JNDI", e); throw new IllegalStateException("Could not locate SessionFactory in JNDI"); } } |
1 2 3 4 5 6 7 8 | protected SessionFactory getSessionFactory() { try { return HibernateUtil.getSessionFactory(); } catch (Exception e) { log.error("Could not build SessionFactory", e); throw new IllegalStateException("Could not build SessionFactory"); } } |
第三步,建立HibernateUtil類別,用來取得SessionFactory的實體。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.yourcompany.hb.util; import org.hibernate.*; import org.hibernate.cfg.*; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory from hibernate.cfg.xml sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } } |
第四步,建立一支UserInfoManager繼承UserInfoHome,負責UserInfo的新增/刪除/修改/查詢的交易事務的處理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package com.yourcompany.hb.util; import java.util.Date; import org.hibernate.Session; import com.yourcompany.hb.domain.UserInfo; import com.yourcompany.hb.domain.UserInfoHome; public class UserInfoManager extends UserInfoHome { /** * 查詢 */ public void query() { Session session = getSessionFactory().getCurrentSession(); session.beginTransaction(); UserInfo user = (UserInfo)findById(new Integer(1)); session.getTransaction().commit(); System.out.println("查詢一筆記Username: "+user.getUsername()); } /** * 新增 */ public void add() { Session session = getSessionFactory().getCurrentSession(); session.beginTransaction(); UserInfo user = new UserInfo("Horry", "hy12345", new Date(), new Integer(1), new Integer(25)); persist(user); session.getTransaction().commit(); System.out.println("新增一筆記"+user.getUsername()+"成功"); } /** * 修改 */ public void update() { Session session = getSessionFactory().getCurrentSession(); session.beginTransaction(); UserInfo user = findById(new Integer(2)); user.setUsername("Marry"); user.setSex(new Integer(0)); //更新為女性 user.setAge(new Integer(37)); //更新為37歲 merge(user); session.getTransaction().commit(); System.out.println("修改一筆記"+user.getUsername()+"成功"); } /** * 刪除 */ public void delete() { Session session = getSessionFactory().getCurrentSession(); session.beginTransaction(); UserInfo user = findById(new Integer(2)); delete(user); session.getTransaction().commit(); System.out.println("刪除一筆記"+user.getUsername()+"成功"); } } |
第五步,建立TestHibernate測試類別。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.yourcompany.hb.main; import com.yourcompany.hb.util.UserInfoManager; public class TestHibernate { /** * @param args */ public static void main(String[] args) { UserInfoManager um = new UserInfoManager(); // 查詢 um.query(); // 新增 //um.add(); // 修改 //um.update(); // 刪除 //um.delete(); } } |
結論
經由上述一個步驟接著一個步驟的操作練習,讓我們很快的了解到原來利用Hibernate來操作資料庫的表格,也可以那麼的輕鬆愉快。
(下載本文範例程式檔) 記得下載相關jar檔
沒有留言:
張貼留言