Spring整合hibernate的applicationContext.xml配置

1.注解方式的实现

<?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:aop="http://www.springframework.org/schema/aop"

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

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

     xsi:schemaLocation="

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

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

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

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

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

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

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

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

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

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

      <property name="locations">

        <list>

            <value>classpath:jdbc.properties</value>

        </list>

      </property>

    </bean>

    <bean id="c3p0DataSource" destroy-method="close"

        class="com.mchange.v2.c3p0.ComboPooledDataSource">

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

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

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

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

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

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

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

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

    </bean>                

    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

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

        <property name="packagesToScan">

            <list>

                <value>com.test.bean</value>

            </list>

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">${dialect}</prop>

                <prop key="hibernate.show_sql">${show_sql}</prop>

                <prop key="hibernate.format_sql">${format_sql}</prop>

                <prop key="hibernate.use_sql_commants">${use_sql_comments}</prop>

                <prop key="hibernate.hbm2ddl.auto">${hbm2ddl.auto}</prop>

            </props>

        </property>

    </bean>

    <bean id="txManager"

        class="org.springframework.orm.hibernate4.HibernateTransactionManager">

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

    </bean>

    <tx:advice id="txAdvice" transaction-manager="txManager">

        <tx:attributes>

            <tx:method name="get*" read-only="true" />

            <tx:method name="*" />

        </tx:attributes>

    </tx:advice>

    <aop:config>

        <aop:pointcut id="bizMethods" expression="execution(* com.test.biz.*.*(..))" />

        <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />

    </aop:config>

</beans>

2.xml方式的实现

<?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:aop="http://www.springframework.org/schema/aop"

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

  xsi:schemaLocation="跟上面一样">          

    <!-- 讓spring 去读取指定路径下的资源文件 -->

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

      <property name="locations" value="classpath:jdbc.properties"/>

    </bean>  

    <!-- 配置c3p0连接池 -->

    <bean id="c3p0Source" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

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

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

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

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

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

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

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

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

    </bean>     

    <!-- 配置SessionFactory -->

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

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

      <property name="mappingResources">

          <list>

            <value>/com/cdzg/spring/bean/User.hbm.xml</value>

          </list>

</property>

      <property name="hibernateProperties">

        <props>

                <prop key="hibernate.dialect">${dialect}</prop>

                <prop key="hibernate.hbm2ddl.auto">${hbm2ddl.auto}</prop>

                <prop key="hibernate.show_sql">${show_sql}</prop>

                <prop key="hibernate.format_sql">${format_sql}</prop>

                <prop key="hibernate.use_sql_comments">${use_sql_comments}</prop>

            </props>

      </property>

    </bean> 

    <!-- 配置事务管理器 -->

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

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

    </bean>   

    <!-- 定义事务通知 -->

    <tx:advice id="txAdvice" transaction-manager="txManager">

      <tx:attributes>

        <tx:method name="get*" read-only="true"/>

        <tx:method name="*"/>

      </tx:attributes>

    </tx:advice>     

     <!-- 定义事务切面,并应用事务通知 -->   

     <aop:config>

      <aop:pointcut id="xxxBizImpl" expression="execution(* com.cdzg.spring.biz.*.*(..))"/>

      <aop:advisor pointcut-ref="xxxBizImpl" advice-ref="txAdvice"/>

     </aop:config>        

    <bean id="userDaoImpl" class="com.cdzg.spring.dao.impl.UserDaoImpl">

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

    </bean>

    <bean id="userBizImpl" class="com.cdzg.spring.biz.impl.UserBizImpl">

        <property name="userDao" ref="userDaoImpl" />

    </bean>

    <bean id="userAction" class="com.cdzg.spring.web.actions.UserAction">

        <property name="userBiz" ref="userBizImpl" />

    </bean>

</beans>

Spring整合mybatis的applicationContext.xml配置

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

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

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  

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

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

    xsi:schemaLocation="  

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

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

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

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

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

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

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

    http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd  

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

    http://www.springframework.org/schema/cache/spring-cache-3.1.xsd  

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

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

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

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

  

    <!-- 自动扫描web包 ,将带有注解的类 纳入spring容器管理 -->  

    <context:component-scan base-package="com.eduoinfo.finances.bank.web"></context:component-scan>  

  

    <!-- 引入jdbc配置文件 -->  

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  

        <property name="locations">  

            <list>  

                <value>classpath*:jdbc.properties</value>  

            </list>  

        </property>  

    </bean>  

  

    <!-- dataSource 配置 -->  

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  

        <!-- 基本属性 url、user、password -->  

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

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

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

  

        <!-- 配置初始化大小、最小、最大 -->  

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

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

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

  

        <!-- 配置获取连接等待超时的时间 -->  

        <property name="maxWait" value="60000" />  

  

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  

        <property name="timeBetweenEvictionRunsMillis" value="60000" />  

  

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  

        <property name="minEvictableIdleTimeMillis" value="300000" />  

  

        <property name="validationQuery" value="SELECT 'x'" />  

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

        <property name="testOnBorrow" value="false" />  

        <property name="testOnReturn" value="false" />  

  

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->  

        <property name="poolPreparedStatements" value="false" />  

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

  

        <!-- 配置监控统计拦截的filters -->  

        <property name="filters" value="stat" />  

    </bean>  

  

    <!-- mybatis文件配置,扫描所有mapper文件 -->  

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml" p:mapperLocations="classpath:com/eduoinfo/finances/bank/web/dao/*.xml" />  

  

    <!-- spring与mybatis整合配置,扫描所有dao -->  

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="com.eduoinfo.finances.bank.web.dao" p:sqlSessionFactoryBeanName="sqlSessionFactory" />  

  

    <!-- 对dataSource 数据源进行事务管理 -->  

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" />  

  

    <!-- 配置使Spring采用CGLIB代理 -->  

    <aop:aspectj-autoproxy proxy-target-class="true" />  

  

    <!-- 启用对事务注解的支持 -->  

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

  

    <!-- Cache配置 -->  

    <cache:annotation-driven cache-manager="cacheManager" />  

    <bean id="ehCacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml" />  

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehCacheManagerFactory" />  

  

</beans> 

注解的整体把握 

1、<context:component-scan base-package="com.eduoinfo.finances.bank.web"></context:component-scan> 作用

Spring 容器初始化的时候,会扫描 com.eduoinfo.finances.bank.web下 标有 (@Component,@Service,@Controller,@Repository) 注解的 类 纳入spring容器管理

在类上 ,使用以***解,实现bean 的声明

@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Service 用于标注业务层组件

@Controller 用于标注控制层组件(如srping mvc的controller,struts中的action)

@Repository 用于标注数据访问组件,即DAO组件

示例:

@Controller
@RequestMapping(value = "/test")
public class TestController {

}

------------------------------------------------------------------------------------------------------------------

在类的成员变量上,使用以***解,实现属性的自动装配

@Autowired : 按类 的 类型进行装配

@Resource (推荐) : 1 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

    2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 

    3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 

    4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。 

示例:

@Resource
private TestServiceImpl testServiceImpl;