1 Hibernate 连接池

   hibernate自带一个连接池,但是这个连接池的性能不好,BUG也比较多,所以hibernate借助第三方的连接池来配置。通常用的比较多的是prxool。目前在j2ee中最通用的框架ssh中,hibernate的配置如下:

  spring applicationContext.xm.配置文件里配置数据源连接信息:

<!-- 配置数据源 -->

   <bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

     <property name="driverClassName">

   <value>org.logicalcobwebs.proxool.ProxoolDriver</value>

     </property>

     <property name="url">

        <value>proxool.spring_user</value>

     </property>

   </bean>

   web.xml中做如下配置

<!-- 制定proxool.xml放置的位置 -->

     <param-value>WEB-INF/proxool.xml</param-value>

   </context-param>

   <listener>

proxool.xml连接池配置文件放入到工程里WEB-INF目录下,其中proxool.xml的内容如下:

<?xml version="1.0" encoding="utf-8"?>   

 <!-- the proxool configuration can be embedded within your own application's.    

 Anything outside the "proxool" tag is ignored. -->   

 <something-else-entirely>   

     <proxool>   

         <alias>spring_user</alias>

      <driver-url>jdbc:mysql://192.168.1.150:3306/chiyuweb</driver-url>   

         <driver-class>com.mysql.jdbc.Driver</driver-class>   

         <driver-properties>   

             <property name="user" value="root" />   

             <property name="password" value="123456" />   

             <property name="useUnicode" value="true" />   

             <property name="characterEncoding" value="GBK" />   

         </driver-properties>   

        <minimum-connection-count>5</minimum-connection-count>            <maximum-connection-count>50</maximum-connection-count>           <maximum-active-time>60000</maximum-active-time>   

         <house-keeping-test-sql>select 1</house-keeping-test-sql>   

         <prototype-count>5</prototype-count>   

         <house-keeping-sleep-time>60000</house-keeping-sleep-time>   

     </proxool>   

 </something-else-entirely>

 注:prxool这个文件里<alias>spring_user</alias> 表示连接的别名,一个连接池可以配置多个连接

2 Hibernate 多条件分页查询

   Hibernate的多条件查询的方法有很多种,比较常用的有两种,一种的创建Query对象,一种是创建Criteria对象。

    Query对象查询:Hibernate上下文对象query= session.createQuery(HQL); query.setParameters(Object[] params,Type[] types)返回一个根据参数查询的List集合。分页方法query.setFirstResult(START),START参数表示从查询到的结果集里第几条记录开始取query.setMaxResults(ROWS),ROWS表示分页信息中每页查询的记录条数。根据如上方法即可以实现hibernate多条件分页查询。其中query.setParameters方法的两个参数,params,types。他们是一一对应,成对出现的,所以最后用顺序表来保存他们的值,即两个用ArrayList来成对存储两个参数,然后将他们转化成数组。Type类型是org.hibernate中的Type类。如果参数是String类型,则参数需要设置成Hibernate.STRING,如他类型依次类推。时间类型需要注意如果比较精确到天,类型可设置成Hibernate.DATE,如果时间要精确到秒,则时间类型需要设置成Hibernate.TIMESTAMPS.

           Criteria对象查询,调用session.createCriteria(Type type).add() type是反射包里面的Type (若查User类 ,则传入User.class),add()方法能够传入字段的名称 addOrder方法能够传入排序规则,如此实现多条件查询。分页方法同query

3 Hibernate关联关系

Hibernate通常用的关联关系有三种:一对一,一对多和多对多。

一对一的方式有两种:一种是联合主键;一种是通过其他列来关联,即多对一的特殊形式,将多对一unique属性设置为true。配置方法网上都有这里就不啰嗦。

     多对多关系并不提倡用many-to-many方式来配,通常用两个一对多的关系来实现。

      一对多关系,这个关系的配的时候要特别注意,在多的一方<many-to-one/> 这边的lazy属性一般不要设置为false。这样配会大大的降低程序的性能。还有就是关联的列最好不要设置成外键关系,以为这样做加了外键会使数据库不易维护。关联列单独设置,在实体配置文件中这个列的约束这样设置 insert=”false”  update=”false” 即可。

对于一对多自连接关系举一个实例来说明:

比如一个Person类里有老师和学生的关系

Person.hbm.xml配置如下

<property name=”teacher_id” type=”java.lang.Integer” insert=”false”  update=”false”  />

<set name="students" cascade="save-update" inverse="true" lazy="true">

     <key column="teacher_id" />

        <one-to-many class="Person" />

     </set>

 

   <many-to-one name="student" column="teacher_id"

        class="Person" cascade="save-update" />