昨天试着配置了一下Hibernate,其实就是本身自带的例子,照着做了一下,改了几个错误的地方,很多都是网上找来的资料。和大家分享一下。 使用的软件:tomcat5.0.28+hibernate2.1.6+Mysql5.0 这些软件下载,应该很容易的随便搜索就可以找到。最简单是到其官方网站去下。 1、安装 tomcat和mysql的安装就不用说了吧 1) 解压下载的压缩包,将解压出来的hibernate2.jar复制到%WebApp%/WEB-INF/lib 2) 将解压出来的lib目录下的 cglib-full-2.0.2.jar commons-collections-2.1.1.jar commons-logging-1.0.4.jar dom4j-1.4.jar ehcache-0.9.jar jta.jar log4j-1.2.8.jar odmg-3.0.jar 文件同样复制到%WebApp%/WEB-INF/lib,具体请参见解压出来的lib目录下的readme.txt。最简单是直接全部复制粘贴,呵呵。 3) 将解压出来的etc目录下的 log4j.properties 文件复制到%WebApp%/WEB-INF/classes。 4)配置数据库连接池。 打开%Tomcat_HOME\conf\server.xml 在文档末尾加入以下代码: <Context path="/hally" docBase="hally"> <Resource name="jdbc/hally" scope="Shareable" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/hally"> <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/mydb</value> </parameter> <parameter> <name>driverClassName</name><value>org.gjt.mm.mysql.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> 红色部分,改成自己相应的配置。 2、编写相关文件(hibernate文档里都有) 1) 按照参考文档,配置hibernate,将以下代码保存为hibernate.cfg.xml放在%WebApp%/WEB-INF/classes下 <?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/hally</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>
同样注意红色部分是改成你自己的。 2) 将以下代码保存为Cat.java,并生成相应的Cat.class,放入%WebApp%/WEB-INF/classes,这里无论你用什么方法生成Cat.class,但最终Cat.class应在%WebApp%/WEB-INF/classes/net/sf/hibernate/examples/quickstart目录下
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; } } | 3) 将以下代码保存为O/R映射文件Cat.hbm.xml,放入%WebApp%/WEB-INF/classes <?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> 4) 在数据库内建表,结构如下
Column | Type | Modifiers
--------+-----------------------+-----------
cat_id | character(32) | not null
name | character varying(16) | not null
sex | character(1) |
weight | real |
Indexes: cat_pkey primary key btree (cat_id) |
5) 将以下代码保存为HibernateUtil.java,并生成相应的HibernateUtil.class,放入%WebApp%/WEB-INF/classes,同样注意package
package net.sf.hibernate.examples.quickstart;
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(s); } return s; } public static void closeSession() throws HibernateException { Session s = (Session) session.get(); session.set(null); if (s != null) s.close(); } } | 6) 将以下代码保存为test.jsp,放入%WebApp%/,用http测试
<%@ page contentType="text/html;charset=utf-8"%> <%@ 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"> <% //添加一只Cat Session ses = HibernateUtil.currentSession(); Transaction tx= ses.beginTransaction(); Cat princess = new Cat(); princess.setName("王海利"); princess.setSex('F'); princess.setWeight(70.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("<br>Female Cat: " + cat.getName()+"+"+cat.getSex()+"+"+cat.getWeight()); } tx.commit(); HibernateUtil.closeSession(); %> </body> </html> | 小结 以上tomcat5.0.28 + hibernate2.1.6测试通过 为了方便大家,我把代码传了上来,包括建表的sql语句。 hally.rar 解压后直接放再tomcat的webapps目录下,启动tomcat,当让之前要配置好数据库连接池。里面有个cat.sql是我导出的建表的语句。 附:
|