程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 在resin3.0中配置hibernate2.1.2連mysql

在resin3.0中配置hibernate2.1.2連mysql

編輯:關於PHP編程

 

在resin3.0中配置hibernate2.1.2連mysql

在resin3.0中配置hibernate2.1.2連mysql

Author : hamal

約定:

resin3 代表resin3.0的安裝根目錄

hibernate2 代表hibernate2.1.2的安裝根目錄



1.        在resin3下建立我們的web應用根,如resin3mydomain目錄(mydomain的目錄名可以隨意取,之後在配置文件中配置即可)

2.        在resin3mydomain目錄下分別建立resin3mydomainWEB-INFclasses目錄和resin3mydomainWEB-INFlib目錄。
這兩個目錄對應本web應用程序上下文的類裝載器搜索路徑(對於jar來說是resin3mydomainWEB-INFlib,對於class文件來說是resin3mydomainWEB-INFclasses)。我們把這兩個路徑分別稱為應用庫類路徑(用於存放和本應用相關的jar類庫)和上下文類路徑(用於存放本應用的class文件和xml配置文件)。
另外還有一個路徑是resin3lib目錄,我們稱該路徑為全局庫類路徑(存放於resin3服務器上,供該服務器上所有web應用共享使用的相關jar類庫)。

3.        本示例使用的是mysql數據庫,所以我們將mysql的jdbc驅動jar包(mm.mysql-2.0.4-bin.jar)放入resin3lib目錄中,之後該驅動將能被所有web應用所用。

4.      將hibernate2 hibernate2.jar文件拷貝到resin3mydomainWEB-INFlib 目錄下,然後拷貝hibernate2lib 目錄下必須的jar文件也拷貝到resin3mydomainWEB-INFlib 目錄下。如果你不是很清楚哪些包是你所需要的,可以參看hibernate2libREADME.txt文件,或者,再簡單一點,我們將hibernate2lib 目錄下的所有jar文件都拷貝到resin3mydomainWEB-INFlib 目錄下。

5.      現在我們開始配置resin的jdbc數據庫連接池。修改resin3confresin.conf文件

a)      搜索webapps,將webapps替換為我們自定義的應用目錄mydomain。

b)      查找<database>元素,取消該元素的注釋狀態,該文件的注釋采用的是html風格的注釋方式<!--  -->。

c)      將<database>元素修改為如下形式

<database>

      <jndi-name>jdbc/mysql</jndi-name>

      <driver type="org.gjt.mm.mysql.Driver">

        <url>jdbc:mysql://192.162.125.3:3306/mysql</url>

        <user>root</user>

        <password>12345678</password>

      </driver>

      <prepared-statement-cache-size>8</prepared-statement-cache-size>

      <max-connections>20</max-connections>

      <max-idle-time>30s</max-idle-time>

   </database>

如此resin的jdbc連接池配置完成。

6.      將hibernate2src目錄下的hibernate.properties、log4j.properties、oscache.properties文件拷貝到resin3 mydomainWEB-INFclasses目錄下。

7.      由於我們使用的是mysql數據庫,所以修改hibernate.properties文件中關於mysql部分的配置,並注釋掉原默認的HypersonicSQL配置。注釋配置就是在語句前加 # 符號。如:

#hibernate.dialect net.sf.hibernate.dialect.HSQLDialect



下面是一個典型的mysql配置:

hibernate.dialect net.sf.hibernate.dialect.MySQLDialect

hibernate.connection.driver_class org.gjt.mm.mysql.Driver

hibernate.connection.driver_class com.mysql.jdbc.Driver

hibernate.connection.url jdbc:mysql://192.162.125.3:3306/mydb

hibernate.connection.username root

hibernate.connection.password 12345678



我們需要修改的就是下面3行:

url是指jdbc連接描述符,格式為jdbc:mysql://數據庫IP:端口號/數據庫名

username是指用於登陸該數據庫的用戶名

password該用戶密碼



8.      將hibernate和resin的數據庫連接池綁定。在目錄裡創建一個hibernate.cfg.xml文件,文件內容如下

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration

    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"

    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="connection.datasource">java:comp/env/jdbc/mysql</property>

        <property name="show_sql">true</property>

        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

        <!-- Mapping files -->

        <mapping resource="User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

該<session-factory>元素告訴hibernate使用resin中定義的jndi來連接數據庫, <mapping>子元素用於描述每一個映射數據庫表的配置文件路徑,

其聲明了User.hbm.xml是一個Hibernate XML映射文件,對應持久化類User。這個文件包含了把POJO類映射到數據庫表(或多個數據庫表)的元數據。我們稍後就回來看這個文件。讓我們先編寫這個POJO類,再看聲明它的映射元數據。

9.      在mysql中建立user表該表的格式如下:

User_id    Password    Nick_name    E_mail
1            6666          hamal           [email protected]
2            6666          vampire        [email protected]
3            6666          ande            [email protected]

在resin3 mydomainWEB-INFclasses目錄下分別新建3個java文件:Test.java、HibernateUtil.java、User.java。



HibernateUtil.java源代碼如下:該類是一個輔助類,用於獲得一個靜態的SessionFactory,SessionFactory負責一個數據庫,也只對應一個XML配置文件(hibernate.cfg.xml)。



import net.sf.hibernate.*;

import net.sf.hibernate.cfg.*;



public class HibernateUtil {



    private static final SessionFactory sessionFactory;



    static {

        try {

            sessionFactory = new Configuration().configure().buildSessionFactory();

        } catch (HibernateException ex) {

            throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);

        }

    }



    public static final ThreadLocal session = new ThreadLocal();



    public static Session currentSession() throws HibernateException {

        Session s = (Session) session.get();

        // Open a new Session, if this Thread has none yet

        if (s == null) {

            s = sessionFactory.openSession();

            session.set(s);

        }

        return s;

    }



    public static void closeSession() throws HibernateException {

        Session s = (Session) session.get();

        session.set(null);

        if (s != null)

            s.close();

    }

}



User.java 源代碼如下:Hibernate讓普通的Java對象(Plain Old Java Objects ,就是POJOs,有時候也稱作Plain Ordinary Java Objects)變成持久化類。一個POJO很像JavaBean,屬性通過getter和setter方法訪問,對外隱藏了內部實現的細節。



public class User {



    private Integer id;

    private String nick;

    private String password ;

    private String email;



    public User() {

    }



    public Integer getId() {

        return id;

    }



    public void setId(Integer id) {

        this.id = id;

    }



    public String getNick() {

        return nick;

    }



    public void setNick(String nick) {

        this.nick = nick;

    }



    public String getPassword() {

        return password;

    }



    public void setPassword(String password) {

        this.password = password;

    }



    public String getEmail() {

        return email;

    }



    public void setEmail(String email) {

        this.email = email;

    }



}



Test.java 源代碼如下:



import javax.naming.*;

import net.sf.hibernate.*;

import java.util.*;



public class Test{

  void Test(){

   

  }

  public static void insert(){

    try{   

      Session hSession = HibernateUtil.currentSession();

      Transaction tx= hSession.beginTransaction();

      

      User newp = new User();

      Integer id = new Integer("4");

      newp.setId(id);

      newp.setNick("love");

      newp.setPassword("123");

      newp.setEmail("[email protected]");

      

      hSession.save(newp);

      tx.commit();

      HibernateUtil.closeSession();

    }catch(Exception e){

      e.printStackTrace();

    }

  }

}





10.  編寫Hibernate XML映射文件

在resin3 mydomainWEB-INFclasses目錄下新建User.hbm.xml文件,文件內容如下:



<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping

    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">



<hibernate-mapping>



  <class name="User" table="user">

    <id name="id" type="java.lang.Integer">

      <column name="user_id" sql-type="Integer" not-null="true"/>

      <generator class="assigned"/>

    </id>



    <property name="password" type="java.lang.String">

      <column name="password" sql-type="varchar(20)"/>

    </property>



    <property name="nick" type="java.lang.String">

      <column name="nick_name" sql-type="varchar(50)"/>

    </property>



    <property name="email" type="java.lang.String">

      <column name="e_mail" sql-type="varchar(30)"/>

    </property>

  </class>



</hibernate-mapping>



簡單說明:

<class name="User" table="user">元素中的name屬性代表的是User類的全路徑名(即包名+類名的形式),table屬性代表的是該User類映射的數據庫表名。

<id name="id" type="java.lang.Integer">元素代表該表的主鍵,name屬性代表在User類中對應的類屬性名。

<column name="user_id" sql-type="Integer" not-null="true"/>元素代表該id屬性對應的數據庫user表中的user_id字段。





11.  界面測試:

我們在resin3mydomain目錄下新建一個test.jsp文件如下:



<%@ page contentType="text/html; charset=gb2312" %>

<html>

<head>

<title> This is a test! </title>

</head>

<body>

This is a test!

<%Test.insert();%>

</body>

</html>





12.  測試

好了,現在所有的准備工作都已經做完了,開始測試看看。

我們啟動rensin服務器,啟動文件為resin3binhttpd.exe,雙擊該文件即可。

在測試前我們看到的mysql中user表的內容如下。

User_id    Password    Nick_name    E_mail
1            6666          hamal           [email protected]
2            6666          vampire        [email protected]
3            6666          ande            [email protected]

現在我們打開IE,在地址欄中輸入http://localhost:8080/test.jsp

當界面上正常顯示出This is a test!之後,我們再查看數據庫內容如下:

User_id    Password    Nick_name    E_mail
1            6666          hamal           [email protected]
2            6666          vampire        [email protected]
3            6666          ande            [email protected]
4            123            love            [email protected]


恭喜,你已經完成了本次示例!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved