12_编程式事务和事务模板
Spring15个经典面试题

Spring15个经典⾯试题Spring15个经典⾯试题总结Spring框架的15个经典⾯试题。
什么是Spring框架?Spring是⼀种轻量级框架,旨在提⾼开发⼈员的开发效率以及系统的可维护性。
我们⼀般说的Spring框架就是Spring Framework,它是很多模块的集合,使⽤这些模块可以很⽅便地协助我们进⾏开发。
这些模块是核⼼容器、数据访问/集成、Web、AOP(⾯向切⾯编程)、⼯具、消息和测试模块。
⽐如Core Container中的Core组件是Spring所有组件的核⼼,Beans组件和Context组件是实现IOC和DI的基础,AOP组件⽤来实现⾯向切⾯编程。
核⼼技术:依赖注⼊(DI),AOP,事件(Events),资源,i18n,验证,数据绑定,类型转换,SpEL。
测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
数据访问:事务,DAO⽀持,JDBC,ORM,编组XML。
Web⽀持:Spring MVC和Spring WebFlux Web框架。
集成:远程处理,JMS,JCA,JMX,电⼦邮件,任务,调度,缓存。
语⾔:Kotlin,Groovy,动态语⾔。
列举⼀些重要的Spring模块?下图对应的是Spring 4.x的版本,⽬前最新的5.x版本中Web模块的Portlet组件已经被废弃掉,同时增加了⽤于异步响应式处理的WebFlux组件。
Spring Core:基础,可以说Spring其他所有的功能都依赖于该类库。
主要提供IOC和DI功能。
Spring Aspects:该模块为与AspectJ的集成提供⽀持。
Spring AOP:提供⾯向⽅⾯的编程实现。
Spring JDBC:Java数据库连接。
Spring JMS:Java消息服务。
Spring ORM:⽤于⽀持Hibernate等ORM⼯具。
Spring Web:为创建Web应⽤程序提供⽀持。
Java数据库编程实战使用ORM框架和事务管理

Java数据库编程实战使用ORM框架和事务管理一、概述数据库编程在Java开发中扮演着重要的角色,它涉及到与数据库进行连接、数据的增删改查等操作。
为了提高开发效率和代码的可维护性,使用ORM(Object Relational Mapping)框架和事务管理是非常实用的。
二、ORM框架1. 定义ORM框架是一种利用对象模型来操作数据库的技术,它能够将Java对象与数据库表进行映射,在编程中通过操作Java对象来实现对数据库的增删改查操作,而无需直接操作SQL语句。
2. 优势使用ORM框架的主要优势包括:- 提高开发效率:ORM框架能够自动完成数据库操作,减少了手动编写繁杂的SQL语句的工作量。
- 提高代码可维护性:使用ORM框架可以使代码更加简洁和易读,减少了与数据库相关的代码量,提高代码的可维护性。
- 跨数据库支持:ORM框架通常具有良好的数据库兼容性,可以方便地切换不同的数据库。
- 自动事务管理:ORM框架通常提供事务管理的功能,能够自动处理数据库事务,确保数据的一致性和完整性。
三、常见的Java ORM框架1. HibernateHibernate是一个开源的Java ORM框架,它提供了大量的ORM解决方案,以及强大的查询语言HQL(Hibernate Query Language)。
通过Hibernate,我们可以通过简单地配置和注解,将Java对象映射到数据库表,并进行增删改查操作。
2. MyBatisMyBatis是另一个流行的Java ORM框架,它通过XML配置文件或注解方式来实现Java对象与数据库表的映射。
MyBatis将SQL语句与Java方法绑定,提供了灵活的动态SQL查询功能。
3. Spring Data JPASpring Data JPA是基于JPA(Java Persistence API)的ORM框架,它是Spring Framework的一部分。
Spring Data JPA通过简化关系型数据库的访问,提供了一种更为简单和高效的方式来进行ORM操作。
java 事务代码编写

java事务代码编写Java事务代码编写有两种方式:编程式事务和声明式事务。
1.编程式事务编程式事务是指由开发人员在代码中显式地控制事务的开始、提交和回滚。
编程式事务的优点是灵活性高,可以根据业务需求进行定制。
编程式事务的缺点是需要开发人员对事务的实现机制有一定的了解。
编程式事务的代码编写一般如下:●获取数据库连接●Connectionconnection=DriverManager.getConnection(jdbc:mysql:localhost:3306/mydataba se,root,password);●开启事务●connection.setAutoCommit(false);●执行业务逻辑●int updateCount=connection.executeUpdate●(update user set name=John Doewhere id=1);●提交事务●mit;●关闭数据库连接●connection.close;在上述代码中,我们首先获取数据库连接,然后使用setAutoCommit方法将自动提交设置为false,表示手动控制事务。
接下来,我们执行业务逻辑,例如更新数据库记录。
最后,我们使用commit方法提交事务,或者使用rollback方法回滚事务。
2.声明式事务声明式事务是指由容器或框架自动控制事务的开始、提交和回滚。
声明式事务的优点是简化了编程,不需要开发人员直接处理事务的实现。
声明式事务的缺点是灵活性较差,无法根据业务需求进行定制。
声明式事务的代码编写一般如下:●使用@Transactional注解●Transactional●public void updateUser{●执行业务逻辑●int updateCount=connection.executeUpdate●(update user set name=John Doewhere id=1);在上述代码中,我们使用@Transactional注解来标记updateUser方法,表示该方法是一个事务方法。
编程式事务的大致实现过程

编程式事务的大致实现过程编程式事务大致实现过程事务是数据库管理系统中的一个重要概念,它用于确保数据库操作的原子性、一致性、隔离性和持久性。
在编程中,我们可以使用编程式事务来实现对数据库的事务管理。
编程式事务的大致实现过程如下:1. 数据库连接我们需要建立与数据库的连接。
可以使用数据库驱动程序提供的API来建立连接,并获取数据库连接对象。
连接对象可以用于执行SQL语句和管理事务。
2. 开启事务在执行事务操作之前,我们需要显式地开启一个事务。
通过调用数据库连接对象的begin()或startTransaction()方法,可以开启一个新的事务。
事务的开启表示接下来的一系列操作将被作为一个整体来执行。
3. 执行事务操作在事务中,我们可以执行一系列的数据库操作,如插入、更新、删除等。
通过调用数据库连接对象的execute()或execSql()方法,可以执行SQL语句并提交到数据库中。
4. 事务回滚如果在事务执行过程中发生了错误或异常,我们可以选择回滚事务。
事务回滚会撤销当前事务中的所有操作,并恢复到事务开始之前的状态。
通过调用数据库连接对象的rollback()方法,可以实现事务的回滚操作。
5. 事务提交如果事务中的所有操作都成功执行,并且不需要回滚,则可以选择提交事务。
事务提交会将事务中的所有操作永久保存到数据库中。
通过调用数据库连接对象的commit()方法,可以实现事务的提交操作。
6. 关闭连接在事务操作完成后,我们需要关闭数据库连接。
通过调用数据库连接对象的close()方法,可以关闭与数据库的连接,释放资源。
编程式事务的实现可以根据不同的编程语言和数据库驱动程序而有所差异,但大致的实现过程是相似的。
在实际开发中,我们可以根据具体需求和业务逻辑,结合编程语言和数据库的特性,来实现更加复杂和灵活的事务管理。
编程式事务的优势在于对事务操作的细粒度控制,可以根据具体的业务需求来灵活处理事务。
同时,编程式事务也可以提供更好的性能和灵活性,适用于一些复杂的业务场景。
transactiontemplate 编程式事务使用详解

transactiontemplate 编程式事务使用详解编程式事务使用详解事务是数据库管理系统中常用的一个概念,可确保一系列的数据库操作要么全部成功要么全部失败。
编程式事务是一种通过编程语言来管理数据库事务的方法。
在这篇文章中,我们将详细介绍编程式事务的使用方法和注意事项。
在进行编程式事务时,我们需要遵循以下步骤:1. 获取数据库连接:首先,我们需要通过数据库驱动程序获取与数据库的连接。
这可以使用特定于编程语言和数据库的API来完成。
2. 开始事务:一旦我们成功地获得数据库连接,我们可以调用开始事务的方法。
在大多数编程语言中,这可以通过执行开始事务的SQL语句或调用连接对象的特定方法来实现。
3. 执行数据库操作:在事务中,我们可以执行一系列的数据库操作,例如插入、更新或删除数据。
这些操作需要在同一个事务中进行,以确保数据的一致性。
4. 提交事务:如果所有的数据库操作都成功完成,我们可以调用提交事务的方法来将更改保存到数据库中。
在大多数编程语言中,这可以通过执行提交事务的SQL语句或调用连接对象的特定方法来实现。
5. 回滚事务:如果在事务过程中出现错误或异常,我们可以调用回滚事务的方法来撤销已经进行的数据库操作。
这会将数据库恢复到事务开始之前的状态。
6. 关闭连接:当事务处理完毕后,我们应该关闭数据库连接。
这可以通过调用关闭连接的方法来实现,以释放资源并避免潜在的内存泄漏。
除了上述基本步骤,以下是一些编程式事务的注意事项:- 在编程式事务中,每次数据库操作都应该在同一个数据库连接下进行。
如果在事务过程中切换了连接,事务将无法正常工作。
- 如果数据库连接在事务期间关闭,事务将自动被回滚。
因此,务必确保数据库连接在事务处理期间保持打开状态。
- 对于长时间运行的事务,务必考虑设置适当的超时时间,以避免资源的浪费和潜在的死锁情况。
- 无论是成功提交事务还是回滚事务,都应该处理相应的异常情况并作出适当的日志记录。
编程式事务嵌套声明式事务方法

编程式事务嵌套声明式事务方法摘要:1.编程式事务概述2.事务嵌套概念与实例3.声明式事务概述4.编程式事务与声明式事务优缺点对比5.实际应用场景推荐正文:在现代数据库管理系统中,事务处理起着至关重要的作用。
为了保证数据的一致性和完整性,事务处理被广泛应用于各种业务场景。
本文将介绍两种事务处理方法:编程式事务和声明式事务,并分析它们在实际应用中的优缺点。
一、编程式事务概述编程式事务,顾名思义,是指通过编写代码来实现事务的控制。
在编程式事务中,开发者需要手动编写事务边界逻辑,以确保事务内的操作具备原子性、一致性、隔离性和持久性。
这种方法在处理简单事务时较为方便,但随着业务复杂度的提高,编程式事务的编写和维护成本也会相应增加。
二、事务嵌套概念与实例事务嵌套是指在一个事务内部,又启动了一个新的事务。
这种情况下,内部事务的执行结果会影响到外部事务的执行。
例如,银行转账操作,内部事务为计算转账金额和校验用户输入,外部事务为将转账金额记录到账务系统。
在这个例子中,如果内部事务失败,则需要回滚整个外部事务,确保银行账户余额的一致性。
三、声明式事务概述声明式事务是一种更高层次的事务处理方法。
它允许开发者通过声明性方式定义事务的边界,从而简化事务控制的复杂性。
在声明式事务中,开发者无需关注事务内部的细节,只需关注业务逻辑。
声明式事务主要由事务管理器来负责实现,如Spring框架中的事务管理器。
四、编程式事务与声明式事务优缺点对比1.编程式事务:优点:- 适用于简单事务,易于理解和实现;- 开发者对事务控制具有较高的灵活性。
缺点:- 随着业务复杂度增加,编写和维护成本较高;- 容易出现代码冗余和耦合度高的问题。
2.声明式事务:优点:- 提高开发效率,降低维护成本;- 事务边界清晰,便于调试和监控;- 有利于代码模块化和解耦。
缺点:- 学习成本较高;- 对事务管理器的要求较高。
五、实际应用场景推荐1.对于简单的事务操作,如数据插入、更新和删除等,可以使用编程式事务;2.对于复杂的事务操作,如跨库、跨表、涉及多个业务系统等,推荐使用声明式事务;3.在实际项目中,可以根据业务需求和开发团队的技能水平,灵活选用编程式事务或声明式事务。
少儿编程课程会议纪要模板9篇
少儿编程课程会议纪要模板9篇少儿编程课程会议纪要模板9篇在日常生活或是工作学习中,会议纪要在处理事务上使用的情况越来越多,用概括叙述的方法,进行整体的阐述和说明。
下面是小编为大家收集的会议纪要范文,仅供参考,欢迎大家阅读,一起分享。
少儿编程课程会议纪要模板篇1校属各有关单位:根据自治区教育厅《关于参加20__年全区教育工作会议的通知》(桂教办〔__〕66号)精神,自治区人民政府定于2月22日召开全区教育工作会议。
我校将设立会议分会场(视频)并组织相关人员参会。
现将有关事项通知如下:少儿编程课程会议纪要模板篇22月22日(星期一)9︰00-11︰00二、会议地点君武馆第二会议室三、参会人员(一)校领导;(二)党办校办、组织部、宣传部、纪委办、学生工作部(处)、团委、工会、人事处、教务处、科技处、社科处、研究生处、实验设备处、发展规划处、招生就业指导中心、国际交流处、审计处、财务处、后勤基建处、保卫处、校友办、图书馆、网络中心、资产经营公司、高教研究所、继续教育学院、附属中学、君武小学等部门1名主要负责人。
四、会议内容学习贯彻全国教育工作会议精神,总结“十二五”期间特别是全区教育工作主要成绩经验,部署以及“十三五”期间全区教育改革发展工作。
五、参会要求(一)请各相关单位负责通知相关人员按时参会;(二)请参会人员提前10分钟进场完毕。
党委办公室校长办公室__年__月__日少儿编程课程会议纪要模板篇3三、参会人员公司领导,助理总经理,各部门经理、副经理四、会议议题1.审议《__________规范新办公楼管理的有关规定》;(9:00-9:20副总及以上人员参加)2.汇报公司餐厅运行情况及建议运营方案;(9:20-9:50副总及以上人员参加)3.各部门汇报9月份工作完成情况、10月份工作安排及需要协调解决的问题。
汇报顺序如下:综合管理部、财务资金部、投资管理部、发展管理部、前期开发部、规划设计部、合约商务部、营销管理部、客户关系中心、项目发展部。
transactiontemplate编程式事务使用示例
transactiontemplate编程式事务使用示例1. 什么是编程式事务?编程式事务是一种通过编程方式来管理和控制事务的方法。
与声明式事务不同,编程式事务直接在源代码中插入事务管理的代码逻辑,通过编写事务处理的代码来显式地启动、提交或回滚事务。
2. 为什么要使用编程式事务?使用编程式事务可以更细粒度地控制事务的范围和边界。
例如,可以在一个方法内的多个操作步骤中灵活地启动、提交或回滚事务,而无需在整个方法中锁定事务。
这种方法在需要灵活控制事务行为的情况下非常有用,例如在一组操作中只有某些操作需要回滚。
3. 使用编程式事务的示例下面我们将以一个简单的银行转账业务为例,演示编程式事务的使用方法。
首先,我们需要创建一个用于执行事务的示例。
例如,在Java中,可以使用Spring框架来管理事务。
首先,我们需要在Spring配置文件中定义一个事务管理器,然后在需要执行事务的类或方法上使用事务注解来声明事务。
javaConfigurationEnableTransactionManagementpublic class AppConfig {Beanpublic DataSource dataSource() {配置数据源}Beanpublic PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource());}}接下来,我们创建一个转账服务类,该类包含了转账的业务逻辑。
例如:javaServicepublic class TransferService {Autowiredprivate AccountDao accountDao;Transactionalpublic void transfer(int fromAccountId, int toAccountId, double amount) {Account fromAccount =accountDao.findById(fromAccountId);Account toAccount = accountDao.findById(toAccountId);fromAccount.setBalance(fromAccount.getBalance() - amount);toAccount.setBalance(toAccount.getBalance() + amount);accountDao.update(fromAccount);accountDao.update(toAccount);}}在上述示例中,我们使用了`Transactional`注解来声明转账方法支持事务。
transactiontemplate编程式事务使用示例 -回复
transactiontemplate编程式事务使用示例-回复什么是编程式事务?编程式事务是一种在代码中显式地管理事务的方法。
在传统的事务管理中,事务逻辑被绑定到数据库管理系统中的特定配置中,而编程式事务则允许开发人员手动控制事务的开始、提交或回滚。
这种方法给予了开发人员更大的灵活性和控制权,以满足不同的业务需求。
事务的概念是一组操作作为一个不可分割的工作单元进行处理。
要么所有的操作成功完成并一起提交,要么如果失败则全部回滚。
通过使用编程式事务,开发人员可以在需要的地方显式地定义和控制事务,确保数据的完整性和一致性。
编程式事务的使用示例下面将通过一个简单的示例演示如何使用编程式事务来管理数据库操作。
假设我们有一个在线商店的订单系统,有两个表:订单表和库存表。
当用户下单时,我们需要同时更新订单表和库存表。
如果任一操作失败,我们需要回滚所有的更改。
步骤1:创建数据库连接首先,我们需要创建一个数据库连接对象,并设置自动提交属性为False,以便手动控制事务的提交或回滚。
这可以通过使用数据库连接对象的setAutoCommit方法来实现。
pythonimport psycopg2# 创建数据库连接conn = psycopg2.connect(dbname="your_database_name",user="your_username", password="your_password",host="your_host", port="your_port")# 设置自动提交属性为Falseconn.autocommit = False# 创建游标对象cur = conn.cursor()步骤2:开始事务接下来,我们需要使用游标对象的execute方法开始一个事务。
在PostgreSQL中,开始一个事务的SQL语句是BEGIN。
J2EE开发基础(习题卷3)
J2EE开发基础(习题卷3)第1部分:单项选择题,共59题,每题只有一个正确答案,多选或少选均不得分。
1.[单选题]下面哪一项不是JDBC的工作任务?A)与数据库建立连接B)操作数据库,处理数据库返回的结果C)在网页中生成表格D)向数据库管理系统发送SQL语句答案:C解析:2.[单选题]视图解析器配置文件,横线处<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"> </property></property></bean>应该填写什么?A)*/B)prefixC)srefixD)答案:B解析:3.[单选题]test.jsp 文件如下:<%buffer.append("ABC");%>Buffer is <%=buffer%>试图运行时,将发生()A)编译期错误B)编译Servlet 源码时发生错误C)运行Servlet 时发生错误D)运行后,浏览器上显示: buffer isABC答案:A解析:4.[单选题]下面关于Java 语言特点的描述中,错误的是( )。
A)Java是纯面向对象编程语言,支持单继承和多继承。
B)Java支持分布式的网络应用,可透明地访问网络上的其他对象。
C)Java支持多线程D)Java程序与平台无关、可移植性好。
答案:A解析:5.[单选题]在Spring 配置文件中定义了“ bookServiceTarget ”和通知“ logAdvice ”, 然后定义代理类“ bookService ”, 则以下说法错误的是( )。
( 选择一项)<beans><bean id="bookServiceTarget" class="com.accp.aop.BookServiceImpl"/><bean id="logAdvice" class="com.accp.aop.LogAdvice"/><bean id="bookService"class="org.springframework.aop.framwork.ProxyFactoryBean"><property name="proxyInterfaces"><value>com.accp.aop6BookService</value></property><list><value>com.accp.aop6BookService</value></list></property><property name="target" ref="bookServiceTarget"/></bean></beans>A)通过直接访问bookServiceTarget , logAdvice 中的代码将会被执行B)为了实现前置通知, LogAdvice 需实现MethodBeforeAdvice 接口C)interceporName 指定织入的通知列表,其中<value> 节点可以有多个D)<property name="proxyInterfaces"><value>com.accp.aop.BookService</value></property>可以写成<property name="proxyInterfaces"value="com.acp.aop.BookService">答案:D解析:6.[单选题]@Aspect注解的作用是?A)作用是把当前类标识为一个切面B)标识一个前置增强方法C)标识一个后置增强类D)标识一个动态代理类答案:A解析:7.[单选题]messageorg.bob.taglib.MessageTagemptynametrue对这段配置描述正确的是A)定义了一个message 标签,有一个属性叫nameB)配置了一个名字为message 的标签,该名称对应到org.bob.taglib.MessageTag 类,并且标签不允许有主体内容,使用标签时有一个必须得属性为nameC)声明了一个名字为message 的标签,该标签对应到MessageTag 类,并且标签没有主体内容D)标签配置错误,主体不能为空答案:B解析:8.[单选题]下列选项中不属于服务器端动态网页技术的是( )A)ASPB)JSPC)JavaScriptD)PHP答案:C解析:9.[单选题]阅读以下PL/SQL 程序:1 begin2 for idx in 1..10 loop3 dbms_output.put_line( ‘Index= ’||idx) ;4 End loop5 end以下说法正确的是( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直接使用 PlatformTransactionManager
1.可以使用PlatformTransactionManager直接管理事务。简单地通过一个bean引用 给你的bean传递一个你使用的 PlatformTransaction对象。然后,使用 TransactionDefinition和TransactionStatus对象就可以发起、回滚、提交事务。流程 可能如下: 1 .声明数据源 2 .声明一个事务管理类,例如 DataSourceTransactionManager,HibernateTransactionManger,JTATransactionMan ager等 3 .在我们的代码中加入事务处理代码: //默认的事务属性是PROPAGATION_REQUIRED属性 //初始化事务,参数定义事务的传播类型 TransactionDefinition td = new TransactionDefinition(); //获得事务状态 TransactionStatus ts = transactionManager.getTransaction(td); try{ //do sth mit(ts); } catch(Exception e){transactionManager.rollback(ts);}
事务属性定义
也叫事务传播行为的种类: 也叫事务传播行为的种类
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。 这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执 行。 PROPAGATION_MANDATORY--支持当前事务,如当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务, 就把当前事务挂起。 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有 事务,则进行与PROPAGATION_REQUIRED类似的操作。
编程式事务和事务模板
回顾
Spring之JdbcTemplate操作
JdbcTemplate简介
update(String sql,Object[] obj);
query(String sql,Object[] obj,RowMapper rowMapper) queryForObject(String sql,Object[] obj,RowMapper rowMapper) queryForInt(String sql,Object[] obj) queryForMap(String sql,Object[] obj)
Spring中事务处理
spring提供的事务管理可以分为两类:编 程式的和声明式的。编程式的,比较灵活, 但是代码量大,存在重复的代码比较多;声 明式的比编程式的更灵活。
事务核心接口
Spring提供了几个关于事务处理的接口类:
TransactionDefinition :事务属性定义 ,描述了事务的隔离级别, 超时时间,事 务是否只读, 传播规则等等; TranscationStatus :描述事务的状态,代表了当前的事务,可以提交,回滚 PlatformTransactionManager: 事务管理器接口, 只定义了3个方法:getTransaction()获取事务的状态; commit();rollback(); 事务管理器的实现类有多种,根据具体的持久层框架的不同而不同; 实现类: DataSourceTransactionManager、 HiberNateTransactionManager、 JdoTransactionManager等
目标
事务管理 JDBC事务处理 spring事务处理
编程式事务 声明式事务
编程式事务实现方式
编程式事务核心接口 PlatformTransactionManager实现 TransactionTemplate实现
JDBC中事务处理
以往使用JDBC进行数据操作,使用DataSource,从数据源中得到Connection,我们知道数据源是线程 安全的,而连接不是线程安全的,所以对每个请求都是从数据源中重新取出一个连接。一般的数据源 由容器进行管理,包括连接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等这些J2EE商业容器都 提供了这个功能。 以往的我们使用JDBC在写代码时,事务管理可能会是这样: Connection conn = null; try{ conn = DBConnectionFactory.getConnection; conn.setAutoCommit(false); //do something mit(); //commit transcation }catch(Exception e){ conn.rollback(); //do sth }finally{ try{ conn.close(); } catch(SQLException se){ //do sth.} //close ResultSet,PreparedStatement,Connection //notice:Maybe ocurr Exception when u close rs,pstmt,conn } 按照以往的思路来写代码,代码量比较长,而且容易疏忽,忘掉一些try/catch,引发一些异常无法 catch,虽然有时候我们会写DBTool类,来关闭这些资源,并且保证在关闭这些资源时,不向外抛异 常。
Spring之NamedParameterJdbcTemplate操作
NamedParameterJdbcTemplate简介 Update(String sql, SqlParameterSource ps) Update(String sql, Map paramMap) getJdbcOperations().query(String sql, RowMapper rowMapper) query(String sql, SqlParameterSource ps,RowMapper rowMapper); queryForObject(String sql, SqlParameterSource ps,RowMapper rowMapper) queryForObject(String sql, SqlParameterSource ps,Class RequiredType)
使用TransactionTemplate
2.TransactionTempale采用和其他Spring模板,如JdbcTempalte和 HibernateTemplate一样的方法。它使用回调方法,把应用程序从处理取 得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安 全的。代码片段: TransactionTemplate tt = new TransactionTemplate(); Object result = tt.execute(new TransactionCallback()...{ public Object doTransaction(TransactionStatus status)...{ //do sth return null; } }); 使用TransactionCallback()可以返回一个值。如果使用 TransactionCallbackWithoutResult则没有返回值。 TransactionCallbackWithoutResult —— 执行事务没有返回值,例如save、 update、delete等等; TransactionCallback —— 执行事务处理后有返回值,如find要返回结果集 (List);