JBuilder+Hibernate+Tomcat快速入门
高科华
作者简介:高科华,南京航空学院计算数学专业硕士,有十年以上的企业信息化工作经验。目前的研究兴趣,J2EE企业应用、ERP软件研发、数据仓库系统研发。 作者声明:本文没有最后定稿。
本文给出了用JBuilder开发Hibernate+Tomcat Web应用的一般步骤。
1. 下载hibernate-2.1.x.zip http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc
2. 安装,将zip文件解压到JBuilder_HOME\ thirdparty
3. 在JBuilder2005中新建hibernate库,选择菜单Tools-Configure-Libraries,在弹出的对话框中点击New按钮,输入hibernate库的名称:hibernate,点击Add按钮,将hibernate目录中的文件hibernate2.jar增加到hibernate库中,根据需要将hibernate\lib目录中的相应的*.jar增加到hibernate库中,一般需要这些类库:dom4j、CGLIB、Commons Collections、Commons Logging、ODMG4、EHCache
4. 新建工程文件,选菜单File-New Project,给工程文件取名为myProject
设置工程文件的属性,选菜单Project-Project Properties,选择Tomcat作为服务器,将hibernate库加入Path/Required Libraries。
5. 新建Web模块,选菜单File-New,给Web模块取名为quickstart
6. 用servlet向导新建一个servlet文件,选菜单File-New,在弹出的对话框中选择Web-Standard Servlet,取名为Servlet1,在向导的第五步选择Create a runtime configuration
7. 运行Servlet1
8. 将quickstart\Tomcat\conf目录中的文件server8080.xml加入工程文件,修改server8080.xml的内容
<?xml version="1.0" encoding="UTF-8"?> <Server debug="0" port="8081" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector acceptCount="10" connectionTimeout="60000" debug="0" maxThreads="75" minSpareThreads="5" port="8080"/> <Engine debug="0" defaultHost="localhost" name="Catalina"> <Host appBase="C:\jbproject\quickstart\Tomcat\webapps" autoDeploy="false" debug="0" deployXML="false" name="localhost" unpackWARs="false"> <!--Context debug="0" docBase="C:\jbproject\quickstart\quickstart" path="/quickstart" reloadable="true" workDir="C:\jbproject\quickstart\Tomcat\work\quickstart"/--> <Context path="/quickstart" docBase="C:\jbproject\quickstart\quickstart" workDir="C:\jbproject\quickstart\Tomcat\work\quickstart"> <Resource name="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:hsqldb:hsql://localhost</value> <!--value>jdbc:microsoft:sqlserver://nt04:1433;DatabaseName=test</value--> </parameter> <parameter> <name>driverClassName</name> <value>org.hsqldb.jdbcDriver</value> <!--value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value--> </parameter> <parameter> <name>username</name> <value>sa</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> </Host> </Engine> </Service> </Server>
9. 设置hibernate,在quickstart\src目录中新建文件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.PostgreSQLDialect</property> <!-- Mapping files --> <mapping resource="Cat.hbm.xml"/> </session-factory> </hibernate-configuration>
10. 新建一个持久类
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; } }
11. 在quickstart\src目录中新建影射文件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>
12. 准备数据库
13. 新建一个类HibernateUtil
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(); } }
14. 修改Servlet1.java
package net.sf.hibernate.examples.quickstart; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import net.sf.hibernate.Transaction; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import net.sf.hibernate.Query; public class Servlet1 extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=Big5"; private HibernateUtil hibernateUtil = null; //Initialize global variables public void init() throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); hibernateUtil = new HibernateUtil(); try { Session session = hibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); Cat princess = new Cat(); princess.setName("Princess"); princess.setSex('F'); princess.setWeight(7.4f); session.save(princess); tx.commit(); Query query = session.createQuery( "select c from Cat as c where c.sex = :sex"); query.setCharacter("sex", 'F'); out.println("<html>"); out.println("<head><title>Servlet1</title></head>"); out.println("<body bgcolor=\"#ffffff\">"); for (Iterator it = query.iterate(); it.hasNext(); ) { Cat cat = (Cat) it.next(); out.println("<p>Female Cat: " + cat.getName()+"</p>"); } out.println("</body>"); out.println("</html>"); out.close(); tx.commit(); HibernateUtil.closeSession(); } catch (HibernateException e) { e.printStackTrace(); } } //Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } //Process the HTTP Put request public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } //Clean up resources public void destroy() { } }
15. 再次运行Servlet1,报错。
16. 设置工程文件的属性,选菜单Project-Project Properties,在弹出的对话框中选择Build-Resource-xml,选择选择按钮Copy。这一步是为了在重建工程文件时把src目录中的xml文件拷贝到classes目录中。
17. 再次运行Servlet1,你将看到使用了hibernate后的显示结果。
“hibernate.cfg.xml not found”。
用JUnit测试时,文件hibernate.cfg.xml中需增加如下内容:
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:hsql://localhost</property> <property name="username">sa</property> <property name="password"></property> <property name="connection.provider_class"> net.sf.hibernate.connection.DBCPConnectionProvider</property> <property name="connection.pool_size">50</property> <property name="dbcp.maxActive">100</property> <property name="dbcp.whenExhaustedAction">1</property> <property name="dbcp.maxWait">120000</property> <property name="dbcp.maxIdle">10</property>
参考资源
http://www.hibernate.org/hib_docs/reference/en/html/quickstart.html

|