Hibernate+proxool 详解

    技术2025-05-30  7

        现在都流行用hibernate还管理数据库,这不公司也要求用这个,以前我用 proxool 来管理连接,我也是刚接触 hibernate 在网上找了一些如何配置的。说实话找一个完整的例子实在是太难了。还好我是连上网查,又问网友。终于测试成功了。现写出来供初学者参考。

     

    本文采用 hibernate + proxool + Oracle9i + tomcat 5.5.25

     

    表结构

    Create Table test

    (

         cName varchar(100),

         cAddress varchar(100),

         primary key (cName)

    )

    需要的库如下:

    Oracle 库: ojdbc14.jar   不要用 classes12.jar

    连接池库

    proxool-0.9.1.jar

    proxool-cglib.jar

    hibernate 必须库

    antlr-2.7.6.jar

    commons-collections-3.1.jar

    dom4j-1.6.1.jar

    javassist-3.12.0.GA.jar

    jta-1.1.jar

    slf4j-api-1.6.1.jar

    hibernate3.jar

    补充库

    ejb3-persistence.jar

    slf4j-nop-1.6.1.jar

     

    以上库文件可以到 http://netcreate.download.csdn.net/  下载   HB的就是

     

    proxool.xml

     

    <?xml version="1.0" encoding="UTF-8"?> <something-else-entirely> <proxool> <alias>pool1</alias> <driver-url>jdbc:oracle:thin:@192.168.1.254:1521:db</driver-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <driver-properties> <property name="user" value="用户名"/> <property name="password" value="密码"/> <property name="schema" value="数据库名"/> <property name="autoReconnect" value="true"/> </driver-properties> <house-keeping-sleep-time>90000</house-keeping-sleep-time> <maximum-new-connections>10</maximum-new-connections> <prototype-count>1</prototype-count> <maximum-connection-count>10</maximum-connection-count> <minimum-connection-count>2</minimum-connection-count> <maximum-active-time>900000</maximum-active-time> <maximum-connection-lifetime>14400000</maximum-connection-lifetime> <test-before-use>false</test-before-use> </proxool> </something-else-entirely>

     

     web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>pool1</servlet-name> <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class> <init-param> <param-name>xmlFile</param-name> <param-value>WEB-INF/proxool.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>proxool</servlet-name> <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>proxool</servlet-name> <url-pattern>/admin/proxool/</url-pattern> </servlet-mapping> </web-app>

     

     hibernate.cfg.xml 此文件放在 src 目录下

    <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property> <!--- 使用proxool.xml中定义的别名 --> <property name="proxool.pool_alias">pool1</property> <!-- 指定使用的proxoolConf文件的位置(这里在SRC下)--> <property name="proxool.xml">proxool.xml</property> <property name="proxool.existing_pool">true</property> <property name="dialect">org.hibernate.dialect.Oracle9iDialect</property> <property name="show_sql">true</property> <!-- 指定hibernate管理的映射文件 --> <mapping resource="test/test.hbm.xml"/> </session-factory> </hibernate-configuration>

     

    test.hbm.xml 此文件放在 src/test/ 下

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping> <class name="test.Test" table='test' dynamic-insert="true" dynamic-update="true" optimistic-lock="version"> <meta attribute="extends">BaseObject</meta> <meta attribute="extra-import">com.framework.hibernate.*</meta> <!--默认把类的变量映射为相同名字的表列,当然我们可以修改其映射方式--> <id name="cName" type="java.lang.String" column="CNAME" > <generator class="assigned" /> </id> <property name="cAddress" type="java.lang.String" column="CADDRESS"/> </class> </hibernate-mapping>

    注意: 此处必须要有主键

    <id name="cName" type="java.lang.String" column="CNAME" >    <generator class="assigned" /> </id>

    我设置为自己管理主键

    hibernate 主键详解

    http://blog.csdn.net/yefengmeander/archive/2009/07/13/4344250.aspx

     

     

     

    package test; public class Test { private String cName; private String cAddress; public void setcName(String value){ this.cName = value; } public String getcName(){ return this.cName; }; public void setcAddress(String value){ this.cAddress = value; } public String getcAddress(){ return this.cAddress; } }  

     

     

    测试页 myjsp.jsp

     

    <%@ page language="java" pageEncoding="gb2312"%><%@ page contentType="text/html; CHARSET=utf8" %>   <%@ page import="org.hibernate.Session"%><%@ page import="org.hibernate.Transaction"%><%@ page import="org.hibernate.SessionFactory"%><%@ page import="org.hibernate.cfg.Configuration"%><%@ page import="org.hibernate.tool.hbm2ddl.SchemaExport"%><%@ page import="test.*"%> <%

    Configuration conf= new Configuration();

    SessionFactory sessions = conf.configure().buildSessionFactory();   Session s = sessions.openSession(); Transaction t =  s.beginTransaction(); try{  //1.用普通使用方式建立对象,填充数据        Test p1 = new Test();     p1.setcName("测试");     p1.setcAddress("西安东郊黄陵");          s.save(p1);     t.commit();     out.print("完成"); }catch(Exception e){     t.rollback(); }finally{     s.close(); }%>

     

     

     

    最新回复(0)