Spring+Hibernate : 声明式事务

Spring与Hibernate集成实现声明式事务管理 本文还有配套的精品资源,点击获取 简介:本文深入探讨了如何集成Spring和Hibernate框架,特别关注于声明式事务配置与使用。Spring框架通过DI和AOP功能简化Java应用开发,而Hibernate作为一个ORM框架,简化了数据库操作。两者集成后,开发者可以利用Spring的事务管理能力,通过配置文件或注解的方式定义事务边界,提升开发效率和代码质量。文章通过实例... 阅读详情

本博文来学习和总结Spring + Hibernate 的声明式事务,

  1. Spring 中配置数据源的4中方式,主要关注c3p0数据源;
  2. Spring 的PropertyPlaceholderConfigurer :将properties属性值读入到xml文件中;
  3. 事务的常见六种传播特性介绍;
  4. Spring 和 Hibernate 集成声明式事务的四大步骤;
  5. Spring 和 Hibernate 集成过程中版本冲突问题;
  6. 项目代码演示;
  7. 总结语;

1. Spring中配置数据源

1.1 Spring 自带的数据源: DriverManagerDataSource;
spring自身提供了三个没有连接池功能的数据源类(均位于org.springframework.jdbc.datasource 包中)

  • DriverManagerDatasource
  • SimpleDriverDatasource
  • SingleConnectionDatasource

    xml代码:

    <bean id="dataSource"     
        <class="org.springframework.jdbc.datasource.DriverManagerDataSource">     
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />  
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL" />  
        <property name="username" value="scott" />     
        <property name="password" value="****" />  
    </bean>  

1.2 第三方数据源:dbcp 数据源和 c3p0数据源
Apache CommonsDBCP数据源地址
c3p0数据源地址

1.2.1 dbcp
dbcp的配置依赖于2个jar包commons-dbcp.jar,commons-pool.jar。

xml配置:

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"         
            destroy-method="close">         
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />  
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL" />  
        <property name="username" value="scott" />     
        <property name="password" value="****" />        
    </bean>   

1.2.2 c3p0数据源

xml配置:

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"         
                destroy-method="close">        
            <property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>        
            <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>        
            <property name="user" value="scott"/>        
            <property name="password" value="****"/>        
     </bean>   

c3p0参数配置:
官网上对各个参数及其意义及如何配置说的很清楚;

这里写图片描述

  • acquireIncrement:当连接池中的连接用完时,C3P0一次性创建新连接的数目;

  • acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30;

  • acquireRetryDelay:两次连接中间隔时间,单位毫秒,默认为1000;

  • autoCommitOnClose:连接关闭时默认将所有未提交的操作回滚。默认为false;

  • automaticTestTable:
    C3P0将建一张名为Test的空表,并使用其自带的查询语句进行测试。

  • breakAfterAcquireFailure:获取连接失败将会引起所有等待获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调
    用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认为
    false;

  • checkoutTimeout:当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒,默认为0;

  • connectionTesterClassName:
    通过实现ConnectionTester或QueryConnectionTester的类来测试连接,类名需设置为全限定名。默认为
    com.mchange.v2.C3P0.impl.DefaultConnectionTester;

  • idleConnectionTestPeriod:隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查;

  • initialPoolSize:初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3;

  • maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0;

  • maxPoolSize:连接池中保留的最大连接数。默认为15;

  • maxStatements:JDBC的标准参数,用以控制数据源内加载的PreparedStatement数量。但由于预缓存的Statement属
    于单个Connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素,如果maxStatements与
    maxStatementsPerConnection均为0,则缓存被关闭。默认为0;

  • maxStatementsPerConnection:连接池内单个连接所拥有的最大缓存Statement数。默认为0;

  • numHelperThreads:C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能,通过多线程实现多个操作同时被执行。默认为3;

  • preferredTestQuery:定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个参数能显著提高测试速度。测试的表必须在初始数据源的时候就存在。默认为null;

  • propertyCycle: 用户修改系统配置参数执行前最多等待的秒数。默认为300;

  • testConnectionOnCheckout:因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都
    将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
    等方法来提升连接测试的性能。默认为false;

  • testConnectionOnCheckin:如果设为true那么在取得连接的同时将校验连接的有效性。默认为false。


1.4 JNDI数据源
Spring应用程序通常部署在Java EE应用服务器中,如JBoss,Tomcat这样的Web容器。这些服务器允许配置通过jndi获取数据源。

在spring配置文件中如下设置:

<beans>
    <jee:jndi-lookup id="datasource" jndi-name="java:comp/env/jdbc/myDataSource"/>
</beans>

在服务器中的配置以tomcat为例:

<Resource 
    name="jdbc/myDataSource" 
    type="javax.sql.DataSource"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    url="jdbc:oracle:thin:@193.23.42.6:1521:myDataSource"
    username="scott" 
    password="****" 
    maxActive="80" 
/>


  • Spring 的PropertyPlaceholderConfigurer :将properties属性值读入到xml文件中;

2.1 在这之前我们先看看Hibernate的文件 *hibernate.cfg.xml 是怎么配置,*

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property>
        <property name="connection.username">scott</property>
        <property name="connection.password">qian</property>
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.OracleDialect</property>
        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="com/qian/domain/User.hbm.xml"/>
     </session-factory>
</hibernate-configuration>

2.2 接下来,我们以读取配置文件的方式配置数据源,那么hibernate.cfg.xml如下:

hibernate.cfg.xml

<hibernate-configuration>

    <session-factory>

        <!-- 配置hibernate基本信息 -->  
        <!-- 1.数据源配置在IOC容器中,此处不需要额外配置 -->  
        <!-- 2.关联的.hbm.xml文件也可以在IOC容器配置SessionFactory时配置 -->  
        <!-- 3.此处配置hibernate的基本信息:数据库方言、SQL显示及格式化,及生成数据表的策略,二级缓存等 --> 

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.OracleDialect</property>
        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <property name="hibernate.format_sql">true</property
    <property name="hibernate.hbm2ddl.auto">update</property>

        <mapping resource="com/spring/trans/domain/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

2.3 使用c3p0在 spring IOC容器中显示配置

applicationContext.xml

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
    <property name="user" value="scott"/>
    <property name="password" value="qian"/>
    <property name="initialPoolSize" value="3"/>
</bean>     

2.4 将数据源的配置信息放入到 jdbc.properties中如下:

jdbc.properties

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:ORCL
jdbc.userName=scott
jdbc.password=qian
jdbc.initialPoolSize=3

2.5 应用spring的PropertyPlaceholderConfigurer将上下文(配置文件) 中的属性值在 xml 文件中以 ${key} 形式读入,

第一种方式:

<bean id="" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>classpath:jdbc.properties</value>
        </property>
</bean>

如要读取读个配置文件 使用方法setLocations:

<bean id="" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
                <value>classpath:infors.properties</value>
            </list>
        </property>
</bean>

第二种方式:为了简化上述这样的配置,Spring 给出了<context: property-placeholder/> 元素,因此上式可以简化为:

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

此时,数据源配置如下:

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <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="${jdbc.initialPoolSize}"/>
</bean>

如要改动相关信息,我们只需要去改properties文件即可;



  • 事务传播特性介绍

事务:是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,(要么成功,要么失败)。
事务特性分为四个:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)简称ACID。
Spring事务对数据库事务操作的一次封装,相当于把使用JDBC代码开启、提交、回滚事务进行了封装。

事务的传播特性: 是保证事务是否开启,业务逻辑是否使用同一个事务的保证。

  • PROPAGATION_REQUIRED:
    • 如果存在一个事务,则支持当前事务。如果没有事务则开启
  • PROPAGATION_REQUIRES_NEW:
    • 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
  • PROPAGATION_SUPPORTS:
    • 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
    • PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。
  • PROPAGATION_MANDATORY:
    • 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
  • PROPAGATION_NEVER:
    • 总是非事务地执行,如果存在一个活动事务,则抛出异常

这里写图片描述


  • Spring 和 Hibernate 集成声明式事务的四大步骤;

4.1 配置SessionFactory, 将hibernate.cfg.xml 文件交给Spring,通过Spring提供的 LocalSessionFactoryBean配置Hibernate的SessionFactory

<!-- Step 0 配置自己的dataSource, 早期我们在hibernate.cfg.xml中配置的直接 -->
<!-- 把hibernate.cfg.xml给了spring就好,现在我们在spring applicationContext.xml配置数据源 -->
<!-- ** myDataSource ** -->
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <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="${jdbc.initialPoolSize}"/>
</bean>
<!--Step 1:  配置Hibernate的SessionFactory,通过spring提供的 LocalSessionFactoryBean配置-->
<!-- ** mySessionFactory** -->
<bean id="mySessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource">
        <!-- step 0中的数据源名称 -->
        <ref bean="myDataSource"/>
    </property>
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <!-- 如果我们不在hibernate.cfg.xml中配置User.hbm.xml和Log.hbm。xml我们也可以在这配置 -->
    <!--  
    <property name="mappingLocations">
        <value>classpath:com/spring/trans/domain/*.hbm.xml</value>
    </property>
    -->
</bean>

4.2 配置事务管理器,将spring生产的sessionFactory注入到事务管理器上,

<!--Step 2:  配置 Spring 的声明式事物 -->  
<!-- ** myTransactionManager -->
<bean id="myTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory">
        <!-- step 1中的SessionFactory名称 -->
        <ref bean="mySessionFactory"/>
    </property>
</bean>

4.3 配置事务的转播特性

<!--Step 3:  配置事物属性 ,需要事物管理器--> 
<!-- **myTxAdvice** -->
<!-- step 2 中的myTransactionManager名称 -->
<tx:advice id="myTxAdvice" transaction-manager="myTransactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="modify*" propagation="REQUIRED"/>
        <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
    </tx:attributes>
</tx:advice>

4.4 配置事务的切点,并将事务属性和切点管理起来

<!--Step 4:  配置事物切点,并把事物属性和切点关联起来 --> 
<aop:config>
    <aop:pointcut expression="execution(* com.spring.trans.manager.*.*(..))" id="myPointcut"/>
    <!-- step 3: myTxAdvice -->
    <aop:advisor advice-ref="myTxAdvice" pointcut-ref="myPointcut"/>
</aop:config>

注意:
最后将将spring生成的SessionFactory注入给IOC容器中的实体bean,要不它找不到SessionFactory。

 <bean id="userManagerImpl" class="com.spring.trans.manager.UserManagerImpl">
    <!-- ** 将spring生成的sessionFactory注入到Ioc需要使用的类中; -->
        <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
        </property>
        <property name="logManager">
            <ref bean="logManagerImpl"/>
        </property>
 </bean>


  • Spring 和 Hibernate 集成过程中版本冲突问题;

    5.1 在继承 Spring 和Hibernate即使都配置对了,还是会报各种异常,大致为,类找不到,这个好解决,加入相应的架包就可以解决; BeanCreateException等异常,我原来用的Spring 4.3 和Hibernate 5.1.10 一直出现异常,后将Hibernate 换成最新的Hibernate5.2.11就好了;所以很多时候,我们要关注是不是版本冲突导致的;



  • 项目代码示例:

这里就展示下项目结构和用到的架包,如果有需要源码的朋友,可以留邮箱或者在这里下载;

项目结构:
这里写图片描述

Spring4.3.0架包:
这里写图片描述

Hibernate5.2.11架包:
这里写图片描述

applicationContext-commons.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:tx="http://www.springframework.org/schema/tx"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-4.3.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">


    <!--  
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
        <property name="user" value="scott"/>
        <property name="password" value="qian"/>
        <property name="initialPoolSize" value="2"/>
    </bean>     
     -->
     <!-- Step 1 -->
     <!--  
    <bean id="" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>classpath:jdbc.properties</value>
        </property>
    </bean>
    -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- Step 2 -->
    <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <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="${jdbc.initialPoolSize}"/>
    </bean>

    <!-- ========================================================================================================= -->


    <!--Step 1:  配置Hibernate的SessionFactory,通过spring提供的 LocalSessionFactoryBean配置-->

    <bean id="mySessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="myDataSource"/>
        </property>
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <!-- 如果我们不在hibernate.cfg.xml中配置User.hbm.xml和Log.hbm。xml我们也可以在这配置 -->
        <!--  
        <property name="mappingLocations">
            <value>classpath:com/spring/trans/domain/*.hbm.xml</value>
        </property>
        -->
    </bean>

    <!--Step 2:  配置 Spring 的声明式事物 -->  

    <bean id="myTransactionManager"  class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
        </property>
    </bean>


    <!--Step 3:  配置事物属性 ,需要事物管理器--> 

    <tx:advice id="myTxAdvice" transaction-manager="myTransactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="modify*" propagation="REQUIRED"/>
            <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
        </tx:attributes>
    </tx:advice>


    <!--Step 4:  配置事物切点,并把事物属性和切点关联起来 --> 

    <aop:config>
        <aop:pointcut expression="execution(* com.spring.trans.manager.*.*(..))" id="myPointcut"/>
        <aop:advisor advice-ref="myTxAdvice" pointcut-ref="myPointcut"/>
    </aop:config>



<!--  
    <bean id="userManagerImpl" class="com.spring.trans.manager.UserManagerImpl">
        <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
        </property>
        <property name="logManager">
            <ref bean="logManagerImpl"/>
        </property>
     </bean>

     <bean id="logManagerImpl" class="com.spring.trans.manager.LogManagerImpl">
        <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
        </property>
     </bean>

-->
</beans>


补充一点:怎么在Eclipse下配置 Hibernate 和 Spring相应标签的快捷键;

  1. hibernate.cfg.xml 和 *.hbm.xml 快捷键

这里写图片描述

这里写图片描述

在下载的hibernate的文件中,找打这两个文件,
这里写图片描述

在Eclipse–》Preference–》XML–>xml catalog下如下添加:
这里写图片描述

  1. spring的 applicationContext.xml文件快捷键配置类似;
    这里写图片描述


Okay, okay. That is all, maybe too long. If you want to get the source code of this program in the blog, you can download here , or leave your email in the comments for free.

Spring3和Hibernate4中注解方式的声明式事务管理配置 Spring框架自2003年问世以来,已成为Java企业级应用开发的事实标准。它致力于简化企业级应用开发,提供了一整套的解决方案,从基础的控制反转(IoC)和面向切面编程(AOP),到事务管理、数据访问、消息服务等。Spring的出现,让开发者能够专注于业务逻辑的实现,而不必过多地担心底层的实现细节。 阅读详情

相关推荐

Spring+Hibernate 声明式事务

本资源主要是结合博文 Spring+Hibernate: 声明式事务 http://blog.youkuaiyun.com/ManagementAndJava/article/details/78050519 的源代码,主要是讲解了spring4.3和hibernate5.2.11集成实现原理;

spring 和hibernate集成 采用声明式事务

原文地址:spring 和hibernate集成 采用声明式事务作者:雪狼首领 采用声明式事务   1、声明式事务配置 * 配置SessionFactory * 配置事务管理器 * 事务的传播特性 * 那些类那些方法使用事务   2、编写业务逻辑方法 * 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,Hibernat...

u010538567的专栏 141

spring,hibernate整合实现事务管理(MethodInterceptor)

NULL 博文链接:https://88548886.iteye.com/blog/1528486

Spring+Hibernate处理大批量数据

原文:http://blog.youkuaiyun.com/ye1992/article/details/9291237 关于使用spring+hibernate进行大批量数据的插入和更新,它的性能和使用JDBC  PreparedStatement的batch批量操作以及数据库的存储过程操作几乎可以一样高。在Hibernate的官方文档里说到了Batchprocessing。Spring+Hib

abcd1101的专栏 2351

spring整合hibernate实现事务处理

spring整合hibernate实现事务处理 1.spring整合hibernate实现事务处理-注解方式 2.spring整合hibernate实现事务处理-XML方式

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划 前言 本人近期在工作中遇到需要对某场景下利用海康相机进行图像缺陷检测与对应路径规划。通过对海康相机示例代码进行吸收与借鉴,最终实现了对海康相机的控制,并增加HSmartWindowControl控件,实现图像的实时显示与平移缩放功能;通过listview+toolstrip实现日志显示与类型(提示、警告、错误)分类;同时自行编制算法实现对缺陷的识别以及缺陷外扩矩形范围内的路径规划。 1.日志记录 代码如下(示例):

weixin_37864926的博客 2717

Spring与Hibernate集成---声明式事务

1、创建一个java项目,并加入Spring的依赖库。 [quote] * SPRING_HOME/dist/spring.jar * SPRING_HOME/lib/jakarta-commons/commons-logging.jar * SPRING_HOME/lib/log4j/log4j-1.2.15.jar * SPRING_HOME/lib/aspectj/*.jar...

skyuck的专栏 123

content-pipeline:一条可落地的内容生产流水线

content-pipeline 是一种将内容创作工程化的系统性方法,其核心在于用确定性流程替代碎片化人工操作。它基于结构化提示(prompt)、预置叙事框架与品牌参数固化三大原理,实现从素材输入到多平台发布的端到端自动化。技术价值体现在显著降低认知负荷、保障输出一致性、支持本地化资源绑定与闭环反馈校验。典型应用场景包括技术教程批量生成、跨平台(公众号/小红书/即刻)内容适配、AI写作质量可控迭代等。本文深入解析其作为‘内容制造业’基础设施的底层设计逻辑与实操路径,尤其聚焦Claude Code环境下的真实

weixin_31199559的博客 267

spring + hibernate批量加入

applicationContext.xml: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/sch

happyunbound的专栏 2834

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1019

Dify 第 4 篇 Dify 示例:数据库执行Agent

本文介绍了如何在Dify平台创建一个能够执行SQL查询的数据库Agent。通过安装并配置"通义千问"和"数据库"两个插件,实现自然语言到SQL语句的转换和执行。关键步骤包括:1)安装插件并配置API Key;2)设置默认数据库连接(建议使用只读账号);3)准备测试数据表结构。该Agent支持通过工具调用查询表结构、转换自然语言为SQL、执行查询并返回结果,同时提供了CSV查询和HTTP API接口功能。文中还提供了MySQL测试数据表的创建脚本和示例数据。

甘蓝的专栏 1156

Spring整合hibernate的事务属性介绍以及声明式事务管理 (使用Annotation和xml)

采用声明式事务 1、声明式事务配置 * 配置SessionFactory * 配置事务管理器 * 事务的传播特性 * 那些类那些方法使用事务思考:要把事物加到那些层,把事物加在DAO这一层呢,还是加在业务逻辑处理service这一层?为什么?在service层中配置事物管理。假设在DAO层使用事物: UserDAO中有一个save()方法,用来添加新用户,LogDAO类中也有一个Sava方法,用来

萌萌的It人 www.itmmd.com 4243

(付费请教,防遗忘记录)为什么EDEM bondV1 V2添加后还是没有胶结?????

最近用到了EDEM的胶结功能,在添加了bond V1和V2后,我发现无论颗粒半径设置为多少,接触半径设置为多少,胶结键的参数设置为多少,bond generated数量均为0!!!在后处理中bond中的力也通通为0!!我跟我的同门百思不得其解!!!!最终付费请教了一个大牛,解决了这个问题!!!!答案在文末

zheaa的博客 3099

java hibernate Aop_Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

采用编程式事务事务主要分为:编程式事务和声明式事务1、SessionFactory.getCurrentSession()和SessionFactory.openSession()的区别?* 如果是SessionFactory.getCurrentSession()来创建session,在commit后session就自动关闭了,也就是不用再session.close()了* 如果使用的是Sess...

weixin_30346025的博客 241

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1317

StarRC常见问题整理

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?使用starrc_cmd “错误代码”就能看对应Error或Warnning的解释。

m0_61544122的博客 3114

声明式事务-整合Spring、Hibernate

编程式事务:通过编码的方式,让事务处理的代码侵入到核心的业务代码中。 声明式事务:完成了事务处理的代码和业务核心代码的解耦合。提供事务处理代码的复用性和降低维护成本。 声明式事务:aop最典型的应用。 使用动态代理实现事务的管理: Jdk: 实现动态是通过实现某个特定的接口(代理类和目标类必须是相同的接口),产生一个虚拟的class文件(代理类的)。必须有接口的实现才能使用jdk完成动态代理 Cglib:动态代理,如果没有接口的实现使用cglib完成动态代理,使用了一个asm框架,完成某个类(目标

光何 303

【异常】Milvus向量数据库的常见错误“collection not loaded“(集合未加载)

Milvus数据库报错"collection not loaded"分析及解决方案。该错误发生在对未加载的集合执行查询操作时,核心原因是集合创建后需先加载到内存才能使用。解决方案包括:1)确认集合是否存在;2)查询前调用loadCollection接口加载集合;3)处理加载超时或失败情况,可检查加载状态;4)确保Milvus服务正常运行。建议在长期不使用集合时释放内存资源。文末附Java代码示例说明具体操作方法。

奶爸的编程之路,也就一周冷个三天 380

Spring声明式事务管理、Spring整合Hibernate

一、Spring的事务管理:Spring提供了针对不同持久化机制的事务管理器。(AOP中的切面类,定义了很多通知) 如:hibernate有org.springframework.orm.hibernate3.HibernateTransactionManager 二、事务的参数: 1. 事务的传播行为: a) PROPAGATION_REQUIRED:当前方法...

aodaidi6752的博客 100

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Hibernate+Spring中的声明式事务

spring 使用 声明式事物实现事物功能 <!-- 配置hibernate事务管理器 --> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> &l.

口袋里的小龙的专栏 884

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

整合spring 支持声明式事务的hibernate

1。web.xml 加载你需要的配置文件,eg:data.xml 2.data.xml    在spring的上下文定义        a.定义 dataSource     b.定义sessionFactory 并refer to the pre defined datasource             c.定义hibernatetemplate ref to the prede

For that dream 664

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring整合Hibernate 声明式的事务管理

Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: 该类由Spring提供,如果是hibernate4那就用"org.springframework.orm.hibernate4.HibernateTransactionManager"(Spring2不支持hibernate4)。 把sess

mojolang 2059

在spring声明式事务下的Hibernate的session管理。

<br />SSH项目中的数据访问类一般都是继承至HibernateDaoSupport,然后通过使用HibernateTemplate该对象来进行数据的增删改查。<br />这个过程中我们没有直接接触到session,所以没有关闭session的代码。<br /> <br />写这篇文章的目的为的是说明在spring声明式事务下的Hibernate的session获取到后进行操作,操作完需不需要关闭。<br /> <br />例如如下的代码,就是获取了session进行操作<br />  Session

陈群浩的专栏 1307

spring整合hibernate的声明式事务管理

我们平时使用ssh开发项目的时候,在业务曾总是要添加

wanghuan0211的专栏 796
上一篇: Spring+Hibernate:Aop相关概念与动态代理
下一篇: Struts2简单开发流程
Coder-Qian
博客等级 码龄11年 63粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值