Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发

1.首先引入所需的jar

Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发_第1张图片

2.整体的工程目录为:

Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发_第2张图片

3.开始配置bean.xml(说明一点数据源的一些基本信息还是和之前一样保存在了properties文件中)

"1.0" encoding="UTF-8"?>

"http://www.springframework.org/schema/beans"

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

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xmlns:tx="http://www.springframework.org/schema/tx"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context-2.5.xsd

           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

   

      


       

      "com.gaoyuan.service"/>

     

      "classpath:jdbc.properties"/> 

       

        "dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    "driverClassName" value="${driverClassName}"/>

    "url" value="${url}"/>

    "username" value="${username}"/>

    "password" value="${password}"/>

     

 "initialSize" value="${initialSize}"/>

 

 "maxActive" value="${maxActive}"/>

 

 "maxIdle" value="${maxIdle}"/>

 

 "minIdle" value="${minIdle}"/>

   


   

      "sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

     "dataSource" ref="dataSource"/>

 "mappingResources">

    

      

      com/gaoyuan/bean/Person.hbm.xml

    

 

     "hibernateProperties">

     

    

        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

        hibernate.hbm2ddl.auto=update

        hibernate.show_sql=false

        hibernate.format_sql=false

        

        

        hibernate.cache.use_second_level_cache=true

        

                hibernate.cache.use_query_cache=false

                

             hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider

      

     

 

 

 "txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

   "sessionFactory" ref="sessionFactory"/>

 

 

 "txManager"/>

4.定义实体类

Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发_第3张图片

实体的配置文件:(Person.hbm.xml)

Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发_第4张图片

5.PersonServiceImpl.java的实现:

package com.gaoyuan.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Propagation;

import org.springframework.transaction.annotation.Transactional;

import com.gaoyuan.bean.Person;

import com.gaoyuan.service.PersonService;

@Service("personService")

@Transactional

public class PersonServiceImpl implements PersonService {

@Resource

private SessionFactory sessionFactory;

public void save(Person person){

//getCurrentSession调用此方法取得spring管理的session,不能用hibernate中的openSession方法来取得

//session,如果是这样取的话,取到的session spring将不会管理它事务。

//persist()方法和save()方法的作用一样,但是persist()方法是跟JPA规范保持一致的,所以更规范一些。

sessionFactory.getCurrentSession().persist(person);

}

public void update(Person person){

//merge()方法和update()方法的作用一样,但是同样是和JPA规范保持一致,将游离的对象进行更新操作之后,返回脱管的对象。

sessionFactory.getCurrentSession().merge(person);

}

//读取操作的时候,将事务关闭,不用再打开事务,这样可以提高性能

@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

public Person getPerson(Integer id){

return (Person) sessionFactory.getCurrentSession().get(Person.class, id);

}

public void delete(Integer id){

sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession()

.load(Person.class, id));

}

//读取操作的时候,将事务关闭,不用再打开事务,这样可以提高性能

@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)

@SuppressWarnings("unchecked")

public List getPersons(){

return sessionFactory.getCurrentSession().createQuery("from Person").list();

}

}

6.与其对应的接口PersonService

Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发_第5张图片

7.测试:

Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发_第6张图片

8.配置hibernate的二级缓存:

那个实体需要配置缓存时,可以像Person.hbm.xml文件中的配置缓存方法一样,配置二级缓存,当指明那个实体配置二级缓存之后,还需要配置ehcache.xml文件。此文件配置如下:

"1.0" encoding="UTF-8"?>

    "D:\cache"/>

    "1000" eternal="false" overflowToDisk="true"

        timeToIdleSeconds="120"

        timeToLiveSeconds="180"

        diskPersistent="false"

        diskExpiryThreadIntervalSeconds="60"/>

    

"com.gaoyuan.bean.Person" maxElementsInMemory="100" eternal="false"

    overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" diskPersistent="false"/>

测试二级缓存结果,会在指定的path(上面指定的是D:/cache)下产出如下文件:

Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发_第7张图片

你可能感兴趣的:(Spring学习笔记(六)-Spring2.5与Hibernate3.3整合开发)