欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

在resin3.0中配置hibernate2.1.2连mysql_PHP教程

程序员文章站 2024-01-25 20:44:34
...
在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) 查找元素,取消该元素的注释状态,该文件的注释采用的是html风格的注释方式。

c) 将元素修改为如下形式



jdbc/mysql



jdbc:mysql://192.162.125.3:3306/mysql

root

12345678



8

20

30s



如此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文件,文件内容如下



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

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





java:comp/env/jdbc/mysql

true

net.sf.hibernate.dialect.MySQLDialect









元素告诉hibernate使用resin中定义的jndi来连接数据库, 子元素用于描述每一个映射数据库表的配置文件路径,

其声明了User.hbm.xml是一个Hibernate XML映射文件,对应持久化类User。这个文件包含了把POJO类映射到数据库表(或多个数据库表)的元数据。我们稍后就回来看这个文件。让我们先编写这个POJO类,再看声明它的映射元数据。

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

User_id Password Nick_name E_mail
1 6666 hamal hamal@sohu.com
2 6666 vampire vampire@sina.com
3 6666 ande ande@yahoo.com

在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("test@sohu.com");



hSession.save(newp);

tx.commit();

HibernateUtil.closeSession();

}catch(Exception e){

e.printStackTrace();

}

}

}





10. 编写Hibernate XML映射文件

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





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

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

















































简单说明:

元素中的name属性代表的是User类的全路径名(即包名+类名的形式),table属性代表的是该User类映射的数据库表名。

元素代表该表的主键,name属性代表在User类中对应的类属性名。

元素代表该id属性对应的数据库user表中的user_id字段。





11. 界面测试:

我们在resin3mydomain目录下新建一个test.jsp文件如下:









This is a test!





This is a test!











12. 测试

好了,现在所有的准备工作都已经做完了,开始测试看看。

我们启动rensin服务器,启动文件为resin3binhttpd.exe,双击该文件即可。

在测试前我们看到的mysql中user表的内容如下。

User_id Password Nick_name E_mail
1 6666 hamal hamal@sohu.com
2 6666 vampire vampire@sina.com
3 6666 ande ande@yahoo.com

现在我们打开IE,在地址栏中输入http://localhost:8080/test.jsp

当界面上正常显示出This is a test!之后,我们再查看数据库内容如下:

User_id Password Nick_name E_mail
1 6666 hamal hamal@sohu.com
2 6666 vampire vampire@sina.com
3 6666 ande ande@yahoo.com
4 123 love test@sohu.com


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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/630945.htmlTechArticle在resin3.0中配置hibernate2.1.2连mysql 在resin3.0中配置hibernate2.1.2连mysql Author : hamal 约定: resin3 代表resin3.0的安装根目录 hibernate2 代表hibernate2...