- 浏览: 804568 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
huan19900606:
像haskell这些脚本语言很容易定义DSL,实现对应的词法语 ...
DSL的基本介绍(groovy来进行构建) -
express_wind:
https://yq.aliyun.com/album/130 ...
qlexpress规则引擎初探 -
readxuxuegang:
博主你好。如果groovy的代码是保存在数据库里,不是文件,这 ...
在java中使用groovy怎么搞 (java and groovy) -
express_wind:
hi,兄弟,有没有兴趣来阿里巴巴专门做这方面的研究,https ...
qlexpress规则引擎初探 -
langcaiye:
有2个问题请教:1. 这里的base32算法为什么需要以负数的 ...
【原】geohash算法详解
JDBC 作为java程序员基本上都使用过,但是后面真正做东西的时候,由于JDBC过于底层,除了需要编写数据执行的代码,还需要编写创建connection、释放资源以及对象转换等等问题,相当繁琐。
常见的几个基础类:
DataSource
Conection
Statement
ResultSet
这些类比较基础,灵活运用功能强大,但是写起来比较繁琐。
Spring提供了JdbcTemplate模板,共性的东西模板里面给你做了。
下面是模板类的大体结构。
用JdbcTemplate模板来调用,很简单,只需要简单几步,例如:
public static void main(String[] args) { //(1)获取数据源 DriverManagerDataSource ds = new DriverManagerDataSource("url", "userName", "password"); //(2)创建JdbcTemplate模板类,并设置数据源 JdbcTemplate template = new JdbcTemplate(ds); //(3)调用模板类中的方法 template.execute("select *from uses"); }
下面分析一下JdbcTemplate中的execute(String sql)这个方法,见代码
public void execute(final String sql) throws DataAccessException { if (logger.isDebugEnabled()) { logger.debug("Executing SQL statement [" + sql + "]"); } class ExecuteStatementCallback implements StatementCallback, SqlProvider { public Object doInStatement(Statement stmt) throws SQLException { stmt.execute(sql); return null; } public String getSql() { return sql; } } execute(new ExecuteStatementCallback()); }
方法中有一个回调类,重点是execute中的最后一行,代码
public Object execute(StatementCallback action) throws DataAccessException { Assert.notNull(action, "Callback object must not be null"); Connection con = DataSourceUtils.getConnection(getDataSource()); Statement stmt = null; try { Connection conToUse = con; if (this.nativeJdbcExtractor != null && this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) { conToUse = this.nativeJdbcExtractor.getNativeConnection(con); } stmt = conToUse.createStatement(); applyStatementSettings(stmt); Statement stmtToUse = stmt; if (this.nativeJdbcExtractor != null) { stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt); } Object result = action.doInStatement(stmtToUse); handleWarnings(stmt); return result; } catch (SQLException ex) { // Release Connection early, to avoid potential connection pool deadlock // in the case when the exception translator hasn't been initialized yet. JdbcUtils.closeStatement(stmt); stmt = null; DataSourceUtils.releaseConnection(con, getDataSource()); con = null; throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex); } finally { JdbcUtils.closeStatement(stmt); DataSourceUtils.releaseConnection(con, getDataSource()); } }
(1)Connection con = DataSourceUtils.getConnection(getDataSource());
获取数据库链接,方法的入参是getDataSource(),通过数据源来获取链接,数据源是JdbcTemplate作为属性或者构造函数设置进去的
(2)先看catch以及finally中的代码
JdbcUtils.closeStatement(stmt);
DataSourceUtils.releaseConnection(con, getDataSource());
关闭statement以及释放数据库链接
(3)真正执行的是try中的代码体
Object result = action.doInStatement(stmtToUse);其中这一行是重点,调用入参StatementCallback action
action中的doInStatement方法来执行。
从上面可以看出,template实际上把数据库查询的完整过程都实现了,中间需要用户自定义的部分通过回调的方式让用户传入,
用户只需要关注核心的逻辑即可,其余的脏活累活让模板去干吧。
上面通过一个简单方法,说明了整个过程,JdbcTemplate模板使用了大量的回调接口来完成对数据的访问操作,十分简单易用。
------------------------------------------------------------------------------------------------------------------------------------------------------------
JdbcTemplate虽然简化了很多代码量,但是有个不足,就是sql和代码绑定在一起,看上去不是很优雅,重要的是一些公共的SQL复用起来难度较大,
于是出现了Ibatis来解决这个问题,我任务Ibatis解决了两个问题:
(1)SQL和代码的分离,解耦的同时简化了复用的难度
(2)对象和数据库属性的对应关系在配置文件中申明,然后通过反射来实现
下面我满看一下Ibatis和spring的集成:
<bean id="sqlMapTDDL" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"> <value>classpath:sqlmap-config.xml</value> </property> <property name="dataSource"> <ref bean="transaction_Proxy_datasource" /> </property> </bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientTemplate"> <property name="sqlMapClient"> <ref bean="sqlMapTDDL" /> </property> </bean>
SqlMapClientTemplate是iBatis框架中SqlMapClient的模板类;
SqlMapClientFactoryBean来负责需找ibatis的配置文件以及设置数据源的工作;
Spring虽然为各个模板类提供了support类来进一步简化使用,但是在实际编码中,通常自己是先一个BaseDao来定义常用的方法,
因为Template已经非常简单易用乐呵呵。
发表评论
-
系统分布式情况下最终一致性方案梳理
2015-09-05 19:34 40934前言 目前的应用系 ... -
Storm核心概念剖析
2015-03-20 20:42 3220最近团队中有分析的场 ... -
池和流的两种数据处理方式
2014-11-19 22:59 1379在抽象层面,想了一下,目前很多的数据处理形式,一般分为池和流 ... -
关于CodeReview(java)
2014-10-29 20:42 1894关于codereview,在平时的开发中,经常忽略的环节,参 ... -
java中各种各样的数据结构
2014-07-13 20:26 2455在java中,有非常丰富的数据结构,可能是因为大多数的软件 ... -
关于JVM的ClassLoader(笔记)
2014-07-13 12:19 1859众所周知,java是编译型的语言,写的是java文 ... -
关于事务的几个概念介绍
2014-06-06 22:22 1935啥是事务? 有一组操 ... -
开发中遇到的编码问题
2014-05-22 19:39 18701、说到编码,最大的问题就是乱码了,为啥会有乱码呢 ? 因 ... -
ThreadLocal源代码解析
2014-04-24 17:54 2399最开始的时候,理解的ThreadLocal,我的理解是这样的 ... -
关于单例模式(代码篇)
2014-04-23 10:47 2411很早的时候,转发过一篇单例模式的文章:http://iamz ... -
今天遇到的两个spring相关的两个问题
2014-04-18 21:56 2550今天在项目中写代码,遇到两个Spring的问题,记录一下。再 ... -
Activiti中的命令模式解析
2014-04-11 13:10 3176最近在看Activiti的源代码,发现是基于命令模式进行的开 ... -
关于java中的本地缓存-总结概述
2014-03-31 19:00 18355java中的本地缓存,工作后陆续用到,一直想写,一直无从下 ... -
使用guava中的EventBus构建内存级别的事件引擎
2014-03-25 19:27 6392这个EventBus是guava中比较给力的一个类,从字面 ... -
DSL的基本介绍(groovy来进行构建)
2014-03-04 23:32 17034什么是DSL? 领域特定 ... -
qlexpress规则引擎初探
2014-02-25 22:28 25071qlexpress是啥? 这个是阿里内部的一个开源的jav ... -
在java中使用groovy怎么搞 (java and groovy)
2014-01-15 23:17 10937什么是groovy? 一种基于Java虚拟机的动态语言, ... -
java中记录方法调用时间,结果按照方法的层级树状的输出
2013-12-21 17:36 4669 在java中,最常用的埋点时间的方法就 ... -
一次CMS GC问题排查过程(理解原理+读懂GC日志)
2013-12-14 22:21 41334这个是之前处理过的一个线上问题,处理过程断断续续,经历了两 ... -
令牌桶算法和漏桶算法以及流量控制浅谈
2013-11-27 23:20 20770 在双十一等大促环节,系统需要限流,外部 ...
相关推荐
11.1.1. Spring JDBC包结构 11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. ...
1. **JdbcTemplate**:Spring提供的JdbcTemplate是Spring JDBC支持的核心类,它提供了一系列方便的方法来执行数据库操作。 2. **批处理操作**:对于大量数据的操作,Spring JDBC支持提供了批处理的功能,可以极大地...
Spring通过其DataSourceTransactionManager可以管理iBATIS的事务,而Spring的JdbcTemplate或MyBatis-Spring库可以帮助无缝集成这两者,使得业务逻辑代码更加简洁。 在压缩包中列出的"Spring所需jar"可能包括了...
Spring还支持MyBatis集成,通过Spring的JdbcTemplate或SqlSessionTemplate简化数据库操作。 **iBatis框架**: iBatis是一个持久层框架,将SQL语句和Java代码解耦,避免了传统的JDBC代码编写繁琐的过程。它允许...
- **org.springframework.orm-3.0.0.RELEASE**:提供对主流ORM框架的整合支持,如Hibernate、iBatis等。 - **org.springframework.oxm-3.0.0.RELEASE**:支持Java对象与XML之间的转换,适用于SOAP web服务。 - **...
4. **数据访问支持**:Spring对各种数据库访问技术提供了支持,包括JDBC、Hibernate、iBatis等ORM框架,使得数据库操作更为方便。 5. **国际化支持**:Spring提供了强大的国际化(i18n)支持,通过ResourceBundle和...
2. **Spring JDBC 模块**:Spring 提供了一套强大的 JDBC 抽象,包括 JdbcTemplate 和 NamedParameterJdbcTemplate,它们能简化 SQL 执行和异常处理,但依然需要手动编写 SQL。 3. **MyBatis(iBATIS)**:MyBatis ...
除了iBATIS之外,Spring还提供了自己的JDBC支持,包括简化数据库访问的模板类`JdbcTemplate`。这对于简单的SQL操作非常有用,无需编写复杂的映射逻辑。 ```java @Autowired private JdbcTemplate jdbcTemplate; ...
- JdbcTemplate是Spring提供的一个数据库访问工具,它简化了JDBC的使用,减少了代码中的错误。这部分内容将介绍如何使用JdbcTemplate进行数据库操作,包括查询、插入、更新和删除,以及异常处理和事务控制。 5. **...
6. DAO接口和实现类:与数据库交互的代码,可能使用了Spring的JdbcTemplate或iBatis的SqlSessionTemplate。 通过这个小demo,开发者可以学习到如何在实际项目中配置和使用Struts、Spring和iBatis,理解它们之间的...
Spring提供了JdbcDaoSupport和JpaDaoSupport等抽象类,以及JdbcTemplate、SimpleJdbcInsert等工具类,可以方便地与ibatis结合,实现DAO层的操作。 ### 示例代码分析 在给定的部分内容中,首先介绍了导入所需的包,...
其次,iBATIS的DAO(Data Access Object)可以通过Spring的JdbcTemplate或SqlSessionTemplate进行封装,以便于事务管理和数据库访问。最后,Struts的Action可以通过Spring的依赖注入获取到需要的服务,如Service层...
对于数据库操作,可以选择使用Spring的JdbcTemplate或集成iBatis,通过Spring的SqlSessionTemplate进行数据访问。 4. **Struts2与Spring集成**:通过Spring插件struts2-spring-plugin,实现Struts2 Action类的依赖...
`ibatis-config.xml`是iBatis的配置文件,定义了数据源和映射文件。 2. **实体类(Entity)**:表示数据库中的表模型,用于和数据交互。 3. **Mapper接口与XML映射文件**:iBatis中的Mapper接口定义了SQL操作的...
当 Spring 与 iBATIS 结合使用时,通常采用 Spring 的 DataSourceTransactionManager 和 JdbcTemplate 或者 MyBatis(iBATIS 的后续项目)来实现数据访问。Spring 负责事务管理和对象的生命周期管理,而 iBATIS 则...
8. **spring-orm.jar**:提供与ORM(Object-Relational Mapping)框架的集成,如Hibernate、JPA、iBatis等,使得Spring可以更好地与这些ORM工具协同工作。 9. **spring-web.jar**:提供了基于HTTP的基础网络支持,...
10. **spring-orm.jar**:提供了与ORM(Object-Relational Mapping,对象关系映射)框架的集成,如Hibernate、JPA(Java Persistence API)和iBatis。这使得Spring能够与这些ORM框架无缝协作,简化数据访问层的实现...
11.1.2. Spring JDBC包结构 11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5....
3. JDBC抽象:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,它们是对JDBC的简单包装,降低了SQL操作的复杂性,提高了可读性和可维护性。 4. MyBatis集成:对于偏好XML或注解方式配置SQL的开发者,Spring...
JDBC模块提供了JdbcTemplate,一个用于执行SQL语句的模板类。 6. **Spring ORM**:这个模块整合了流行的对象关系映射(ORM)框架,如Hibernate、JPA、iBatis等,提供了统一的接口进行数据访问。 7. **Spring Web**...