- 浏览: 516746 次
- 性别:
- 来自: 宁波
-
文章分类
- 全部博客 (137)
- JQuery component (3)
- Web编程控件 (7)
- java (19)
- database (9)
- Web Service (6)
- XML (2)
- FTP (2)
- SSH2 (18)
- javascript (3)
- arcgis (7)
- geoserver (1)
- Openscales (2)
- FME (6)
- HttpClient (3)
- portal (6)
- oracle goldengate (7)
- oracle (3)
- 命令锦集 (1)
- web容器 (3)
- NB博客链接 (2)
- 设计模式 (0)
- ext (2)
- 小工具 (12)
- Flex (1)
- LINUX (1)
- Android (1)
- Maven 入门 (2)
- 负载均衡 (1)
- openlayers (2)
- Flexkkjk (0)
最新评论
-
lgh1992314:
ApplicationContext context = We ...
Spring中的ContextLoaderListener使用 -
lgh1992314:
ContextLoaderServletSpring3.0后删 ...
Spring中的ContextLoaderListener使用 -
gaoqiangjava:
...
Spring中的ContextLoaderListener使用 -
liude33:
好资料啊,网上这方面的资料好少。
goldengate 学习资料 -
AKka:
在实体类中加上@Transient 注解后,为什么还会在数据库 ...
JPA注解 转
转:http://just-do-myself.iteye.com/blog/663368
今天看了下Spring的源码——关于JDBC的"薄"封装,Spring 用一个Spring JDBC模板类来封装了繁琐的JDBC操作。下面仔细讲解一下Spring JDBC框架。
一、首先看一下为什么要对JDBC进行封装?
传统的JDBC API实现比较底层,不管用户执行一个复杂的数据库操作还是一个简单的数据库查询操作,都有一个模板可以使用:捕获或抛出异常—获取连接—创建Statement或PreparedStatement—执行数据库操作—获取结果(ResultSet)—其他操作—处理异常—关闭ResultSet—关闭Statement或PreparedStatement—关闭连接。这样的重复操作会让人比较有结构感的同时也消耗了大量的时间。既然所有的数据库操作都可以引用这一模板。那Spring就对JDBC API进行了一层"薄"封装,让程序员脱离繁琐的结构而只编写各个数据库操作程序中的核心部分:CRUD。通过在配置文件中配置数据源来获取连接。这样就减少了那些在传统JDBC编程中的重复编程,让这部分重复交由Spring JDBC容器来处理。
二、Spring JDBC封装是怎样的?
Spring JDBC是提供了一个数据库操作的模板类JdbcTemplate来进行封装的。org.springframework.jdbc.core.JdbcTemplate extends JdbcAccessor implements JdbcOperations 。下面我们来具体看一下这个封装类:
1、JdbcAccessor 是一个抽象类,实现了InitializingBean接口。InitializingBean接口实现了对BeanFactory中的所有属性设置后的响应。JdbcAccessor实现InitializingBean的唯一方法afterPropertiesSet来对设置数据源和其他的日志信息和异常信息和是否是LazyInit(懒加载)。
2、JdbcOperations是一个接口。这个接口定义了一个JDBC操作的集合,多数用回调来对操作进行定义。下面就是其中的方法定义,基本上也可以作为SpringJDBC的文档进行阅读。
操作 | JdbcOperations 方法定义 |
处理简单连接Connection | Object execute(ConnectionCallback action) |
处理静态查询Statement |
Object execute(StatementCallback action) void execute(String sql) Object query(String sql, ResultSetExtractor rse) void query(String sql, RowCallbackHandler rch) List query(String sql, RowMapper rowMapper) Object queryForObject(String sql, RowMapper rowMapper) Object queryForObject(String sql, Class requiredType) Map queryForMap(String sql) long queryForLong(String sql) int queryForInt(String sql) List queryForList(String sql, Class elementType) List queryForList(String sql) SqlRowSet queryForRowSet(String sql) int update(String sql) int[] batchUpdate(String[] sql) |
处理PreparedStatement |
Object execute(PreparedStatementCreator psc, PreparedStatementCallback action) Object execute(String sql, PreparedStatementCallback action) Object query(PreparedStatementCreator psc, ResultSetExtractor rse) Object query(String sql, PreparedStatementSetter pss, ResultSetExtractor rse) Object query(String sql, Object[] args, int[] argTypes, ResultSetExtractor rse) Object query(String sql, Object[] args, ResultSetExtractor rse) void query(PreparedStatementCreator psc, RowCallbackHandler rch) void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) void query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch) void query(String sql, Object[] args, RowCallbackHandler rch) List query(PreparedStatementCreator psc, RowMapper rowMapper) List query(String sql, PreparedStatementSetter pss, RowMapper rowMapper) List query(String sql, Object[] args, int[] argTypes, RowMapper rowMapper) List query(String sql, Object[] args, RowMapper rowMapper) Object queryForObject(String sql, Object[] args, int[] argTypes, RowMapper rowMapper) Object queryForObject(String sql, Object[] args, RowMapper rowMapper) Object queryForObject(String sql, Object[] args, int[] argTypes, Class requiredType) Object queryForObject(String sql, Object[] args, Class requiredType) Map queryForMap(String sql, Object[] args, int[] argTypes) Map queryForMap(String sql, Object[] args) long queryForLong(String sql, Object[] args, int[] argTypes) long queryForLong(String sql, Object[] args) int queryForInt(String sql, Object[] args, int[] argTypes) int queryForInt(String sql, Object[] args) List queryForList(String sql, Object[] args, int[] argTypes, Class elementType) List queryForList(String sql, Object[] args, Class elementType) List queryForList(String sql, Object[] args, int[] argTypes) List queryForList(String sql, Object[] args) SqlRowSet queryForRowSet(String sql, Object[] args, int[] argTypes) SqlRowSet queryForRowSet(String sql, Object[] args) int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder) int update(String sql, PreparedStatementSetter pss) int update(String sql, Object[] args, int[] argTypes) int update(String sql, Object[] args) int[] batchUpdate(String sql, BatchPreparedStatementSetter pss) |
处理callable Statement |
Object execute(CallableStatementCreator csc, CallableStatementCallback action) Object execute(String callString, CallableStatementCallback action) Map call(CallableStatementCreator csc, List declaredParameters) |
上面的所有方法均throws DataAccessException;
3、DataAccessException继承NestedRuntimeException,NestedRuntimeException继承RuntimeException,主要输出异常信息。异常类都不会自己实现太多的方法而是一般调用父类方法来进行实现,只是更细化相应信息的输出和传入相应参数到父类方法进行执行。
4、大家可以看到上述方法很多是用回调来作为参数,而具体在JdbcTemplate中方法的实现还是利用传统的JDBC API中的Connection、Statement、PreparedStatement、ResultSet等类和相应的方法来进行实现回调。
发表评论
-
spring 线程池
2013-10-24 07:30 0spring 配置文件 <!-- app ... -
在javaee项目里集成了hibernate,在使用注解映射表时,老是出现的错误
2012-02-06 14:11 2796在javaee项目里集成了hibernate,在使用注解映射表 ... -
nested exception is org.hibernate.AnnotationException: mappedBy reference an unk
2012-02-06 14:10 4965现有部门与用户两个表 一对多关系 在进行hibern ... -
Hibernate Annotation (Hibernate JPA注解) 实例
2012-01-17 10:06 4063hibernate: 3.6 数据库 oracle ... -
JPA注解 转
2012-01-17 09:53 62101、@Entity(name="EntityName ... -
hibernate反向映射 no entries available
2012-01-16 15:07 4031做项目时,有时需要用hibernate反向映射表,很多时候会出 ... -
hibernate 3配置
2012-01-16 13:29 1027hibernate 搭建 1、所需jar包antlr-2.7 ... -
Struts2+JSON+jQuery实现异步交互数据时选择要序列化的属性(二使用XML配置方式)
2012-01-13 09:46 1280只需在XML配置就可以了,配置方式是: Xml代码 ... -
Struts2+JSON+jQuery实现异步交互数据时选择要序列化的属性(一注解方式转)
2012-01-13 09:45 1647在使用Struts2的JSON插件,实现Action中的属性序 ... -
Struts2练习--基于注解方式Action配置
2012-01-11 16:59 18069还是已登录来说明下这个Action的配置,这里要说的Actio ... -
Struts2练习-最基本的示例 —转
2012-01-11 16:52 1335转-(查看更多内容请点击http://javacrazyer. ... -
struts2.3.1 注解 HTTP Status 404 - There is no Action mapped for namespace
2012-01-11 16:49 3648使用struts2.3.1 注解配置时 自己将配置文件stru ... -
DWR + Spring 配置问题 No class by name
2011-11-23 16:28 4062[framework] 2011-07-26 16:51:0 ... -
DWR Spring 注解 整合
2011-09-22 23:18 14431、添加相应jar包 2、配置web.xml <?x ... -
项目无法使用Hibernate Reverse Engineering ,解决办法
2011-04-13 18:22 1809手工自己编写hibernater的配置文件。可惜当采用Hibe ... -
用AnnotationSessionFactoryBean生成sessionFactory时报错不能创建sessionFactoyBean(转)
2011-02-16 11:04 4091报错信息: [junit] Testcase: testCr ... -
Spring中的ContextLoaderListener使用
2011-01-18 10:30 40287最近 项目中使用Spring 时,applicationCon ... -
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)(转载)
2010-12-16 13:40 1185在JavaEE企业级开发中,以SSH2框架为核心的应用 ...
相关推荐
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <bean id="personDAO" class="com.example.PersonDAOImpl"> <constructor-arg ref="jdbcTemplate"/> ``` **2.6 测试查询** ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 最后,除了基础的JDBC操作,Spring还提供了`NamedParameterJdbcTemplate`,它允许使用命名参数而不是占位符,使得SQL语句更...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 三、JdbcTemplate使用 1. 插入(Insert) 使用`update()`方法执行SQL插入语句,例如: ```java String sql = "INSERT INTO ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` #### Spring中配置数据源 Spring支持多种数据源的配置,包括C3P0、DBCP等。 ##### 配置C3P0数据源 配置示例: ```xml ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 这里,`dataSource`是指向数据源的引用,它是JdbcTemplate执行SQL查询时需要的连接来源。 ### 3. 执行SQL操作 ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 3. **其他Bean注入JdbcTemplate**:如果其他bean需要使用`JdbcTemplate`,可以通过依赖注入的方式注入`jdbcTemplate` bean。 ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 3. **在Servlet中注入JdbcTemplate**:在Servlet的类定义中,通过`@Autowired`注解来注入`JdbcTemplate`: ```java ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 在Java 8中,我们可以利用新的日期和时间API,例如LocalDateTime,LocalDate,LocalTime等,这在处理数据库中的日期和时间...
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @Service public class UserService { private final JdbcTemplate jdbcTemplate; @Autowired public ...
<groupId>org.springframework <artifactId>spring-jdbc <version>5.x.x.RELEASE <groupId>mysql <artifactId>mysql-connector-java <version>8.x.x ``` 以上是关于Spring JDBC和JdbcTemplate的基础知识...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 7. **使用JdbcTemplate** 在DAO类中,你可以注入`JdbcTemplate`实例,然后调用其提供的方法来进行增删查改操作。例如,...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 以上就是关于Spring JdbcTemplate的基本介绍及其在实际项目中的应用。由于这个库主要是针对Oracle数据库设计的,所以很多特定...
- **Spring JDBC**:简化了数据库操作,提供了模板类和JdbcTemplate。 - **Spring ORM**:集成了Hibernate、JPA等ORM框架。 - **Spring Transactions**:统一的事务管理,支持编程式和声明式事务。 - **Spring ...
在Spring框架中,JDBC操作被封装在`org.springframework.jdbc.core.JdbcTemplate`类中,它提供了一种简洁、异常安全的方式来执行SQL查询和更新。JdbcTemplate通过模板方法模式简化了事务管理、异常处理和结果集的...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 2. 执行SQL语句 JdbcTemplate提供了多种方法来执行SQL语句,如`queryForList`, `queryForObject`, `update`等。例如,我们...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 如果你选择JPA,你需要配置`LocalContainerEntityManagerFactoryBean`,并指定数据源、实体扫描路径等: ```xml ...
JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法:execute 方法、update 方法及 batchUpdate ...
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` 3. **基本操作** - **查询**:JdbcTemplate提供了query()方法来执行SQL查询。例如: ```java List<User> users = ...