如例:
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>hibernateTest</groupId> <artifactId>hibernateTest</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>hibernateTest</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.3.1.GA</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.4.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-proxool</artifactId> <version>3.3.1.GA</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> <scope>runtime</scope> </dependency> </dependencies> <build> <finalName>hibernateTest</finalName> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>
resources/proxool.xml:
<?xml version="1.0" encoding="UTF-8"?> <something-else-entirely> <proxool> <!-- 连接池的别名 --> <alias>proxool</alias> <!-- proxool只能管理由自己产生的连接 --> <driver-url>jdbc:oracle:thin:@localhost:1521:XE</driver-url> <!--JDBC驱动程序--> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!-- 用户名与密码 --> <driver-properties> <property name="user" value="system" /> <property name="password" value="password" /> </driver-properties> <!-- 允许最大连接数 ,默认是15,这里设置为20--> <maximum-connection-count>20</maximum-connection-count> <!-- 最小连接数 ,默认是5,其实可以不用声明它--> <minimum-connection-count>5</minimum-connection-count> <!-- 测试连接的sql语句 --> <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql> </proxool> </something-else-entirely>
resources/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-3.0.dtd"> <hibernate-configuration> <session-factory name="sessionFactory"> <property name="hibernate.connection.provider_class"> org.hibernate.connection.ProxoolConnectionProvider </property> <property name="hibernate.proxool.pool_alias">proxool</property> <property name="hibernate.proxool.xml">proxool.xml</property> <!-- 输出sql --> <property name="hibernate.show_sql">true</property> <!-- 格式化sql --> <property name="hibernate.format_sql">true</property> <!--指定数据库适配器 --> <property name="dialect"> org.hibernate.dialect.OracleDialect </property> <!-- 映射文件 --> <mapping resource="hibernateTest/Student.hbm.xml" /> </session-factory> </hibernate-configuration>
hibernateTest/Student.java:
package hibernateTest; public class Student { private int id; private String name; private String address; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
hibernateTest/Student.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="hibernateTest.Student" table="STUDENT" node="stu"> <id name="id" column="ID" type="int" node="@stuId"> <generator class="sequence"> <!-- seq_student就是表student的主键自增的sequence --> <param name="sequence">seq_student</param> </generator> </id> <property name="name" column="name" type="string" node="myStudent/@name" /> <property name="address" column="address" type="string" node="address" /> <property name="age" column="age" type="int" node="myStudent/@age" /> </class> </hibernate-mapping>
util/HibernateUtil.java:
package util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory; static{ try { sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable e) { throw new ExceptionInInitializerError(e); } } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static void shutdown(){ getSessionFactory().close(); } }
util/StudentManager.java:
package util; import hibernateTest.Student; import java.io.IOException; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import org.hibernate.EntityMode; import org.hibernate.Session; import org.hibernate.Transaction; public class StudentManager { public static void main(String[] args) { //打开一个处理DOM4J数据的Session Session dom4jSession = HibernateUtil.getSessionFactory().openSession().getSession(EntityMode.DOM4J); Transaction transaction = dom4jSession.beginTransaction(); Element studentElement = (Element) dom4jSession.get(Student.class, 5); transaction.commit(); dom4jSession.close(); try { OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(System.out,format); writer.write(studentElement); } catch (IOException e) { throw new RuntimeException(); } //打开一个普通的session Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction1 = session.beginTransaction(); Student stu = (Student) session.get(Student.class, 5); System.out.println("id="+stu.getId()); System.out.println("name="+stu.getName()); System.out.println("address="+stu.getAddress()); System.out.println("age="+stu.getAge()); transaction1.commit(); session.close(); } }
如果是web应用,那么:
执行 http://localhost:8080/proxool-test/admin ( proxool-test 是你的应用名称 ) 如果没有任何 pool 状态的时候, 你只会看到 Pools 这几个字, 所以你先执行 http://localhost:8080/proxool-test/test.jsp 建立一个 connection, 就可以监控 connection pooling 的状态了.