Topic: Hibernate & tomcat5X & mysql 配置说明

  Print this page

1.Hibernate & tomcat5X & mysql 配置说明 Copy to clipboard
Posted by: lummyliao
Posted on: 2004-09-21 11:42

Hibernate & tomcat5X & mysql 配置说明
  
    由于hibernate 中文文档 v2.1.2 中"在Tomcat中快速上手"章节介绍的比较简单,
而网上关于hibernate+tomcat5X+mysql配置不是很详细,使得我在tomcat+mysql
+hibernate配置上饱受煎熬,为避免大家重复走弯路,特编辑此文,本文是基于
hibernate 中文文档v2.1.2的"在Tomcat中快速上手"章节基础上的完善;仅以此
篇奉献给对 hibernate 初学者。
    软件版本列表:
    Tomcat       v 5.0.28   下载地址:http://www.apache.org
    Mysql       v 4.0.18  下载地址:http://www.mysql.org
                Mysql JDBC驱动 下载地址:http://dev.mysql.com/downloads/connector/j/3.0.html
    Hibernate    v 2.1.6    下载地址:http://www.hibernate.org.cn/
    
    安装tomcat和mysql非常简单,我在此处不再重复。
    
    * 第一步是拷贝所有需要的运行库到Tomcat去。在这篇教程中,我们使用一个单独的web程序(webapps/quickstart)。
我们要考虑全局库文件搜索路径(TOMCAT/common/lib)和本web应用程序上下文的类装载器搜索路径
(对于jar来说是webapps/quickstart/WEB-INF/lib,对于class文件来说是webapps/quickstart/WEB-INF/classes)。
我们把这两个类装载器级别分别称为全局类路径(global classpath)和上下文类路径(context classpath)。
    
    把数据库需要的JDBC驱动 mysql-connector-java-3.0.15-ga-bin.jar 拷贝到全局类路径
Tomcat-5.0.28\common\lib

    * 不要拷贝任何其他东西到全局类装载器去。否则你可能在一些工具上遇到麻烦,比如log4j, commons-logging等。
记得要使用每个web应用程序自己的上下文类路径,就是说把你自己的类库拷贝到WEB-INF/lib下去,
把配置文件configuration/property拷贝到WEB-INF/classes下面去。这两个目录默认都是上下文类路径级别的。

    * 在tomcat\webapps\目录下新建quickstart目录,并在此目录下依次建立以下目录
      tomcat\webapps\quickstart
quickstart\WEB-INF\classes
quickstart\WEB-INF\lib
quickstart\testdb
将cglib-full-2.0.2.jar、commons-collections-2.1.1.jar、commons-dbcp-1.2.1.jar、
commons-lang-1.0.1.jar、commons-logging-1.0.4.jar、commons-pool-1.2.jar、dom4j-1.4.jar、
ehcache-0.9.jar、hibernate2.jar、jta.jar、log4j-1.2.8.jar、odmg-3.0.jar文件拷贝到
quickstart\WEB-INF\lib目录下。
    
    * 将hibernate-2.1.6.zip包中的 hibernate.properties 文件
拷贝到quickstart\WEB-INF\classes
    编辑 hibernate.properties
    注释以下行
    #hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
    #hibernate.connection.driver_class org.hsqldb.jdbcDriver
    #hibernate.connection.username sa
    #hibernate.connection.password
    #hibernate.connection.url jdbc:hsqldb:hsql://localhost
    #hibernate.connection.url jdbc:hsqldb:test
    #hibernate.connection.url jdbc:hsqldb:.
    
    修改同Mysql数据库的连接配置
    ## MySQL
    
    hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
    hibernate.connection.driver_class org.gjt.mm.mysql.Driver
    hibernate.connection.url jdbc:mysql://localhost:3306/quickstart
    hibernate.connection.username root
    hibernate.connection.password
    
    
    * 在quickstart\WEB-INF\classes目录下分别新建以下文件
    1) Cat.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="net.sf.hibernate.examples.quickstart.Cat" table="CAT">
<!-- A 32 hex character is our surrogate key. It's automatically
generated by Hibernate with the UUID pattern. -->
<id name="id" type="string" unsaved-value="null" >
<column name="CAT_ID" sql-type="char(32)" not-null="true"/>
<generator class="uuid.hex"/>
</id>
<!-- A cat has to have a name, but it shouldn' be too long. -->
<property name="name">
<column name="NAME" length="16" not-null="true"/>
</property>
<property name="sex"/>
<property name="weight"/>
</class>
</hibernate-mapping>

    2) 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/quickstart</property>
    <property name="show_sql">false</property>
    <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
    
    <!-- Mapping files -->
    <mapping resource="Cat.hbm.xml"/>
  
  </session-factory>

</hibernate-configuration>
        
    * 在MySql数据库中新建 quickstart 数据库
    执行以下Sql语句
    CREATE TABLE cat (
     cat_id varchar(20) NOT NULL,
     name varchar(20) NOT NULL,
     sex char(1),
     weight float,
     PRIMARY KEY (cat_id)
    Wink;
    
    insert cat values('1', 'ada', 'F', 5);
    insert cat values('2', 'belinda', 'F', 10);
    commit;

    * 配置Tomcat同MYSQL的数据库连接
    编辑 tomcat\conf\server.xml 在元素 </Host> 前加入以下内容
    <Context path="/quickstart" docBase="quickstart" reloadable="true">
     <Resource auth="Container" name="jdbc/quickstart" global="jdbc/quickstart" scope="Shareable" type="javax.sql.DataSource"/>
     <ResourceParams name="jdbc/quickstart">
     <parameter>
     <name>factory</name>
     <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
     </parameter>
    
     <!-- DBCP database connection settings -->
     <parameter>
     <name>url</name>
     <value>jdbc:mysql://localhost:3306/quickstart?useUnicode=true&characterEncoding=GB2312</value>
     </parameter>
    
     <parameter>
     <name>driverClassName</name>
     <value>com.mysql.jdbc.Driver</value>
     </parameter>
     <parameter>
     <name>username</name>
     <value>root</value>
     </parameter>
     <parameter>
     <name>password</name>
     <value></value>
     </parameter>
    
     <!-- DBCP connection pooling options -->
     <parameter>
     <name>maxWait</name>
     <value>3000</value>
     </parameter>
     <parameter>
     <name>maxIdle</name>
     <value>100</value>
     </parameter>
     <parameter>
     <name>maxActive</name>
     <value>10</value>
     </parameter>
     </ResourceParams>
    </Context>
    
    * 测试数据库连接
    在 quickstart\testdb\目录下新建 testJDBC.jsp
<%@ page contentType="text/html; charset=gb2312" %>

<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="java.sql.*" %>
<%!
public Connection getConn()
{
  Connection conn = null;
  try{
Context ctx = new InitialContext();
if(ctx == null )
throw new Exception("Boom - No Context");

DataSource ds =
(DataSource)ctx.lookup(
"java:comp/env/jdbc/quickstart");

if (ds != null)
{
  
conn = ds.getConnection();
}
}catch(Exception e) {
  System.out.println("*** 数据库资源未找到 *****");
e.printStackTrace();
}
return conn;
}
%>
<html>
<head>
<title>JDBC Test</title>
</head>
<body>

<%

int i = 0;
  int nTimes = 3;
  int nCurrentTime = 0;
  String strNow = "";

Statement stmt = null;
ResultSet rst = null;
  Connection conn = null;
  String strSql = "";
  java.text.SimpleDateFormat dateFormat =
new java.text.SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
  System.out.println(" #### JDBC #### testJDBC.jsp:"+dateFormat.format(new java.util.Date()));
  
try
{
   for(i=0;i<nTimes;i++)
   {

  
   conn = getConn();
   if(i==0)
   {
     System.out.println(" testJDBC.jsp conn="+conn);
   }
  
   stmt = conn.createStatement();
  
      strSql = " select now()";

rst = stmt.executeQuery(strSql);
if(rst.next()) {
strNow=rst.getString(1);
}
//release resource
rst.close();
stmt.close();
conn.close();

   if(i==0){
        System.out.println("pool begin i="+i+"; strNow="+strNow);
      }else if(i==nTimes-1){
        System.out.println("pool end i="+i+"; strNow="+strNow);
      }
   }
  
%>

<h2>Results</h2>
<font size=2 color=green>完成test JDBC测试 </font><br/>
测试连接 : 当前时间为 <%=strNow%>

</body>
</html>
<%
  }catch(Exception excep){
    System.out.println("%%%% test pool.jsp --> error begin at i="+i+" %%%%");
    excep.printStackTrace();
    System.out.println("%%%% pool.jsp --> error info end %%%%");
    throw excep;
  }finally{
    
  }
%>
  启动tomcat 通过浏览 http://localhost:8080/quickstart/testdb/testJDBC.jsp 获得当前数据库时间
表示数据库连接成功。
    
    * 新建测试所需的java文件
    使用JBuilder或其他工具生成 Cat.java 和 HibernateUtil.java,注意:JBuilder 必须将 hibernate2.jar
引入才能正确编译。
    1) Cat.java
package net.sf.hibernate.examples.quickstart;

public class Cat {

  private String id;
  private String name;
  private char sex;
  private float weight;
  
  public Cat() {
  }
  
  public String getId() {
   return id;
  }
  
  private void setId(String id) {
   this.id = id;
  }
  
  public String getName() {
   return name;
  }
  
  public void setName(String name) {
  this.name = name;
  }
  
  public char getSex() {
   return sex;
  }
  
  public void setSex(char sex) {
   this.sex = sex;
  }
  
  public float getWeight() {
   return weight;
  }
  
  public void setWeight(float weight) {
   this.weight = weight;
  }

}

    2) HibernateUtil.java
package net.sf.hibernate.examples.quickstart;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class HibernateUtil {

private static Log log = LogFactory.getLog(HibernateUtil.class);

private static final SessionFactory sessionFactory;

static {
try {
// Create the SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
}
catch (Throwable ex) {
log.error("Initial SessionFactory creation failed.", ex);
throw new ExceptionInInitializerError(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.setMoon;
}
return s;
}

public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}

    
    * 测试 Hibernate
    在 quickstart/目录下新建 testCat.jsp
<%@ page language="java" pageEncoding="GB2312" %>
<%@ page import="net.sf.hibernate.Transaction"%>
<%@ page import="net.sf.hibernate.Session"%>
<%@ page import="net.sf.hibernate.cfg.*"%>
<%@ page import="net.sf.hibernate.Query"%>
<%@ page import="net.sf.hibernate.examples.quickstart.HibernateUtil"%>
<%@ page import="net.sf.hibernate.examples.quickstart.Cat"%>
<%@ page import="java.util.*"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
  <head><title>Lomboz JSP</title></head>
  <body bgcolor="#FFFFFF">
  <%
  try{
  //添加一只Cat
  
  Session ses = HibernateUtil.currentSession();
  Transaction tx= ses.beginTransaction();
  
  Cat princess = new Cat();
  princess.setName("Jenny");
  princess.setSex('F');
  princess.setWeight(7.4f);
  
  ses.save(princess);
  tx.commit();
  
  HibernateUtil.closeSession();
  
  
  //读取库里所有Cat
  
  ses = HibernateUtil.currentSession();
  tx= ses.beginTransaction();
  
  Query query = ses.createQuery("select c from Cat as c where c.sex = :sex");
  query.setCharacter("sex", 'F');
  for (Iterator it = query.iterate(); it.hasNext()Wink {
  Cat cat = (Cat) it.next();
  out.println("Female Cat: " + cat.getName() +"<br>");
  }
  
  tx.commit();
  HibernateUtil.closeSession();
  
  }catch(Exception excep){
excep.printStackTrace();
throw excep;
}
%>
  
  </body>
</html>

2.Re:Hibernate & tomcat5X & mysql 配置说明 [Re: lummyliao] Copy to clipboard
Posted by: didongusa
Posted on: 2004-09-26 07:44

Thanks.

3.Re:Hibernate & tomcat5X & mysql 配置说明 [Re: lummyliao] Copy to clipboard
Posted by: somebody
Posted on: 2004-11-15 19:20


4.Re:Hibernate & tomcat5X & mysql 配置说明 [Re: lummyliao] Copy to clipboard
Posted by: somebody
Posted on: 2004-11-15 19:23

真是不好意思呀。斑竹把我的删了吧,我复制了,本来想发到我们论坛上的,没想到贴错了。

同时要谢谢楼主呀。
正在学习

5555555

5.Re:Hibernate & tomcat5X & mysql 配置说明 [Re: lummyliao] Copy to clipboard
Posted by: kait
Posted on: 2004-11-23 12:35

太好了,感謝您寫的那麼詳細~來試試看

6.Re:Hibernate & tomcat5X & mysql 配置说明 [Re: didongusa] Copy to clipboard
Posted by: mustangsong
Posted on: 2005-01-04 11:09

我遇到了一个问题,启动TOMCAT启动不了
后来把server.xml 中的
<!-- DBCP database connection settings -->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/quickstart?useUnicode=true&characterEncoding=GB2312</value>
</parameter>

改成
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/quickstart</value>
</parameter>

就没事了

7.Re:Hibernate & tomcat5X & mysql 配置说明 [Re: lummyliao] Copy to clipboard
Posted by: mfc42d
Posted on: 2005-01-04 13:00

改成
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/quickstart?useUnicode=true& amp;characterEncoding=GB2312</value>
</parameter>

删去&后空格就没事了

8.Re:Hibernate & tomcat5X & mysql 配置说明 [Re: lummyliao] Copy to clipboard
Posted by: lengfeng8402
Posted on: 2005-01-04 20:17

写得很详细,谢谢 !


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923