使用Spring简化JDBC操作数据库
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操作数据库的更多相关文章
- Spring入门(十五):使用Spring JDBC操作数据库
在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- JDBC操作数据库的学习(2)
在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本 ...
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
- Spark Streaming通过JDBC操作数据库
本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Stream ...
- JDBC操作数据库的基本步骤:
JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- Java笔记(第七篇 JDBC操作数据库)
JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...
随机推荐
- Codeforces 731D Funny Game
Description Once upon a time Petya and Gena gathered after another programming competition and decid ...
- USB枚举的详细流程
附一个很好的枚举过程的详细流程: ◆ 用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态.◆ 主机检测设备.◆ 集线器使用中断通道将事件报告给主机.◆ 主机发送Get_Port_ ...
- QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)
QImage与QPixmap加载图片 效果 . 分类: QT开发 qtQtQT PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent) {t ...
- 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)
在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: canno ...
- PL/SQL拼接和使用绑定变量
begin ..loop executeimmediate'insert into p1 values(' || i || ',' || i ||')'; commit; endloop; end; ...
- Linux下文件轻松比对,自由开源的比较软件
文件比较工具用于比较计算机上的文件的内容,找到他们之间相同与不同之处.比较的结果通常被称为diff. diff同时也是一个基于控制台的.能输出两个文件之间不同之处的著名的文件比较程序的名字.diff是 ...
- Azure SQL 数据库的灵活缩放预览版简介
Eron Kelly SQL Server 产品管理部门产品市场营销总经理 几天前,我们宣布了发布 Azure SQL 数据库的灵活缩放公共预览版.新增的灵活缩放功能通过简化开发和管理,简化了扩展和缩 ...
- Delphi中TxmlDocument控件的用法 转
Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xm ...
- 折腾iPhone的生活——iOS设备重刷固件
iOS设备升级系统总共有这么几种方法: 1.OTA升级,也就是我们最常碰到的,在设备上,连上Wifi,在设置里面的软件更新就可以直接通过Wifi安装新的系统(已越狱设备不要这样升级) 2.通过iTun ...
- java ee eclipse 配置 ssh框架
mvnDebug tomcat:run 这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单. 0.如果是mav ...