美文网首页
Spring学习笔记(六)-Spring2.5与Hibernat

Spring学习笔记(六)-Spring2.5与Hibernat

作者: G__yuan | 来源:发表于2019-07-11 14:18 被阅读0次

1.首先引入所需的jar

2.整体的工程目录为:

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

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

<beans xmlns="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">

   <!--基于注解方式声明切面  -->

      <!--  <aop:aspectj-autoproxy/> -->

       <!--配置自动扫描  -->

      <context:component-scan base-package="com.gaoyuan.service"/>

      <!--当连接数据库的信息写在properties文件中时,配置下面的标签,也就是官方说法,配置占位符  -->

      <context:property-placeholder location="classpath:jdbc.properties"/> 

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

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

    <property name="driverClassName" value="${driverClassName}"/>

    <property name="url" value="${url}"/>

    <property name="username" value="${username}"/>

    <property name="password" value="${password}"/>

     <!-- 连接池启动时的初始值 -->

 <property name="initialSize" value="${initialSize}"/>

 <!-- 连接池的最大值 -->

 <property name="maxActive" value="${maxActive}"/>

 <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->

 <property name="maxIdle" value="${maxIdle}"/>

 <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->

 <property name="minIdle" value="${minIdle}"/>

   </bean>

   <!-- 把hibernate中的sessionFactory交给spring去管理-->

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

     <property name="dataSource" ref="dataSource"/><!--数据源的用的是上面配置的dataSource  -->

 <property name="mappingResources">

    <list>

      <!--这里面存放hibernate中定义实体对应的xml  -->

      <value>com/gaoyuan/bean/Person.hbm.xml</value>

    </list>

 </property>

     <property name="hibernateProperties">

      <!--配置hibernate的方言-->

    <value>

        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

        hibernate.hbm2ddl.auto=update

        hibernate.show_sql=false

        hibernate.format_sql=false

        <!--配置hibernate的二级缓存-->

        <!--说明是否使用hibernate的二级缓存-->

        hibernate.cache.use_second_level_cache=true

        <!-- 是否开启查询缓存 -->

                hibernate.cache.use_query_cache=false

                <!-- 缓存产品的驱动类 -->

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

      </value>

     </property>

 </bean>

 <!-- 配置spring专门为hibernate提供的事务管理org.springframework.orm.hibernate3.HibernateTransactionManager这个类时针对hibernate的-->

 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

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

 </bean>

 <!--打开注解的支持,然后在程序中就可以用注解的方式配置事务,transaction-manager属性的意思配置事务管理器,将上面配置的txManager事务管理器交给它。  -->

 <tx:annotation-driven transaction-manager="txManager"/>

</beans>

4.定义实体类

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

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<Person> getPersons(){

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

}

}

6.与其对应的接口PersonService

7.测试:

8.配置hibernate的二级缓存:

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

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

<!--

    defaultCache节点为缺省的缓存策略

     maxElementsInMemory 内存中最大允许存在的对象数量

     eternal 设置缓存中的对象是否永远不过期

     overflowToDisk 把溢出的对象存放到硬盘上

     timeToIdleSeconds 指定缓存对象空闲多长时间就过期,过期的对象会被清除掉

     timeToLiveSeconds 指定缓存对象总的存活时间

     diskPersistent 当jvm结束是是否持久化对象

     diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间

 -->

<ehcache>

    <diskStore path="D:\cache"/>

    <defaultCache  maxElementsInMemory="1000" eternal="false" overflowToDisk="true"

        timeToIdleSeconds="120"

        timeToLiveSeconds="180"

        diskPersistent="false"

        diskExpiryThreadIntervalSeconds="60"/>

    <!-- 为缓存域为cn.itcast.bean.Person,(也就是Person.hbm.xml文件中定义的缓存域)定义特殊的缓存策略,

     如果不定义的话,默认使用上面的缓存策略。-->

<cache name="com.gaoyuan.bean.Person" maxElementsInMemory="100" eternal="false"

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

</ehcache>

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

相关文章

网友评论

      本文标题:Spring学习笔记(六)-Spring2.5与Hibernat

      本文链接:https://www.haomeiwen.com/subject/poorkctx.html