Hibernate配置

来源:互联网 发布:做吉他谱的软件 编辑:程序博客网 时间:2024/06/02 01:57

下面是Spring配置文件中配置Hibernate SessionFactory的示范代码:

<?xml version="1.0" encoding="GBK"?>

<!-- beans是Spring配置文件的根元素,并且指定了Schema信息 -->

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 定义数据源Bean,使用C3P0数据源实现 -->

<bean id="dataSource" class="com.mchange.v2.c3p0. ComboPooledDataSource"

destroy-method="close">

<!-- 指定连接数据库的驱动 -->

<property name="driverClass" value="com.mysql.jdbc.Driver"/>

<!-- 指定连接数据库的URL -->

<property name="jdbcUrl" value="jdbc:mysql://localhost/j2ee"/>

<!-- 指定连接数据库的用户名 -->

<prope

rty name="user" value="root"/>

<!-- 指定连接数据库的密码 -->

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

<!-- 指定连接数据库连接池的最大连接数 -->

<property name="maxPoolSize" value="40"/>

<!-- 指定连接数据库连接池的最小连接数 -->

<property name="minPoolSize" value="1"/>

<!-- 指定连接数据库连接池的初始化连接数 -->

<property name="initialPoolSize" value="1"/>

<!-- 指定连接数据库连接池的连接最大空闲时间 -->

<property name="maxIdleTime" value="20"/>

</bean>

<!-- 定义Hibernate的SessionFactory -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.

LocalSessionFactoryBean">

<!-- 依赖注入数据源,正是上文定义的dataSource -->

<property name="dataSource" ref="dataSource"/>

<!-- mappingResources属性用来列出全部映射文件 -->

<property name="mappingResources">

<list>

<!-- 以下用来列出所有的PO映射文件 -->

<value>lee/MyTest.hbm.xml</value>

</list>

</property>

<!-- 定义Hibernate的SessionFactory属性 -->

<property name="hibernateProperties">

<props>

<!-- 指定Hibernate的连接方言 -->

<prop key="hibernate.dialect">org.hibernate.dialect.

MySQLDialect</prop>

<!-- 配置启动应用时,是否根据Hibernate映射自动创建数据表 -->

<prop key="hibernate.hbm2ddl.auto">update</prop>

</props>

</property>

</bean>

</beans>

一旦在Spring的IoC容器中配置了SessionFactory Bean,它将随应用的启动而加载,并可以充分利用IoC容器的功能,将SessionFactory Bean注入任何Bean,比如DAO组件。一旦DAO组件获得了SessionFactory Bean的引用,就可以完成实际的数据库访问。

当然,Spring也支持访问容器数据源。如果需要使用容器数据源,可将数据源Bean修改成如下配置:

<!-- 此处配置JNDI数据源 -->

<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName">

<!-- 指定数据源的JNDI -->

<value>java:comp/env/jdbc/myds</value>

</property>

</bean>

可见,以声明式的方式管理SessionFactory实例,可以让应用在不同数据源之间切换。如果应用更换数据库等持久层资源,只需对配置文件进行简单修改即可。

提示:以声明式的方式管理SessionFactory,非常类似于早期将数据库服务的相关信息放在web.xml文件中进行配置。这种方式是为了提供更好的适应性,当持久层服务需要更改时,应用代码无须任何改变。

1.5.3 使用HibernateTemplate

HibernateTemplate 提供持久层访问模板,使用HibernateTempla

te无须实现特定接口,它只需要提供一个SessionFactory的引用就可执行持久化操作。SessionFactory对象既可通过构造参数传入,也可通过设值方式传入。HibernateTemplate提供如下3个构造函数:

● HibernateTemplate()。

● HibernateTemplate(org.hibernate.SessionFactory sessionFactory)。

● HibernateTemplate(org.hibernate.SessionFactory sessionFactory, boolean allowCreate)。

第一个构造函数,构造一个默认的HibernateTemplate实例。因此,使用Hibernate- Template实例之前,还必须使用方法setSessionFactory(SessionFactory sessionFactory)来为HibernateTemplate传入SessionFactory的引用。

第二个构造函数,在构造时已经传入SessionFactory引用。

第三个构造函数,其boolean型参数表明,如果当前线程已经存在一个非事务性的Session,是否直接返回此非事务性的Session。

在Web应用中,通常启动时自动加载ApplicationContext,SessionFactory和DAO对象都处在Spring上下文管理下,因此无须在代码中显式设置,可采用依赖注入完成Session- Factory和DAO的解耦,依赖关系通过配置文件来设置,如下所示:

<?xml version="1.0" encoding="GBK"?>

<!-- beans是Spring配置文件的根元素,并且指定了Schema信息 -->

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 定义数据源Bean,使用C3P0数据源实现 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"

destroy-method="close">

<!-- 指定连接数据库的驱动 -->

<property name="driverClass" value="com.mysql.jdbc.Driver"/>

<!-- 指定连接数据库的URL -->

<property name="jdbcUrl" value="jdbc:mysql://localhost/j2ee"/>

<!-- 指定连接数据库的用户名 -->

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

<!-- 指定连接数据库的密码 -->

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

<!-- 指定连接数据库连接池的最大连接数 -->

<property name="maxPoolSize" value="40"/>

<!-- 指定连接数据库连接池的最小连接数 -->

<property name="minPoolSize" value="1"/>

<!-- 指定连接数据库连接池的初始化连接数 -->

<property name="initialPoolSize" value="1"/>

<!-- 指定连接数据库连接池的连接最大空闲时间 -->

<property name="maxIdleTime" value="20"/>

</bean>

<!-- 定义Hibernate的SessionFactory Bean -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.

LocalSessionFactoryBean">

<!-- 依赖注入数据源,注入的正是上文中定义的dataSource -->

<property name="dataSource" ref="dataSource"/>

<!-- mappin

gResources属性用来列出全部映射文件 -->

<property name="mappingResources">

<list>

<!-- 以下用来列出所有的PO映射文件 -->

<value>lee/Person.hbm.xml</value>

</list>

</property>

<!-- 定义Hibernate的SessionFactory属性 -->

<property name="hibernateProperties">

<props>

<!-- 指定Hibernate的连接方言 -->

<prop key="hibernate.dialect">org.hibernate.dialect.

MySQLDialect</prop>

<!-- 指定启动应用时,是否根据Hibernate映射文件创建数据表 -->

<prop key="hibernate.hbm2ddl.auto">update</prop>

</props>

</property>

</bean>

<!-- 配置Person持久化类的DAO bean -->

<bean id="personDao" class="lee.PersonDaoImpl">

<!-- 采用依赖注入来传入SessionFactory的引用 -->

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

</beans>

在 PersonDao组件中,所有的持久化操作都通过HibernateTemplate实例完成,而HibernateTemplate操作数据库非常简洁,大部分CRUD操作都可通过一行代码解决问题。下面介绍如何通过HibernateTemplate进行持久层访问。

HibernateTemplate 提供了非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加了对命名SQL查询的支持,也增加了对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:

● void delete(Object entity),删除指定持久化实例。

● deleteAll(Collection entities),删除集合内全部持久化类实例。

● find(String queryString),根据HQL查询字符串来返回实例集合。

● findByNamedQuery(String queryName),根据命名查询返回实例集合。

● get(Class entityClass, Serializable id),根据主键加载特定持久化类的实例。

● save(Object entity),保存新的实例。

● saveOrUpdate(Object entity),根据实例状态,选择保存或者更新。

● update(Object entity),更新实例的状态,要求entity是持久状态。

● setMaxResults(int maxResults),设置分页的大小。

0 0