Spring的开发初衷是为了减轻企业级开发的复杂度,其对数据库访问的支持亦如此,使用Spring访问数据库能带来以下好处:

1.1     简化代码

使用原生的JDBC访问数据库,一般总是要执行以下步骤:

1)         获取数据库资源,例如连接等;

2)         准备并执行SQL,并处理返回结果

3)         释放数据库资源

4)         处理上述所有步骤出现的异常,处理异常的过程中也要捕获异常

典型的代码结构如下:

public TestObj queryTestObj(long id)

{

final String SQL_SELECT_OBJ="select * from testobj where id=?";

Connection conn = null;

PreparedStatement stmt = null;

ResultSet rs=null;

try

{

conn = dataSource.getConnection();

stmt = conn.prepareStatement(SQL_SELECT_OBJ);

stmt.setLong(1, id);

rs = stmt.executeQuery();

TestObj obj=null;

if(rs.next())

{

obj = new TestObj();

//将查询出的各项属性设置至TestObj对象

}

return obj;

}

catch(SQLException ex)

{

//处理异常

}

finally

{

if(rs!=null)

{

try

{

rs.close();

}

catch(SQLException ex)

{

}

}

if(stmt!=null)

{

try

{

stmt.close();

}

catch(SQLException ex)

{

}

}

if(conn!=null)

{

try

{

conn.close();

}

catch(SQLException ex)

{

}

}

}

return null;

}

从示例代码可以看出,真正与业务相关的部分仅仅占用代码的不到20%,而其他大部分代码都在做一些与业务无关的事情,但是这些“冗余代码”却是必不可少而且每个数据库处理都需要,根据“职责拆分”的原则,解决这个问题的办法很明显:将这些“冗余代码”集中到一起。“大步骤相同,而部分步骤的处理细节不同”,这是“模板模式”的典型应用场景。

Spring已经为我们做好了。

先看示例,使用Spring提供的JDBC模板后,上述代码会变成这样:

public TestObj queryTestObjBySping(long id)

{

final String SQL_SELECT_OBJ="select * from testobj where id=?";

return jdbcTemplate.queryForObject(SQL_SELECT_OBJ,

new ParameterizedRowMapper<TestObj>()

{

@Override

public TestObj mapRow(ResultSet arg0, int arg1)

throws SQLException

{

TestObj obj = new TestObj();

//将查询出的各项属性设置至TestObj对象

return obj;

}

}, id);

}

1.2     细化的异常体系

原生JDBC的数据库操作异常类包括BatchUpdateException、DataTruncation、SQLException、SQLWarning四个,而令人难以理解的是,这些异常都是Checked异常,也就是说,代码中必须显式捕捉它们,但是如果出现这些异常,一般都是发生了致命性的且运行时不可恢复的错误,异常处理块中除了打印堆栈外难以有其他有意义的操作。

Spring对此做了两个改进:(1)细化异常,便于分析问题;(2)将异常修改为UnChecked类型。

Spring细化的异常如下

使用Spring简化JDBC操作数据库的更多相关文章

  1. Spring入门(十五):使用Spring JDBC操作数据库

    在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...

  2. JDBC操作数据库的三种方式比较

    JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...

  3. 用于JDBC操作数据库的公共类

    /* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...

  4. JDBC操作数据库的学习(2)

    在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本 ...

  5. JDBC操作数据库的学习(1)

    单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...

  6. Spark Streaming通过JDBC操作数据库

    本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Stream ...

  7. JDBC操作数据库的基本步骤:

    JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操 ...

  8. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  9. Java笔记(第七篇 JDBC操作数据库)

    JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...

随机推荐

  1. GemFire

    一.GemFire是什么?   如果你了解Redis或memCached,那么恭喜,你很快就能理解GemFire是什么,没错,你可以把它理解为一个增强版的Redis,具体在哪些方面增强,我们日后慢慢聊 ...

  2. 跨终端Web之Hybrid App

    Native App(以下简称Native)和Mobile Web(以下简称Web)二者混合开发的产物被称为Hybrid App(以下简称Hybrid).Hybrid并不是什么新概念,最早可以追溯到S ...

  3. 编写优质无错C程序秘诀!《经验谈》

    这里我将陆续给大家载出我在以前学习和编写c代码时遇到的问题和解决方法.学习的心得,有些是经过查询一些曾经参加微软microsoft的开发小组的老程序员的书籍和资料后提供给大家! 首先,当发现错误时,要 ...

  4. VC++6.0 编写插件(图文并茂)

    下午偶然注意到VC++6.0新建工程标签页下的DevStudio Add-in Wizard,没有接触过,看名字是给Developer Studio开发插件,心生喜感,于是百度之,发生百度检索几乎找不 ...

  5. 第1章(三)安装VS2015和Xamarin For VS

    原文 第1章(三)安装VS2015和Xamarin For VS 操作系统:Win7  64位(sp1或更高版本) 1.安装VS2015 VS2015简体中文企业版:vs2015.ent_chs.is ...

  6. Myeclipse 保存jsp异常Save FailedCompilation unit name must end with .java, or one of the registered Java-like extensions

    如图 解决方法:去掉jsp页面的调试断点

  7. 笔记-人老了-github

    其实GITHUB是很不错的,虽然之前的JD泄露那件事情,后果很严重. 但是作为个人使用很不错的. github使用入门: 1:申请一个帐号 2:github使用ssh推送的.(ssh走的是加密) 所以 ...

  8. 如何解决缺少OCX问题,如何在win7 64位下注册OCX

    最近原来的系统很慢,重装win7. 今天跑文章格式化编辑器,结果提示找不到Comctl32.ocx. 1. 上网搜索下载Comctl32.ocx,直接拷贝到c:\windows\system32不行, ...

  9. 实现自己的脚本语言ngscript之四:代码生成

    最近的进度 ngscript测试代码 function c1(a, b, c, d) { this.a = 1; this.b = new array(); this.b[0] = 1; this.b ...

  10. java 解析xml文件案例

    package xmlTest; import javax.xml.parsers.*; import org.w3c.dom.*; public class GetXml { public stat ...