- 浏览: 707219 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (260)
- web 开发 (44)
- struts (14)
- java (39)
- 我的感受 (2)
- ajax (2)
- spring (22)
- Hibernate (4)
- struts2 (1)
- java 面试题 (1)
- 英语 学习类 (2)
- jdk1.6特性 (1)
- extjs (13)
- oracle (3)
- JQuery (3)
- ┠ 『Spring 3.0』 ┨ (1)
- 『LOG4J』 (2)
- 『常用数据』 (1)
- JavaMail (0)
- 〓『 EJB3.0 』〓 (0)
- HTML5 (5)
- Canvas (0)
- spring2.5 (0)
- HPH 5 (1)
- C# .net (0)
- UML (1)
- REST (2)
- JS_validate (1)
- 项目管理文章 (1)
- 闲聊闲记 (12)
- SQL-SQL (3)
- javascript (18)
- js (4)
- linux (8)
- 电子政务 (1)
- 项目对象模型 (1)
- 系统集成项目管理 (1)
- shell (2)
- mysql (1)
- solr (5)
- cxf;services (2)
- 11 (0)
- 缓存 (1)
- cached (3)
- 单片机通信 (1)
- cached;oscache (1)
- android (15)
- android;蓝牙 (1)
- Lucene (5)
- TTS (1)
- 网络爬虫 (1)
- HtmlCleaner (1)
- iPhone (2)
- 有感而发 (1)
- Python (0)
- jetty (1)
- Redis (1)
- hadoop (1)
- socket (1)
- 色彩顾问 (1)
- javaapns (1)
- bat (1)
- object-c (4)
- ios (4)
- C-学习 (1)
- 搜索 (1)
- c# (1)
最新评论
-
annie211:
Angularjs构建一个CRUD应用可能用到的全部内容包括:数据绑定、基本模板标识符、表单验证、路由、深度链接、组件重用、依赖注入 -
潇寒听竹:
你好,请问您上传的那个APK为什么每次只能识别一次,不能连续识 ...
pocketsphinxAdroid离线语音识别---入门 -
ichenwenjin:
Angularjs构建一个CRUD应用可能用到的全部内容包括:数据绑定、基本模板标识符、表单验证、路由、深度链接、组件重用、依赖注入 -
NN_iaoiao:
问一下 你的这个People 类 是自定义的还是android ...
android 获取电话本中的联系人列表 -
wangzhe_real:
对于刚接触的我是一个很详细的教程,太感谢了
JAX-RS cxf web服务 rest简单增删改查 集成spring webService
(1)在Spring应用中使用JDBC
Spring对JDBC进行了良好的封装,通过提供相应的模板和辅助类,在相当程度上降低了JDBC操作的复杂性。并且得益于Spring良好的隔离设计,JDBC封装类库可以脱离Spring Context独立使用,也就是说,即使系统并没有采用Spring作为结构性框架,我们也可以单独使用Spring的JDBC部分来改善我们的代码。
<1>回顾JDBC方式进行数据访问的步骤:
1>指定数据库连接参数
2>打开数据库连接
3>声明SQL语句
4>预编译并执行SQL语句
5>遍历查询结果(如果需要的话)
6>处理每一次遍历操作
7>处理抛出的任何异常
8>处理事务
9>关闭数据库连接
综上所述,开发人员在使用JDBC进行数据访问时需要不断重复以上单调乏味的底层细节处理工作。Spring JDBC抽象框架所带来的价值将大大减少开发人员的编码工作。
<2>Spring JDBC简介
Spring提供的JDBC抽象框架由core, datasource,object和 support四个不同的包组成。
org.springframework.jdbc.core包里定义了提供核心功能的类。
org.springframework.jdbc.datasource包里有一个用以简化数据源访问的工具类, 以及各种数据源的简单实现,以被用来在J2EE容器之外不经修改地测试JDBC代码。 这个工具类提供了从JNDI获得连接和可能用到的关闭连接的静态方法。 它支持绑定线程的连接,比如被用于DataSourceTransactionManager。
org.springframework.jdbc.object包里是把关系数据库的查询, 更新和存储过程封装为线程安全并可重用对象的类。尽管查询返回的对象理所当然的“脱离”了数据库连接。 这个JDBC的高层抽象依赖于org.springframework.jdbc.core包中所实现的底层抽象。
org.springframework.jdbc.support包中你可以找到 SQLException的转换功能和一些工具类。
<3>JdbcTemplate类
JdbcTemplate类在JDBC核心包中最重要的类。它简化了JDBC的使用, 因为它处理了资源的建立和释放。 它帮助你避免一些常见的错误,比如忘了总要关闭连接。它运行核心的JDBC工作流, 如Statement的建立和执行,而只需要应用程序代码提供SQL和提取结果。这个类执行SQL查询, 更新或者调用存储过程,模拟结果集的迭代以及提取返回参数值。它还捕捉JDBC的异常并将它们转换成 org.springframework.dao包中定义的通用的,能够提供更多信息的异常体系。
<4>在Spring中配置数据源
示例配置文件:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/test</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean> |
<5>执行Statement
要执行一个SQL,几乎不需要代码。你所需要的全部仅仅是一个数据源和一个JdbcTemplate。 一旦你得到了它们,你将可以使用JdbcTemplate提供的大量方便的方法。 下面是一个例子,它显示了建立一张表的最小的但有完整功能的类。
部分代码示例
public class ExecuteAStatement { private JdbcTemplate jt; private DataSource dataSource;
public void doExecute() { jt = new JdbcTemplate(dataSource); jt.execute("create table mytable (id int, name varchar(100))"); }
public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } } |
<6>执行查询
除了execute方法,还有大量的查询方法。其中的一些被用来执行那些只返回单个值的查询。 也许你需要得到合计或者某一行中的一个特定的值。如果是这种情况,你可以使用queryForInt, queryForLong或者queryForObject。 后者将会把返回的JDBC类型转换成参数中指定的Java类。如果类型转换无效,那么将会抛出一个InvalidDataAccessApiUsageException。 下面的例子有两个查询方法,一个查询得到int,另一个查询得到String。
部分代码示例:
public class RunAQuery { private JdbcTemplate jt; private DataSource dataSource;
public int getCount() { jt = new JdbcTemplate(dataSource); int count = jt.queryForInt("select count(*) from mytable"); return count; }
public String getName() { jt = new JdbcTemplate(dataSource); String name = (String) jt.queryForObject("select name from mytable", java.lang.String.class); return name; }
public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } } |
除了得到单一结果的查询方法之外,还有一些方法,可以得到一个包含查询返回的数据的List。 其中最通用的一个方法是queryForList,它返回一个List, 其中每一项都是一个表示字段值的Map。 你用下面的代码在上面的例子中增加一个方法来得到一个所有记录行的List:
部分代码示例:
public List getList() {
jt = new JdbcTemplate(dataSource);
List rows = jt.queryForList("select * from mytable");
return rows;
}
|
返回的List会以下面的形式: [{name=Bob, id=1}, {name=Mary, id=2}]
<7>更新数据
还有很多更新的方法可以供你使用。我将展示一个例子,说明通过某一个主键更新一个字段。 在这个例子里,我用了一个使用榜定参数的SQL Statement。大多数查询和更新的方法都有这个功能。 参数值通过对象数组传递。
更新数据示例:
public class ExecuteAnUpdate { private JdbcTemplate jt; private DataSource dataSource;
public void setName(int id, String name) { jt = new JdbcTemplate(dataSource); jt.update ("update mytable set name =? where id = ?", new Object[] {name, new Integer(id)}); }
public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } } |
注:insert、delete操作与update基本相同,只需传入相应的SQL语句即可!
<8>JDBC操作的Java对象化
org.springframework.jdbc.object包由一些允许你以更面向对象的方式访问数据库的类组成。你可以执行查询并获得一个包含业务对象的List, 这些业务对象关系数据的字段值映射成它们的属性。你也可以执行存储过程,更新,删除和插入操作。
SqlQuery:
这是一个表示SQL查询的可重用的而且线程安全的对象。子类必须实现newResultReader()方法来提供一个对象,它能在循环处理ResultSet的时候保存结果。这个类很少被直接使用,而使用它的子类MappingSqlQuery,它提供多得多的方法 将数据行映射到Java类。
MappingSqlQuery:
是一个可以重用的查询对象,它的子类必须实现抽象方法mapRow(ResultSet, int)来把JDBC ResultSet的每一行转换成对象。在所有的SqlQuery实现中,这个类是最常使用并且也是最容易使用的。
MappingSqlQuery类使用示例:
public class CustomerMappingQuery extends MappingSqlQuery { public CustomerMappingQuery(DataSource ds) { super (ds, "SELECT id, name FROM customer WHERE id = ?"); super.declareParameter(new SqlParameter("id", Types.INTEGER)); compile(); } public Object mapRow(ResultSet rs, int rowNumber) throws SQLException { Customer cust = new Customer(); cust.setId((Integer) rs.getObject("id")); cust.setName(rs.getString("name")); return cust; } } |
我们为customer查询提供一个构建方法,它只有数据源这一个参数。 在构建方法中,我们调用超类的构建方法,并将数据源和将要用来查询取得数据的SQL作为参数。 因为这个SQL将被用来建立PreparedStatement,所以它可以包含?来绑定执行时会得到的参数。 每一个参数必须通过declareParameter方法并传递给它一个SqlParameter来声明。 SqlParameter有一个名字和一个在java.sql.Types定义的JDBC类型。 在所有的参数都定义完后,我们调用compile方法建立随后会执行的PreparedStatement。
实例化这个自定义查询对象并执行:
public Customer getCustomer(Integer id) { CustomerMappingQuery custQry = new CustomerMappingQuery(dataSource); Object[] parms = new Object[1]; parms[0] = id; List customers = custQry.execute(parms); if (customers.size() > 0) return (Customer) customers.get(0); else return null; } |
SqlUpdate:
表示一个SQL更新操作。就像查询一样, 更新对象是可重用的。更新可以有参数并定义在SQL中。类似于查询对象中的execute()方法,这个类提供很多update()的方法。这个类是具体的。通过SQL设定和参数声明,它可以很容易的参数化。
示例:
import java.sql.Types; import javax.sql.DataSource; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.SqlUpdate;
public class UpdateCreditRating extends SqlUpdate { public UpdateCreditRating(DataSource ds) { setDataSource(ds); setSql("update customer set credit_rating = ? where id =?"); declareParameter(new SqlParameter(Types.NUMERIC)); declareParameter(new SqlParameter(Types.NUMERIC)); compile(); }
public int run(int id, int rating) { Object[] params = new Object[] { new Integer(rating), new Integer(id)}; return update(params); } } |
SqlFunction:
SQL "function"封装返回单一行结果的查询。默认的情况返回一个int,当然我们可以重载它, 通过额外返回参数得到其他类型。这和使用JdbcTemplate的 queryForXxx方法很相似。使用SqlFunction的好处是 不用必须在后台建立JdbcTemplate。这个类的目的是调用SQL function,使用像"select user()"或者"select sysdate from dual" 得到单一的结果。它不是用来调用复杂的存储功能也不是用来使用CallableStatement 来调用存储过程或者存储功能。对于这类的处理应当使用StoredProcedure或者SqlCall。这是一个具体的类,它通常不需要子类化。使用这个包的代码可以通过声明SQL和参数创建这个类型的对象, 然后能重复的使用run方法执行这个function。
得到一张表的行数的例子:
public int countRows() { SqlFunction sf = new SqlFunction(dataSource, "select count(*) from mytable"); sf.compile(); return sf.run(); } |
发表评论
-
Java 数据验证
2017-05-12 10:27 1102在web开发当前就会遇到一些数据有效性验证的相关代码编 ... -
spring mvc rest 小例子
2012-05-24 15:35 1839http://localhost:8080/mainrest/ ... -
JAX-RS cxf web服务 rest简单增删改查 集成spring webService
2011-09-14 14:35 5762没时间什么也不多说了。所有的话都在代码里。 ... -
aop svn
2010-11-30 08:31 1017aop http://student.csdn.net/sp ... -
spring 2.5 mvc 注解 ajax 实现
2010-03-07 19:30 4262spring 2.5 的mvc 大量的使用了注解,减少了xml ... -
spring 2.5 注释驱动的IOC功能
2010-03-04 04:18 1564spring 注释功相当于 以前在spring的配置文件的b ... -
spring 2.0_MVC+Ibatis web 实例
2010-03-04 01:50 2591这个便子是我在面试之后回来做的, 前段时间不久,我去面 ... -
spring 2.0 配置文 件头
2010-02-28 00:02 129<?xml version="1.0" ... -
Spring Jar包详解
2010-01-28 13:35 1314摘自:http://vc88.iteye.com/ ... -
spring配置事务
2010-01-27 17:38 1979<?xml version="1.0" ... -
SSH(Spring+Struts+Hibernate)综合应用
2009-08-04 23:56 1509(1)Struts与Spring整合 <1> 在 ... -
spring 事务管理
2009-08-04 23:31 1666对于J2EE 应用程序而言,事务的处理一般有两种模式: ... -
在Spring应用中使用Hibernate
2009-08-04 11:56 1040<1>Spring in Hibernate示例 ... -
JDBC操作的Java对象化
2009-08-03 23:41 133org.springframework.jdbc.object ... -
Spring中常用三种通知
2009-08-03 17:14 1247(1)前置通知 接口:org.springframework ... -
Spring的体系结构
2009-08-03 16:42 3856Spring 框架是一个分层架 ... -
Spring bean的封装机制
2009-08-03 16:31 1744Spring 从核心而言,是一个DI 容器,其设计哲学是提供一 ... -
spring 中 Bean继承
2009-08-03 16:29 2037某些情况下,你也许需要定义多个实现了共用接口的相同类型的bea ... -
spring 中自动装配你的Bean
2009-08-03 16:27 1882如果你不喜欢自己将你的程序装配起来,你可以尝试让Spring自 ... -
spring 注入参数(Injection Parameters)
2009-08-03 16:25 3047(1)简单的值注入 将简单的值注入到beans里面是很简单的 ...
相关推荐
《Spring数据访问策略详解》 在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,数据访问策略是Spring的重要组成部分,它为开发者提供了多种处理数据存储和检索的方法。本文将深入探讨Spring...
《基于Spring+Spring MVC+Hibernate的智能农业信息管理系统详解》 在现代信息技术的推动下,农业信息化管理已经成为提升农业生产效率、优化资源配置的关键手段。本文将深入探讨一款基于Spring、Spring MVC和...
在线教育平台服务端基于Spring Boot构建,采用Spring Cloud微服务框架。 持久层:MySQL、MongoDB、Redis、ElasticSearch 数据访问层:使用Spring Data JPA 、Mybatis、Spring Data Mongodb等 业务层:Spring IOC、...
本篇将详细阐述如何使用Spring进行数据访问,涵盖多种数据访问方式,包括JDBC、ORM(对象关系映射)框架如Hibernate和MyBatis,以及Spring Data JPA等。 首先,Spring JDBC(Java Database Connectivity)模块提供...
本文将深入探讨如何在一个基于Spring框架的应用中实现多数据源的动态切换,以"基于SSI+Oracle架构的多数据源动态切换实例"为例进行详细讲解。 首先,我们需要理解什么是多数据源。多数据源是指在一个应用中同时连接...
基于Spring+SpringMVC+Mybatis架构的博客系统:博客管理、图表数据、日志分析、访问记录、图库管理、资源管理、友链通知等。良好的页面预加载,无限滚动加载,文章置顶,博主推荐等。提供 用户端+管理端 的整套系统...
本项目实现了一个基于Spring Boot框架和GraphQL技术的数据访问服务。通过Spring Data JPA和Spring GraphQL,客户端能够灵活地查询Northwind数据库中的数据。项目涵盖了从基础的Spring Boot JPA数据服务到高级的...
Spring Data Access Object(DAO)框架是Spring生态体系中用于数据库交互的重要部分,它简化了数据访问层的实现,使得开发者可以更专注于业务逻辑,而不是底层数据库操作。本文将深入探讨Spring DAO框架的入门知识,...
本文探讨了基于Spring Boot框架设计与实现的校园轻博客系统。轻博客系统是一种简洁的博客形式,它提供了多样化的表达方式和简便的社交功能,非常适合校园这种特定环境的网络交流需求。在这样的背景下,设计并开发出...
《基于Spring的在线购物商城详解》 在信息技术日益发展的今天,电子商务已经成为现代生活的重要组成部分,而构建一个基于Spring的在线购物商城系统则是IT专业学生在课程设计中常见且实用的项目。本文将深入探讨这个...
在基于Spring开发的Web新闻发布系统中,Spring框架扮演着核心角色,负责管理对象的生命周期和对象间的依赖关系。 【Spring MVC 模块】 Spring MVC 是 Spring 框架的一个模块,用于构建Web应用程序。它提供了一个...
**基于Spring Boot的个人博客网站项目** 在当前的互联网时代,个人博客已经成为许多技术爱好者、作家和创意人士展示自己作品和思想的平台。本项目基于Spring Boot构建,它是一个轻量级的Java框架,旨在简化Spring...
《基于Spring框架的在线商城系统开发详解》 在信息技术飞速发展的今天,电子商务已经成为现代商业不可或缺的一部分。基于Spring框架的在线商城系统开发是一项常见的实践项目,尤其对于计算机科学和技术的学生而言,...
它还包含了对事务管理、数据访问/集成、远程访问、声明式缓存等的支持,以及用于简化企业级应用开发的各种工具。 2. **SpringMVC**: SpringMVC 是 Spring 框架的一部分,用于构建 Web 应用的模型视图控制器。它...
它通过提供默认配置,使得创建独立的、生产级别的基于Spring的应用变得更加简单,可以直接运行无需额外的配置管理。Spring Boot的核心特性包括自动配置、起步依赖和运行器,这些都极大地提高了开发效率。 在这个...
基于Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element的后台管理系统和小程序,可以提供强大的功能和支持RBAC动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。...
1. **Spring MVC框架**:Spring MVC通过解耦业务逻辑、数据访问和用户界面,使得开发者可以更高效地工作。它将请求映射到控制器,控制器处理请求并调用服务层进行业务逻辑处理,最后返回视图层展示结果。 2. **分页...
接下来,我们转向MyBatis的逆向工程,这是一项强大的工具,可以自动生成数据访问层的代码,包括Mapper接口、Mapper XML文件和对应的Model类。通过以下步骤,我们可以利用Maven的MyBatis Generator插件实现这一过程:...
【标题】"Web服务提供数据访问:Spring+Hibernate整合应用" 在现代软件开发中,Web服务已经成为企业级应用间通信的重要手段。通过Web服务,不同的系统可以共享数据和功能,实现松耦合。本主题主要探讨如何利用...