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. MySQL重置密码与远程连接权限问题

    如果mysql没有密码,或者密码设置为空的时候可以通过在用管理员身份打开cmd,然后在里面输入mysqladmin -u root password 123456  这个地方的密码是明文密码. 如果忘 ...

  2. c++ RTTI(runtime type info)

    RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作符: ...

  3. Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

    Autofac 结合 Castle DynamicProxy2 功能        Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合 ...

  4. vijosP1901学姐的钱包

    题目:https://vijos.org/p/1901 题解:这题比较有意思. 经过一番思考之后我想出了下面的算法: 我们反着来推,按i从大到小 f[i]表示从>=m到 i 需要多长时间,则如果 ...

  5. Storm On Docker

    1. 安装Docker   (1)确认系统版本   sudo lsb_release -a     注:如果提示找不到命令“lsb_release”,使用“yum install redhat-lsb ...

  6. MRTG开源监控安装手册

    环境要求: CentOS6以上版本 2G内存 16G存储 源码包下载:第一部分:下载,第二部分:下载 1.安装snmp: yum install -y net-snmp net-snmp-devel ...

  7. ReactiveCocoa Tutorial

    ReactiveCocoa Tutorial – The Definitive Introduction: Part 1/2 ReactiveCocoa教程——明确的介绍:第一部分(共两部分) As ...

  8. 干货!如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  9. C#开发学习——ADO.NET几个重要对象

    ADO.NET包括多个对象模型,有Connection/Command/DataReader/DataAdapter/DataSet/DataTable/DataView等. 命名空间System.D ...

  10. Intellij IDEA 导入Eclipse或MyEclipse的Web项目(旧版 转载)

    Intellij IDEA 导入Eclipse或MyEclipse的Web项目 博客分类: Intellig IDEA Intellij IDEAEclipseWeb  Intellij IDEA 导 ...