【面试】【Spring常见问题总结】【09】
81、SimpleJdbcTemplate
SimpleJdbcTemplate类也是基于JdbcTemplate类,但利用Java5+的可变參数列表和自己主动装箱和拆箱从而获取更简洁的代码。
SimpleJdbcTemplate主要提供两类方法:query及queryForXXX方法、update及batchUpdate方法。
82、集成Spring JDBC及最佳实践
大多数情况下Spring JDBC都是与IOC容器一起使用。通过配置方式使用Spring JDBC。 并且大部分时间都是使用JdbcTemplate类(或SimpleJdbcTemplate和NamedParameterJdbcTemplate)进行开发。就可以能80%时间使用JdbcTemplate类,而仅仅有20%时间使用其它类开发,符合80/20法则。
Spring JDBC通过实现DaoSupport来支持一致的数据库訪问。SpringJDBC提供例如以下DaoSupport实现:
JdbcDaoSupport:用于支持一致的JdbcTemplate訪问。
NamedParameterJdbcDaoSupport:继承JdbcDaoSupport,同一时候提供NamedParameterJdbcTemplate訪问;
SimpleJdbcDaoSupport:继承JdbcDaoSupport,同一时候提供SimpleJdbcTemplate訪问。
因为JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate类使用DataSourceUtils获取及释放连接,并且连接是与线程绑定的,因此这些JDBC模板类是线程安全的。即JdbcTemplate对象能够在多线程中重用。
83、Spring对ORM的支持
Spring对ORM的支持主要表如今下面方面:
一致的异常体系结构,对第三方ORM框架抛出的专有异常进行包装。从而在使我们在Spring中仅仅看到DataAccessException异常体系。
一致的DAO抽象支持:提供类似与JdbcSupport的DAO支持类HibernateDaoSupport。使用HibernateTemplate模板类来简化经常使用操作。HibernateTemplate提供回调接口来支持复杂操作;
Spring事务管理:Spring对全部数据訪问提供一致的事务管理,通过配置方式,简化事务管理。
Spring还在測试、数据源管理方面提供支持,从而同意方便測试。简化数据源使用。
84、标准SQL规范中定义了四种隔离级别:
未提交读(ReadUncommitted):最低隔离级别。一个事务能读取到别的事务未提交的更新数据,非常不安全。可能出现丢失更新、脏读、不可反复读、幻读。
提交读(ReadCommitted):一个事务能读取到别的事务提交的更新数据,不能看到未提交的更新数据,不可能可能出现丢失更新、脏读。但可能出现不可反复读、幻读;
可反复读(RepeatableRead):保证同一事务中先后运行的多次查询将返回同一结果,不受其它事务影响。可能可能出现丢失更新、脏读、不可反复读,但可能出现幻读。
序列化(Serializable):最高隔离级别。不同意事务并发运行,而必须串行化运行,最安全。不可能出现更新、脏读、不可反复读、幻读。
隔离级别越高。数据库事务并发运行性能越差。能处理的操作越少。
因此在实际项目开发中为了考虑并发性能一般使用提交读隔离级别,它能避免丢失更新和脏读,虽然不可反复读和幻读不能避免,但能够在可能出现的场合使用悲观锁或乐观锁来解决这些问题。
85、数据库事务类型
数据库事务类型有本地事务和分布式事务:
本地事务:就是普通事务,能保证单台数据库上的操作的ACID,被限定在一台数据库上。
分布式事务:涉及两个或多个数据库源的事务。即跨越多台同类或异类数据库的事务(由每台数据库的本地事务组成的)。分布式事务旨在保证这些本地事务的全部操作的ACID,使事务能够跨越多台数据库;
86、Java事务类型
Java事务类型有JDBC事务和JTA事务:
JDBC事务:就是数据库事务类型中的本地事务,通过Connection对象的控制来管理事务;
JTA事务:JTA指Java事务API(Java TransactionAPI),是Java EE数据库事务规范。 JTA仅仅提供了事务管理接口。由应用程序server厂商(如WebSphere Application Server)提供实现,JTA事务比JDBC更强大,支持分布式事务。
87、Java EE事务类型
Java EE事务类型有本地事务和全局事务:
本地事务:使用JDBC编程实现事务;
全局事务:由应用程序server提供,使用JTA事务;
88、按是否通过编程实现事务
按是否通过编程实现事务有声明式事务和编程式事务;
声明式事务: 通过注解或XML配置文件指定事务信息;
编程式事务:通过编写代码实现事务。
89、Spring提供的事务管理
Spring框架最核心功能之中的一个就是事务管理,并且提供一致的事务管理抽象,这能帮助我们:
提供一致的编程式事务管理API,无论使用Spring JDBC框架还是集成第三方框架使用该API进行事务编程;
无侵入式的声明式事务支持。
Spring支持声明式事务和编程式事务事务类型。
90、Spring对编程式事务的支持
Spring中的事务分为物理事务和逻辑事务。
物理事务:就是底层数据库提供的事务支持,如JDBC或JTA提供的事务;
逻辑事务:是Spring管理的事务。不同于物理事务,逻辑事务提供更丰富的控制,并且假设想得到Spring事务管理的优点,必须使用逻辑事务,因此在Spring中假设没特别强调一般就是逻辑事务;
逻辑事务即支持很低级别的控制。也有高级别解决方式:
低级别解决方式
工具类:使用工具类获取连接(会话)和释放连接(会话),如使用org.springframework.jdbc.datasource包中的ConnectionUtils类来获取和释放具有逻辑事务功能的连接。
当然对集成第三方ORM框架也提供了类似的工具类,如对Hibernate提供了SessionFactoryUtils工具类,JPA的EntityManagerFactoryUtils等,其它工具类都是使用类似***Utils命名;
//获取具有Spring事务(逻辑事务)管理功能的连接
DataSourceUtils.getConnection(DataSource dataSource)
//释放具有Spring事务(逻辑事务)管理功能的连接
DataSourceUtils.releaseConnection(Connection con, DataSource)
TransactionAwareDataSourceProxy:使用该数据源代理类包装须要Spring事务管理支持的数据源,该包装类必须位于最外层,主要用于遗留项目中可能直接使用数据源获取连接和释放连接支持或希望在Spring中进行混合使用各种持久化框架时使用。其内部实际使用ConnectionUtils工具类获取和释放真正连接。
<!--使用该方式包装数据源。必须在最外层,targetDataSource 知道目标数据源-->
<bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
<property name="targetDataSource" ref="dataSource"/>
</bean>
通过如上方式包装数据源后,能够在项目中使用物理事务编码的方式来获得逻辑事务的支持。即支持直接从DataSource获取连接和释放连接,且这些连接自己主动支持Spring逻辑事务;
高级别解决方式
模板类:使用Spring提供的模板类。如JdbcTemplate、HibernateTemplate和JpaTemplate模板类等,而这些模板类内部事实上是使用了低级别解决方式中的工具类来管理连接或会话。
Spring提供两种编程式事务支持:直接使用PlatformTransactionManager实现和使用TransactionTemplate模板类,用于支持逻辑事务管理。假设採用编程式事务推荐使用TransactionTemplate模板类和高级别解决方式。
【面试】【Spring常见问题总结】【09】的更多相关文章
- Spring常见问题总结
1. 什么是 Spring 框架? Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性.Spring 官网:https://spring.io/. 我们一般说 Sprin ...
- 【面试】【Spring常见问题总结】【07】
[常见面试问题总结文件夹>>>] 61.Spring IoC容器的依赖有两层含义: Bean依赖容器:也就是说Bean要依赖于容器,这里的依赖是指容器负责创建Bean并管理Bean的 ...
- 【面试 spring boot】【第十七篇】spring boot相关面试
spring boot相关面试 ====================================================== 1.spring boot启动类 启动原理 参考:htt ...
- 面试Spring之bean的生命周期
找工作的时候有些人会被问道Spring中Bean的生命周期,其实也就是考察一下对Spring是否熟悉,工作中很少用到其中的内容,那我们简单看一下. 在说明前可以思考一下Servlet的生命周期:实例化 ...
- 面试-Spring理解
转自http://hui.sohu.com/infonews/article/6331404387079946240 spring呢,是pivotal公司维护的一系列开源工具的总称,最为人所知的是sp ...
- 【5】进大厂必须掌握的面试题-Java面试-spring
spring面试问题 Q1.什么是spring? Spring本质上是一个轻量级的集成框架,可用于用Java开发企业应用程序. Q2.命名Spring框架的不同模块. 一些重要的Spring Fram ...
- spring常见问题
问题1:提示说:cvc-elt.1: Cannot find the declaration of element 'beans' 解决方法:从网上搜了一些,有的说是因为网络原因访问不到xsd文件,因 ...
- 【专访】【Spring常见问题汇总】【05】
种: 传播行为:传播行为定义了client与彼调用方法之间的事务边界. 隔离级别:隔离级别定义了一个事务可能受其它并发事务影响的程度. 仅仅读:表明事务是否是仅仅读的. 事务超时:指定事务执行的最长时 ...
- Spring Security(09)——Filter
目录 1.1 Filter顺序 1.2 添加Filter到FilterChain 1.3 DelegatingFilterProxy 1.4 FilterChainPr ...
随机推荐
- c语言推断数是否是素数
这是推断数是否是素数.网络版非常.我觉得有点问题.今天一个朋友问我这个问题.我知道,今天,我把自己的代码,非常实用哦!. #include<stdio.h> #include<mat ...
- Android使用应用程序资源(、颜色数组、尺寸、弦、布尔、整型)
一.Android资源分类详细解释 1.Android资源类别 Android中的资源分为两大类 : 可直接訪问的资源, 无法直接訪问的原生资源; -- 直接訪问资源 : 这些资源能够使用 R. ...
- 道破Redis的VM
原创文章是freas_1990.转载请注明出处:http://blog.csdn.net/freas_1990/article/details/42052813 Redis唯一的那个key的value ...
- jquery再体验
$(function(){ var obj = $("div[id^='channel_'][id$='_left']"); var val = obj.html(); var i ...
- python基础课程_学习笔记15:标准库:有些收藏夹——fileinput
标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...
- Sencha Architect 2 的使用
俗话说的好, 工欲善其事必先利其器, 用Sencha开发的语言, 自己可能不太熟悉, 写出来很麻烦, 于是给大家介绍一个工具. 启动程序第一个界面: 单击第一个Go按钮, 创建一个项目.进入以后, 单 ...
- 修改系统启动项 grub2配置的方法 ubuntu[转]
在 早期的Ubuntu中,使用Grub作为系统的启动引导程序,想修改系统启动项非常简单,只要用gedit打开系统菜单设定文件( sudo gedit /boot/grub/menu.lst ),修改该 ...
- springmvc+mongodb+maven 项目测试代码
你看我有一篇文章配置,或许还会有.mongodb性能测试结果.一个"快"字 源代码包,请留下邮箱 代码结构图 watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- 使用python写appium用例
安装Python依赖 pip3.4 install nose pip3.4 install selenium pip3.4 install Appium-Python-Client 执行測试用例and ...
- hdu 5094 Maze(水搜索)
题目意思:说有一个人在(1,1) 他的目标点在(n,m) 每次是4方向的移动: 限制条件:有的各自之间有墙 或者门,强不可通过,有对应的要钥匙可以开启这个类型的所有门: 问题:求最少步骤数(和): 类 ...