首先hibernate的Connection release mode有以下几种:
1 after_statement 2 after_transaction 3 on_close 其中after_statement 用在jta中 ,
on_close 是3.1之前遗留的(也许是为spring留的-_-),也就是3.1之前默认是on_close ,但3.1之后默认如果单独使用hibernate是after_transaction,
如果有第三方事务管理,就用第三方提供的默认值,spring就是默认使用了on_close。
在spring管理事务中我们看看系统启动后默认使用的配置:
1,ransaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory使用spring事务策略
2,hibernate内部 Automatic session close at end of transaction: disabled 因为已经交给spring了
3 Connection release mode: auto 默认,也就是没有配置hibernate.connection.release_mode的时候,但是这里有地方需要注意:也就是前面提到的使用第三方策略时的问题:看一下代码:

String releaseModeName = PropertiesHelper.getString( Environment.RELEASE_CONNECTIONS, properties, "auto" );

log.info( "Connection release mode: " + releaseModeName );

ConnectionReleaseMode releaseMode;
if
( "auto".equals(releaseModeName) )
{
releaseMode
=
transactionFactory.getDefaultReleaseMode(); }
{
releaseMode = ConnectionReleaseMode.parse( releaseModeName );
if
( releaseMode == ConnectionReleaseMode.AFTER_STATEMENT && !connections.supportsAggressiveRelease() )
{
log.warn( "Overriding release mode as connection provider does not support 'after_statement'" );
releaseMode = ConnectionReleaseMode.AFTER_TRANSACTION;
}
}
其中红色部分就是调用了spring提供的默认值,而spring的默认值:在jta和cmt中都默认使用的是after_statement
/**
* Sets connection release mode "on_close" as default.
* <p>This was the case for Hibernate 3.0; Hibernate 3.1 changed
* it to "auto" (i.e. "after_statement" or "after_transaction").
* However, for Spring's resource management (in particular for
* HibernateTransactionManager), "on_close" is the better default.
*/
public
ConnectionReleaseMode getDefaultReleaseMode()
{
return
ConnectionReleaseMode.ON_CLOSE;
}
而spring为什么要使用on_close ,而不是用after_transaction ,我们想想opensessioninview的原理也许能明白,session在view成还要使用,所以不能再transactio
n使用完后关闭JDBC connection,必须要在session之后,所以要使用on
_close
(也就是在on session(flush.auto,或者flush.Eagerly) 关闭)。这种情况hibernate内部还会在spring关闭JDBC connection后提示(费解,因为after transaction之后session没有关闭,但是 Connection release mode配置的是on_close,session的关闭和 Connection 的关闭都由spring来管理,hibernate就不知道了),所以hibernate有好的提示如下(其实session,已经关闭。当然随着session的关闭jdbc链接释放回连接池):
transaction completed on session with on_close connection release mode; be sure to cl
ose the session to release JDBC resources!,
。当然我们也可以使用after_transaction ,这种情况对使用编程式事务非常适用。
首先hibernate的Connection release mode有以下几种:1 after_statement 2 after_transaction 3 on_close 其中after_statement 用在jta中 ,on_close 是3.1之前遗留的(也许是为spring留的-_-),也就是3.1之前默认是on_close ,但3.1之后默认如果单独使用hibernate
3.7.1. 用BeanPostProcessor定制bean
3.7.1.1.
使用
BeanPostProcessor的Hello World示例
3.7.1.2. RequiredAnnotat
ion
BeanPostProcessor示例
3.7.2. 用BeanFactoryPostProcessor定制配置元数据
3.7.2.1. PropertyPlaceholderConfigurer示例
3.7.2.2. PropertyOverrideConfigurer示例
3.7.3.
使用
FactoryBean定制实例化逻辑
3.8. Applicat
ion
Context
3.8.1. 利用MessageSource实现国际化
3.8.2. 事件
3.8.3. 底层资源的访问
3.8.4. Applicat
ion
Context在WEB应用
中
的实例化
3.9. 粘合代码和可怕的singleton
3.9.1.
使用
Singleton-helper类
4. 资源
4.1. 简介
4.2. Resource 接口
4.3. 内置 Resource 实现
4.3.1. UrlResource
4.3.2. ClassPathResource
4.3.3. FileSystemResource
4.3.4. ServletContextResource
4.3.5. InputStreamResource
4.3.6. ByteArrayResource
4.4. ResourceLoader
4.5. ResourceLoaderAware 接口
4.6. 把Resource作为属性来配置
4.7. Applicat
ion
context 和Resource 路径
4.7.1. 构造applicat
ion
context
4.7.1.1. 创建 ClassPathXmlApplicat
ion
Context 实例 - 简介
4.7.2. Applicat
ion
context构造器
中
资源路径的通配符
4.7.2.1. Ant风格的pattern
4.7.2.2. classpath*: 前缀
4.7.2.3. 其他关于通配符的说明
4.7.3. FileSystemResource 提示
5. 校验,数据绑定,BeanWrapper,与属性编辑器
5.1. 简介
5.2.
使用
Spring
的Validator接口进行校验
5.3. 从错误代码到错误信息
5.4. Bean处理和BeanWrapper
5.4.1. 设置和获取属性值以及嵌套属性
5.4.2. 内建的PropertyEditor实现
5.4.2.1. 注册用户自定义的PropertyEditor
6.
使用
Spring
进行面向切面编程(AOP)
6.1. 简介
6.1.1. AOP概念
6.1.2.
Spring
AOP的功能和目标
6.1.3.
Spring
的AOP代理
6.2. @AspectJ支持
6.2.1. 启用@AspectJ支持
6.2.2. 声明一个切面
6.2.3. 声明一个切入点(pointcut)
6.2.3.1. 切入点指定者的支持
6.2.3.2. 合并切入点表达式
6.2.3.3. 共享常见的切入点(pointcut)定义
6.2.3.4. 示例
6.2.4. 声明通知
6.2.4.1. 前置通知(Before advice)
6.2.4.2. 返回后通知(After returning advice)
6.2.4.3. 抛出后通知(After throwing advice)
6.2.4.4. 后通知(After (finally) advice)
6.2.4.5. 环绕通知(Around Advice)
6.2.4.6. 通知参数(Advice parameters)
6.2.4.7. 通知(Advice)顺序
6.2.5. 引入(Introduct
ion
s)
6.2.6. 切面实例化模型
6.2.7. 例子
6.3. Schema-based AOP support
6.3.1. 声明一个切面
6.3.2. 声明一个切入点
6.3.3. 声明通知
6.3.3.1. 通知(Advice)
6.3.3.2. 返回后通知(After returning advice)
6.3.3.3. 抛出异常后通知(After throwing advice)
6.3.3.4. 后通知(After (finally) advice)
6.3.3.5. 通知
6.3.3.6. 通知参数
6.3.3.7. 通知顺序
6.3.4. 引入
6.3.5. 切面实例化模型
6.3.6. Advisors
6.3.7. 例子
6.4. AOP声明风格的选择
6.4.1.
Spring
AOP还是完全用AspectJ?
6.4.2.
Spring
AOP
中
使用
@AspectJ还是XML?
6.5. 混合切面类型
6.6. 代理机制
6.7. 编程方式创建@AspectJ代理
6.8. 在
Spring
应用
中
使用
AspectJ
6.8.1. 在
Spring
中
使用
AspectJ来为domain object进行依赖注入
6.8.1.1. @Configurable object的单元测试
6.8.1.2. 多applicat
ion
context情况下的处理
6.8.2.
Spring
中
其他的AspectJ切面
6.8.3.
使用
Spring
IoC来配置AspectJ的切面
6.8.4. 在
Spring
应用
中
使用
AspectJ Load-time weaving(LTW)
6.9. 其它资源
7.
Spring
AOP APIs
7.1. 简介
7.2.
Spring
中
的切入点API
7.2.1. 概念
7.2.2. 切入点实施
7.2.3. AspectJ切入点表达式
7.2.4. 便利的切入点实现
7.2.4.1. 静态切入点
7.2.4.2. 动态切入点
7.2.5. 切入点的基类
7.2.6. 自定义切入点
7.3.
Spring
的通知API
7.3.1. 通知的生命周期
7.3.2.
Spring
里的通知类型
7.3.2.1. 拦截around通知
7.3.2.2. 前置通知
7.3.2.3. 异常通知
7.3.2.4. 后置通知
7.3.2.5. 引入通知
7.4.
Spring
里的advisor(Advisor) API
7.5.
使用
ProxyFactoryBean创建AOP代理
7.5.1. 基础
7.5.2. JavaBean属性
7.5.3. 基于JDK和CGLIB的代理
7.5.4. 对接口进行代理
7.5.5. 对类进行代理
7.5.6.
使用
“全局”advisor
7.6. 简化代理定义
7.7.
使用
ProxyFactory通过编程创建AOP代理
7.8. 操作被通知对象
7.9.
使用
“自动代理(autoproxy)”功能
7.9.1. 自动代理bean定义
7.9.1.1. BeanNameAutoProxyCreator
7.9.1.2. DefaultAdvisorAutoProxyCreator
7.9.1.3. AbstractAdvisorAutoProxyCreator
7.9.2.
使用
元数据驱动的自动代理
7.10.
使用
TargetSources
7.10.1. 热交换目标源
7.10.2. 池化目标源
7.10.3. 原型目标源
7.10.4. ThreadLocal目标源
7.11. 定义新的通知类型
7.12. 更多资源
8. 测试
8.1. 简介
8.2. 单元测试
8.3. 集成测试
8.3.1. Context
管理
和缓存
8.3.2. 测试fixture的依赖注入
8.3.3.
事务
管理
8.3.4. 方便的变量
8.3.5. 示例
8.3.6. 运行集成测试
8.4. 更多资源
II.
中
间层数据访问
9.
事务
管理
9.1. 简介
9.2. 动机
9.3. 关键抽象
9.4.
使用
资源同步的
事务
9.4.1. 高层次方案
9.4.2. 低层次方案
9.4.3.
Tran
sac
t
ion
AwareDataSourceProxy
9.5. 声明式
事务
管理
9.5.1. 理解
Spring
的声明式
事务
管理
实现
9.5.2. 第一个例子
9.5.3. 回滚
9.5.4. 为不同的bean配置不同的
事务
语义
9.5.5. <tx:advice/> 有关的设置
9.5.6.
使用
@
Tran
sac
t
ion
al
9.5.6.1. @
Tran
sac
t
ion
al 有关的设置
9.5.7. 插入
事务
操作
9.5.8. 结合AspectJ
使用
@
Tran
sac
t
ion
al
9.6. 编程式
事务
管理
9.6.1.
使用
Tran
sac
t
ion
Template
9.6.2.
使用
Platform
Tran
sac
t
ion
Manager
9.7. 选择编程式
事务
管理
还是声明式
事务
管理
9.8. 与特定应用服务器集成
9.8.1. BEA WebLogic
9.8.2. IBM WebSphere
9.9. 公共问题的解决方案
9.9.1. 对一个特定的 DataSource
使用
错误的
事务
管理
器
9.10. 更多的资源
10. DAO支持
10.1. 简介
10.2. 一致的异常层次
10.3. 一致的DAO支持抽象类
11.
使用
JDBC
进行数据访问
11.1. 简介
11.1.1.
Spring
JDBC
包结构
11.2. 利用
JDBC
核心类实现
JDBC
的基本操作和错误处理
11.2.1.
Jdbc
Template类
11.2.2. NamedParameter
Jdbc
Template类
11.2.3. Simple
Jdbc
Template类
11.2.4. DataSource接口
11.2.5. SQLExcept
ion
Tran
slator接口
11.2.6. 执行SQL语句
11.2.7. 执行查询
11.2.8. 更新数据库
11.3. 控制数据库连接
11.3.1. DataSourceUtils类
11.3.2. SmartDataSource接口
11.3.3. AbstractDataSource类
11.3.4. Single
Connection
DataSource类
11.3.5. DriverManagerDataSource类
11.3.6.
Tran
sac
t
ion
AwareDataSourceProxy类
11.3.7. DataSource
Tran
sac
t
ion
Manager类
11.4. 用Java对象来表达
JDBC
操作
11.4.1. SqlQuery类
11.4.2. MappingSqlQuery类
11.4.3. SqlUpdate类
11.4.4. StoredProcedure类
11.4.5. SqlFunct
ion
类
12.
使用
ORM工具进行数据访问
12.1. 简介
12.2.
Hibernate
12.2.1. 资源
管理
12.2.2. 在
Spring
的applicat
ion
context
中
创建
Session
Factory
12.2.3.
Hibernate
Template
12.2.4. 不
使用
回调的基于
Spring
的DAO实现
12.2.5. 基于
Hibernate
3的原生API实现DAO
12.2.6. 编程式的
事务
划分
12.2.7. 声明式的
事务
划分
12.2.8.
事务
管理
策略
12.2.9. 容器资源 vs 本地资源
12.2.10. 在应用服务器
中
使用
Hibernate
的注意点
12.3. JDO
12.3.1. 建立PersistenceManagerFactory
12.3.2. JdoTemplate和JdoDaoSupport
12.3.3. 基于原生的JDO API实现DAO
12.3.4.
事务
管理
12.3.5. JdoDialect
12.4. Oracle TopLink
12.4.1.
Session
Factory 抽象层
12.4.2. TopLinkTemplate 和 TopLinkDaoSupport
12.4.3. 基于原生的TopLink API的DAO实现
12.4.4.
事务
管理
12.5. iBATIS SQL Maps
12.5.1. iBATIS 1.x和2.x的概览与区别
12.5.2. iBATIS SQL Maps 1.x
12.5.2.1. 创建SqlMap
12.5.2.2.
使用
SqlMapTemplate 和 SqlMapDaoSupport
12.5.3. iBATIS SQL Maps 2.x
12.5.3.1. 创建SqlMapClient
12.5.3.2.
使用
SqlMapClientTemplate 和 SqlMapClientDaoSupport
12.5.3.3. 基于原生的iBATIS API的DAO实现
12.6. JPA
12.6.1. 在
Spring
环境
中
建立JPA
12.6.1.1. LocalEntityManagerFactoryBean
12.6.1.2. LocalContainerEntityManagerFactoryBean
12.6.1.3. 处理多个持久化单元
12.6.2. JpaTemplate 和 JpaDaoSupport
12.6.3. 基于原生的JPA实现DAO
12.6.4. 异常转化
12.6.5.
事务
管理
12.6.6. JpaDialect
III. Web
13. Web框架
13.1. 介绍
13.1.1. 与其他web框架的集成
13.1.2.
Spring
Web MVC框架的特点
13.2. DispatcherServlet
13.3. 控制器
13.3.1. AbstractController 和 WebContentGenerator
13.3.2. 其它的简单控制器
13.3.3. MultiAct
ion
Controller
13.3.4. 命令控制器
13.4. 处理器映射(handler mapping)
13.4.1. BeanNameUrlHandlerMapping
13.4.2. SimpleUrlHandlerMapping
13.4.3. 拦截器(HandlerInterceptor)
13.5. 视图与视图解析
13.5.1. 视图解析器
13.5.2. 视图解析链
13.5.3. 重定向(Rediret)到另一个视图
13.5.3.1. RedirectView
13.5.3.2. redirect:前缀
13.5.3.3. forward:前缀
13.6. 本地化解析器
13.6.1. AcceptHeaderLocaleResolver
13.6.2. CookieLocaleResolver
13.6.3.
Session
LocaleResolver
13.6.4. LocaleChangeInterceptor
13.7.
使用
主题
13.7.1. 简介
13.7.2. 如何定义主题
13.7.3. 主题解析器
13.8.
Spring
对分段文件上传(multipart file upload)的支持
13.8.1. 介绍
13.8.2.
使用
MultipartResolver
13.8.3. 在表单
中
处理分段文件上传
13.9.
使用
Spring
的表单标签库
13.9.1. 配置标签库
13.9.2. form标签
13.9.3. input标签
13.9.4. checkbox标签
13.9.5. radiobutton标签
13.9.6. password标签
13.9.7. select标签
13.9.8. opt
ion
标签
13.9.9. opt
ion
s标签
13.9.10. textarea标签
13.9.11. hidden标签
13.9.12. errors标签
13.10. 处理异常
13.11. 惯例优先原则(convent
ion
over configurat
ion
)
13.11.1. 对控制器的支持: ControllerClassNameHandlerMapping
13.11.2. 对模型的支持:ModelMap (ModelAndView)
13.11.3. 对视图的支持: RequestToViewName
Tran
slator
13.12. 其它资源
14. 集成视图技术
14.1. 简介
14.2. JSP和JSTL
14.2.1. 视图解析器
14.2.2. 'Plain-old' JSPs versus JSTL 'Plain-old' JSP与JSTL
14.2.3. 帮助简化开发的额外的标签
14.3. Tiles
14.3.1. 需要的资源
14.3.2. 如何集成Tiles
14.3.2.1. InternalResourceViewResolver
14.3.2.2. ResourceBundleViewResolver
14.4. Velocity和FreeMarker
14.4.1. 需要的资源
14.4.2. Context 配置
14.4.3. 创建模板
14.4.4. 高级配置
14.4.4.1. velocity.
properties
14.4.4.2. FreeMarker
14.4.5. 绑定支持和表单处理
14.4.5.1. 用于绑定的宏
14.4.5.2. 简单绑定
14.4.5.3. 表单输入生成宏
14.4.5.4. 重载HTML转码行为并使你的标签符合XHTML
14.5. XSLT
14.5.1. 写在段首
14.5.1.1. Bean 定义
14.5.1.2. 标准MVC控制器代码
14.5.1.3. 把模型数据转化为XML
14.5.1.4. 定义视图属性
14.5.1.5. 文档转换
14.5.2. 小结
14.6. 文档视图(PDF/Excel)
14.6.1. 简介
14.6.2. 配置和安装
14.6.2.1. 文档视图定义
14.6.2.2. Controller 代码
14.6.2.3. Excel视图子类
14.6.2.4. PDF视图子类
14.7. JasperReports
14.7.1. 依赖的资源
14.7.2. 配置
14.7.2.1. 配置ViewResolver
14.7.2.2. 配置View
14.7.2.3. 关于报表文件
14.7.2.4.
使用
JasperReportsMultiFormatView
14.7.3. 构造ModelAndView
14.7.4.
使用
子报表
14.7.4.1. 配置子报表文件
14.7.4.2. 配置子报表数据源
14.7.5. 配置Exporter的参数
15. 集成其它Web框架
15.1. 简介
15.2. 通用配置
15.3. JavaServer Faces
15.3.1. DelegatingVariableResolver
15.3.2. FacesContextUtils
15.4. Struts
15.4.1. ContextLoaderPlugin
15.4.1.1. DelegatingRequestProcessor
15.4.1.2. DelegatingAct
ion
Proxy
15.4.2. Act
ion
Support 类
15.5. Tapestry
15.5.1. 注入
Spring
托管的 beans
15.5.1.1. 将
Spring
Beans 注入到 Tapestry 页面
中
15.5.1.2. 组件定义文件
15.5.1.3. 添加抽象访问方法
15.5.1.4. 将
Spring
Beans 注入到 Tapestry 页面
中
- Tapestry 4.0+ 风格
15.6. WebWork
15.7. 更多资源
16. Portlet MVC框架
16.1. 介绍
16.1.1. 控制器 - MVC
中
的C
16.1.2. 视图 - MVC
中
的V
16.1.3. Web作用范围的Bean
16.2. DispatcherPortlet
16.3. ViewRendererServlet
16.4. 控制器
16.4.1. AbstractController和PortletContentGenerator
16.4.2. 其它简单的控制器
16.4.3. Command控制器
16.4.4. PortletWrappingController
16.5. 处理器映射
16.5.1. PortletModeHandlerMapping
16.5.2. ParameterHandlerMapping
16.5.3. PortletModeParameterHandlerMapping
16.5.4. 增加 HandlerInterceptor
16.5.5. HandlerInterceptorAdapter
16.5.6. ParameterMappingInterceptor
16.6. 视图和它们的解析
16.7. Multipart文件上传支持
16.7.1.
使用
PortletMultipartResolver
16.7.2. 处理表单里的文件上传
16.8. 异常处理
16.9. Portlet应用的部署
IV. 整合
17.
使用
Spring
进行远程访问与Web服务
17.1. 简介
17.2.
使用
RMI暴露服务
17.2.1.
使用
RmiServiceExporter 暴露服务
17.2.2. 在客户端链接服务
17.3.
使用
Hessian或者Burlap通过HTTP远程调用服务
17.3.1. 为Hessian配置DispatcherServlet
17.3.2.
使用
HessianServiceExporter暴露你的bean
17.3.3. 客户端连接服务
17.3.4.
使用
Burlap
17.3.5. 对通过Hessian或Burlap暴露的服务
使用
HTTP基础认证
17.4.
使用
HTTP调用器暴露服务
17.4.1. 暴露服务对象
17.4.2. 在客户端连接服务
17.5. Web服务
17.5.1.
使用
JAXI-RPC暴露服务
17.5.2. 访问Web服务
17.5.3. 注册bean映射
17.5.4. 注册自己的处理方法
17.5.5.
使用
XFire来暴露Web服务
17.6. 对远程接口不提供自动探测
17.7. 在选择这些技术时的一些考虑
18. Enterprise Java Bean(EJB)集成
18.1. 简介
18.2. 访问EJB
18.2.1. 概念
18.2.2. 访问本地的无状态
Session
Bean(SLSB)
18.2.3. 访问远程SLSB
18.3.
使用
Spring
提供的辅助类实现EJB组件
19. JMS
19.1. 简介
19.2.
使用
Spring
JMS
19.2.1. JmsTemplate
19.2.2. 连接工厂
19.2.3. (消息)目的地
管理
19.2.4. 消息侦听容器
19.2.4.1. SimpleMessageListenerContainer
19.2.4.2. DefaultMessageListenerContainer
19.2.4.3. Server
Session
MessageListenerContainer
19.2.5.
事务
管理
19.3. 发送一条消息
19.3.1.
使用
消息转换器
19.3.2.
Session
Callback 和ProducerCallback
19.4. 接收消息
19.4.1. 同步接收
19.4.2. 异步接收 - 消息驱动的POJOs
19.4.3.
Session
AwareMessageListener 接口
19.4.4. MessageListenerAdapter
19.4.5.
事务
中
的多方参与
20. JMX
20.1. 介绍
20.2. 输出bean到JMX
20.2.1. 创建一个MBeanServer
20.2.2. 复用现有的MBeanServer
20.2.3. MBean的惰性初始化
20.2.4. MBean的自动注册
20.2.5. 控制注册行为
20.3. 控制bean的
管理
接口
20.3.1. MBeanInfoAssembler 接口
20.3.2.
使用
源码级元数据
20.3.3.
使用
JDK 5.0注解
20.3.4. 源代码级的元数据类型
20.3.5. 接口AutodetectCapableMBeanInfoAssembler
20.3.6. 用Java接口定义
管理
接口
20.3.7.
使用
MethodNameBasedMBeanInfoAssembler
20.4. 控制bean的 ObjectName
20.4.1. 从
Properties
中
读取ObjectName
20.4.2.
使用
MetadataNamingStrategy
20.5. JSR-160连接器
20.5.1. 服务器端连接器
20.5.2. 客户端连接器
20.5.3. 基于Burlap/Hessian/SOAP的JMX
20.6. 通过代理访问MBeans
20.7. 通知
20.7.1. 为通知注册监听器
20.7.2. 发布通知
20.8. 更多资源
21. JCA CCI
21.1. 介绍
21.2. 配置CCI
21.2.1. 连接器配置
21.2.2. 在
Spring
中
配置
Connection
Factory
21.2.3. 配置CCI连接
21.2.4.
使用
一个 CCI 单连接
21.3.
使用
Spring
的 CCI访问支持
21.3.1. 记录转换
21.3.2. CciTemplate 类
21.3.3. DAO支持
21.3.4. 自动输出记录生成
21.3.5. 总结
21.3.6. 直接
使用
一个 CCI
Connection
接口和Interact
ion
接口
21.3.7. CciTemplate
使用
示例
21.4. 建模CCI访问为操作对象
21.4.1. MappingRecordOperat
ion
21.4.2. MappingCommAreaOperat
ion
21.4.3. 自动输出记录生成
21.4.4. 总结
21.4.5. MappingRecordOperat
ion
使用
示例
21.4.6. MappingCommAreaOperat
ion
使用
示例
21.5.
事务
22.
Spring
邮件抽象层
22.1. 简介
22.2.
Spring
邮件抽象结构
22.3.
使用
Spring
邮件抽象
22.3.1. 可插拔的MailSender实现
22.4.
使用
JavaMail MimeMessageHelper
22.4.1. 创建一条简单的MimeMessage,并且发送出去
22.4.2. 发送附件和嵌入式资源(inline
resources
)
23.
Spring
中
的定时调度(Scheduling)和线程池(Thread Pooling)
23.1. 简介
23.2.
使用
OpenSymphony Quartz 调度器
23.2.1.
使用
JobDetailBean
23.2.2.
使用
MethodInvokingJobDetailFactoryBean
23.2.3.
使用
triggers和SchedulerFactoryBean来包装任务
23.3.
使用
JDK Timer支持类
23.3.1. 创建定制的timers
23.3.2.
使用
MethodInvokingTimerTaskFactoryBean类
23.3.3. 打包:
使用
TimerFactoryBean来设置任务
23.4.
Spring
TaskExecutor抽象
23.4.1. TaskExecutor接口
23.4.2. 何时
使用
TaskExecutor接口
23.4.3. TaskExecutor类型
23.4.4.
使用
TaskExecutor接口
24. 动态语言支持
24.1. 介绍
24.2. 第一个例子
24.3. 定义动态语言支持的bean
24.3.1. 公共概念
24.3.1.1. <lang:language/> 元素
24.3.1.2. Refreshable bean
24.3.1.3. 内置动态语言源文件
24.3.1.4. 理解dynamic-language-backed bean context的构造器注入
24.3.2. JRuby beans
24.3.3. Groovy beans
24.3.4. BeanShell beans
24.4. 场景
24.4.1.
Spring
MVC控制器脚本化
24.4.2. Validator脚本化
24.5. 更多的资源
25. 注解和源代码级的元数据支持
25.1. 简介
25.2.
Spring
的元数据支持
25.3. 注解
25.3.1. @Required
25.3.2.
Spring
中
的其它@Annotat
ion
s
25.4. 集成Jakarta Commons Attributes
25.5. 元数据和
Spring
AOP自动代理
25.5.1. 基本原理
25.5.2. 声明式
事务
管理
25.5.3. 缓冲
25.5.4. 自定义元数据
25.6.
使用
属性来减少MVC web层配置
25.7. 元数据属性的其它用法
25.8. 增加对额外元数据API的支持
A. XML Schema-based configurat
ion
A.1. Introduct
ion
A.2. XML Schema-based configurat
ion
A.2.1. Referencing the schemas
A.2.2. The util schema
A.2.2.1. <util:constant/>
A.2.2.2. <util:property-path/>
A.2.2.3. <util:
properties
/>
A.2.2.4. <util:list/>
A.2.2.5. <util:map/>
A.2.2.6. <util:set/>
A.2.3. The jee schema
A.2.3.1. <jee:jndi-lookup/> (simple)
A.2.3.2. <jee:jndi-lookup/> (with single JNDI environment setting)
A.2.3.3. <jee:jndi-lookup/> (with multiple JNDI environment settings)
A.2.3.4. <jee:jndi-lookup/> (complex)
A.2.3.5. <jee:local-slsb/> (simple)
A.2.3.6. <jee:local-slsb/> (complex)
A.2.3.7. <jee:remote-slsb/>
A.2.4. The lang schema
A.2.5. The tx (
tran
sac
t
ion
) schema
A.2.6. The aop schema
A.2.7. The tool schema
A.2.8. The beans schema
A.3. Setting up your IDE
A.3.1. Setting up Eclipse
A.3.2. Setting up IntelliJ IDEA
A.3.3. Integrat
ion
issues
A.3.3.1. XML parsing errors in the Resin v.3 applicat
ion
server
B. Extensible XML authoring
B.1. Introduct
ion
B.2. Authoring the schema
B.3. Coding a NamespaceHandler
B.4. Coding a BeanDefinit
ion
Parser
B.5. Registering the handler and the schema
B.5.1. META-INF/
spring
.handlers
B.5.2. META-INF/
spring
.schemas
C.
spring
-beans-2.0.dtd
D.
spring
.tld
D.1. Introduct
ion
D.2. The bind tag
D.3. The escapeBody tag
D.4. The hasBindErrors tag
D.5. The htmlEscape tag
D.6. The message tag
D.7. The nestedPath tag
D.8. The theme tag
D.9. The
tran
sform tag
E.
spring
-form.tld
E.1. Introduct
ion
E.2. The checkbox tag
E.3. The errors tag
E.4. The form tag
E.5. The hidden tag
E.6. The input tag
E.7. The label tag
E.8. The opt
ion
tag
E.9. The opt
ion
s tag
E.10. The password tag
E.11. The radiobutton tag
E.12. The select tag
E.13. The textarea tag
F.
Spring
2.0 开发手册
中
文化项目
F.1. 声明
F.2. 致谢
F.3. 参与人员及任务分配
F.4.
Spring
2.0 正式版开发手册翻译说明
F.5. 项目历程
F.5.1.
Spring
2.0 RC2 开发手册翻译项目
F.5.2.
Spring
2.0 正式版开发手册翻译项目
可以采用连接池;
什么是ORM
对象关系映射(Object Relat
ion
al Mapping 简称ORM)是一种为了解决面向对象与面向关系数据库存在的互不匹配的想象的技术;简单的说,ORM是通过
使用
描述对象和数据库之间映射的元数据,将Java程序
中
的对象自动持久化到关系数据库
中
;本质上就是将数据从一种形式转换到另一种形式。
使用
hibernate
的关键就是创建
session
对象,有了
session
对象,我们才能进行各种各样的操作。
session
与
connection
是多对一的关系,每个
session
都有一个与之对应的
connection
,一个
connection
不同时刻可以供多个
session
使用
。
我们想要对数据库进行操作的时候通过
session
就可以了。我们只要调用
sess...
由于shiro 的漏洞问题升级导致同步升级
hibernate
,在升级到5.2后发现之前好使的方法在保存数据时出现遗漏数据的bug
方法
中
同时
使用
了
jdbc
和
hibernate
,
jdbc
执行的是批量保存数据,update时总有几个数据是没有成功的,排查数据没有发现任何问题,最后在
hibernate
执行输出的sql
中
发现,会有交叉提交的情况,经过测试把
hibernate
使用
session
保存数据的方法改成了
jdbc
方式,大功告成。
根据个人理解混合
使用
并不存在这种bug,希望懂原理的大神解惑,您的意见对我至关重
配置log4j.
properties
log4j.rootCategory=INFO, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layou...
jdbc
,java database connectivity,是java连接数据库操作的原生接口。
jdbc
是所有框架操作数据库所必须的,是数据库的统一接口标准。
orm,object relat
ion
al mapping,一般指对象关系映射,是通过
使用
描述对象和数据库之间映射的元数据,将面向对象语言程序
中
的对象自动持久化到关系数据库
中
。
jpa,是orm框架的统一接口标准,即orm框架的规范。
hibernate
,是一个标准的orm框架,实现了jpa接口,可理解成jpa是接口,
hibernate
是实现类。
使用
Hibernate
的
Session
Factory和
Tran
sac
t
ion
来
管理
数据库操作,需要按照以下步骤:
1. 创建
Session
Factory对象。
Session
Factory是
Hibernate
的核心接口,用于创建
Session
对象,它是线程安全的,一般情况下只需要创建一个即可。
2. 创建
Session
对象。
Session
是
Hibernate
与数据库进行交互的核心接口,它提供了各种方法来完成数据的增删改查等操作。每个
Session
都有自己的缓存区,它可以将对象持久化到数据库
中
,也可以从数据库
中
读取对象。
3. 开启
Tran
sac
t
ion
事务
。
Tran
sac
t
ion
是
Hibernate
用于
管理
事务
的接口,它可以将一系列的数据库操作作为一个整体来执行,保证数据的一致性和完整性。
4. 在
Tran
sac
t
ion
中
执行数据库操作。在
Tran
sac
t
ion
中
可以调用
Session
提供的各种方法来执行数据库操作,包括保存、更新、删除和查询等操作。
5. 提交
Tran
sac
t
ion
。如果所有的数据库操作都执行成功,则调用
Tran
sac
t
ion
的commit()方法提交
事务
,使得数据持久化到数据库
中
。如果执行过程
中
出现异常,可以调用
Tran
sac
t
ion
的rollback()方法回滚
事务
。
6. 关闭
Session
和
Session
Factory。在所有的数据库操作都完成后,应该及时关闭
Session
和
Session
Factory对象,释放资源。
使用
Session
Factory和
Tran
sac
t
ion
来
管理
数据库操作可以简化代码,提高数据操作的效率和安全性。同时,
Hibernate
还提供了很多其他的功能,例如映射对象关系、查询语言等,可以帮助开发者更方便地进行数据库操作。