hithyc 2017-10-24
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!-- 初始化连接数 -->
        <property name="initialPoolSize" value="3"/>
        <!-- 最小连接数  -->
        <property name="minPoolSize" value="3"/>
        <!-- 最大连接时间 -->
        <property name="maxConnectionAge" value="28800"/>
    
    </bean><!-- 配置sessionFactory -->
   <bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"  id="sessionFactory">
     <!-- 关联数据源和SessionFactory -->
      <property name="dataSource" ref="dataSource"/>
       <!-- hiberna的配置文件 -->
      <property name="hibernateProperties" >
      <props>
      <!-- 数据库方言的设置 -->
  				<prop key="hibernate.dialect">${dialect}</prop>
  				<!--设置session上下文这里不能设置thread,设置thread就需要手动管理并不能让Spring管理,要么不指定要么指定下面的类 -->
  				<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
  				<!-- 显示SQl和格式化SQl  -->
  				<prop key="hibernate.show_sql">${showSql}</prop>
      </props>    
      </property>
      <property name="packagesToScan" value="com.zhidi.entity">
      </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>
    <!-- 配置增删改的方法 这里设置的方法可以自动注入 这里的name的方法可以自动搜索 可以定义多个常用的方法名 -->
    <tx:method name="save*" propagation="REQUIRED"/>
    <tx:method name="delect*" propagation="REQUIRED"/>
    <tx:method name="update*" propagation="REQUIRED"/>
    <!--配置查询的方法  REQUIRED表示没有逻辑事务的情况下会自己生产一个,如果有就自动加入
       SUPPORTS是如果当前有逻辑事务存在就加入到事务中,如果没有就以非事务进行处理 -->
    <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
    </tx:attributes>
    </tx:advice>将配置好的数据库的AOP的具体实现通过切入点注入到对应的地方去引用。
<!-- aop配置 --> <aop:config> <!--将配置好的通知嵌入到切点相关联 --> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.zhidi.service.impl..*.*(..))" /> </aop:config>
<!-- 注解模式的注入--> <tx:annotation-driven transaction-manager="txManager"/>
###注解配置的代码类的实现。。。。
@Transactional
  @Repository
  public class EmpDao implements EmpDaoImpl {
    
  
  	@Autowired
  	private DataSource dataSource;
      
      @Autowired
      private SessionFactory sessionFactory;
      
      
      public Session getSession() {
      	
  		return sessionFactory.getCurrentSession();
  	}
  	
  	public DataSource getDataSource() {
  		
  		return dataSource;
  	}
  	@Transactional(readOnly=true,propagation=Propagation.SUPPORTS)
  	public void get(){
  		Session session = getSession();
  		Transaction tx = session.beginTransaction();
  		   Emp emp = (Emp) session.get(Emp.class, 2);
  		   System.out.println(emp);
  		tx.commit();
  	}