PHP字串長度找子字串與取代字串的常用函數

PHP在字串的操作上,有非常多的相關函數可以使用,我們在這裡只介紹經常會使用到的字串操作函數。像是如何取得字串的長度、在某一個字裏面尋找子字串首次出現的位置、以及字串的取代函數...等等。這些都是在編寫程式的時候,頻繁被程式設計師使用到的基礎函數。 取得字串長度 <?...

2014年8月12日 星期二

簡單運用Hibernate操作Mysql資料庫

在這篇文章當中我們將教您如何運用Hibernate來簡單而快速的操作資料庫的表格記錄。

事前準備工具&技術:
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.的專案目錄結構來建立各個重要的程式檔。

圖1.MyHibernate專案結構

第一步,利用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檔

沒有留言:

張貼留言