Java开发网 |
注册 |
登录 |
帮助 |
搜索 |
排行榜 |
发帖统计
|
您没有登录 |
» Java开发网 » Java EE 综合讨论区
» Hibernate
打印话题 寄给朋友 订阅主题 |
作者 | Hibernate & tomcat5X & mysql 配置说明 |
lummyliao
发贴: 18 积分: 10 |
于 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) 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.set; } 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() { 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> 搞笑QQ图片 |
话题树型展开 |
人气 | 标题 | 作者 | 字数 | 发贴时间 |
14244 | Hibernate & tomcat5X & mysql 配置说明 | lummyliao | 11527 | 2004-09-21 11:42 |
9157 | Re:Hibernate & tomcat5X & mysql 配置说明 | didongusa | 7 | 2004-09-26 07:44 |
8957 | Re:Hibernate & tomcat5X & mysql 配置说明 | mustangsong | 364 | 2005-01-04 11:09 |
8903 | Re:Hibernate & tomcat5X & mysql 配置说明 | somebody | 0 | 2004-11-15 19:20 |
8952 | Re:Hibernate & tomcat5X & mysql 配置说明 | somebody | 71 | 2004-11-15 19:23 |
8820 | Re:Hibernate & tomcat5X & mysql 配置说明 | kait | 18 | 2004-11-23 12:35 |
8481 | Re:Hibernate & tomcat5X & mysql 配置说明 | mfc42d | 162 | 2005-01-04 13:00 |
8949 | Re:Hibernate & tomcat5X & mysql 配置说明 | lengfeng8402 | 10 | 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 |