Hibernate使用tomcat5.5连接池  作者:幻隐

来源:互联网 发布:怎么注册不了淘宝账号 编辑:程序博客网 时间:2024/05/17 22:14

 Hibernate使用tomcat5.5连接池
      在使用DAO来访问持久数据层,个人觉得系统运行效率较高,但是开发量和维护量太大。Hibernate很久前就了解了很多,但一直没有使用,现在开始尝试在一些小系统中使用Hibernate。
      对于数据源,很多系统都在使用application
      server来管理连接池。Hibernate支持JNDI来获取连接。昨晚看了一些网络文档,很多网友在配置描述中都说这是一件简单的事情,结果我折腾了一个晚上,没有解决问题,今天早上再仔细一看,是自己connection.datasource配置写错了。
      以下是一些手记:
        我使用mysql来做数据存储,数据库名称-server,插入表 create table `server`.`user`(
              `ID` int(11) PRIMARY KEY not null,
              `USERNAME` varchar(12) not null,
              `PASSWORD` varchar(12))

        tomcat5.5配置 <!-- server.xml -->
               <Resource name="DBserver"
                  type="javax.sql.DataSource"
                  username="root"
                  password="root"
                  driverClassName="org.gjt.mm.mysql.Driver"
                  maxIdle="2000"
                  maxWait="5000"
                  url="jdbc:mysql://localhost:3306/server"
                  maxActive="20"/>
              <!-- context.xml -->
              <Context>
                      <WatchedResource>WEB-INF/web.xml
              </WatchedResource>
              <ResourceLink global="DBserver"
                name="DBserver"
                type="javax.sql.DataSource"/>
              </Context>

        我用Myeclipse生成了user的持久对象 package cn.edu.ynu.db;
              
              /**
               * User generated by MyEclipse - Hibernate Tools
               */
              public class User implements java.io.Serializable {

                  // Fields   
                   private int id;
                   private String username;
                   private String password;

                  // Constructors
                  /** default constructor */
                  public User() {
                  }
                  /** minimal constructor */
                  public User(int id, String username) {
                      this.id = id;
                      this.username = username;
                  }
                 
                  /** full constructor */
                  public User(int id, String username, String password) {
                      this.id = id;
                      this.username = username;
                      this.password = password;
                  }
                
                  // Property accessors
                  public int getId() {
                      return this.id;
                  }
                 
                  public void setId(int id) {
                      this.id = id;
                  }
                  public String getUsername() {
                      return this.username;
                  }
                 
                  public void setUsername(String username) {
                      this.username = username;
                  }
                  public String getPassword() {
                      return this.password;
                  }
                 
                  public void setPassword(String password) {
                      this.password = password;
                  }
              }

        跟User.java有相同路径的hibernate对象描述文件User.hbm.xml <?xml version="1.0"?>
              <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping
              DTD 2.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
              <!--
                  Mapping file autogenerated by MyEclipse - Hibernate Tools
              -->
              <hibernate-mapping>
                  <class name="cn.edu.ynu.db.User" table="user">
                      <id name="id" type="int">
                          <column name="ID" />
                          <generator class="increment" />
                      </id>
                      <property name="username" type="string">
                          <column name="USERNAME" length="12" not-null="true" />
                      </property>
                      <property name="password" type="string">
                          <column name="PASSWORD" length="12" />
                      </property>
                  </class>
              </hibernate-mapping>

        Hibernate配置文件,在MyEclipse环境下,hibernate.cfg.xml在src目录下。对于connection.datasource,应该写全JNDI名称,而不是server.xml里面的Resource
        name。 <?xml version='1.0' encoding='UTF-8'?>
              <!DOCTYPE hibernate-configuration PUBLIC
                        "-//Hibernate/Hibernate Configuration DTD 2.0//EN"
                       
              "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
              <!-- Generated by MyEclipse Hibernate Tools.                   -->
              <hibernate-configuration>
              <session-factory>
               <property
              name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
               <property
              name="connection.datasource">java:comp/env/DBserver</property>
               <mapping resource="cn/edu/ynu/db/User.hbm.xml" />
              </session-factory>
              </hibernate-configuration>

        编写一个jsp测试文件,在J2EE环境下,使用jsp做测试比较便利。Configuration类的configure()方法是一个使用默认配置文件的初始化方法。它会读取classpath中的hibernate.cfg.xml进行配置。
              <%@ page language="java" pageEncoding="UTF-8"%>
              <%@ page import="net.sf.hibernate.*"%>
              <%@ page import="net.sf.hibernate.cfg.*"%>
              <%@ page import="cn.edu.ynu.db.*"%>
              <%
               try {
                SessionFactory sf = new
              Configuration().configure().buildSessionFactory();
                Session dbsession = sf.openSession();
                Transaction tx = dbsession.beginTransaction();
                for (int i = 0; i <200; i++) {
                 User user = new User();
                 user.setUsername("username" + i);
                 user.setPassword("username");
                 dbsession.save(user);
                
                 out.println("insert user:"+user.getUsername()+"<br>");
                }
                tx.commit();
                dbsession.close();
               } catch (HibernateException e) {
                e.printStackTrace();
               }
              %> 

原创粉丝点击