有许多不同方面的框架,学习Spring可能会令人生畏。其核心是,Spring是控制反转(IOC)和信赖注入(DI)容器。它也是一些切面编程的强大平台。Spring的MVC层、Spring Web Flow、安全性、Roo、AMQP、Blaze Integration和VMWare加到这个列表上的一些新项目,整个事情变得非常吓人。
Spring框架的数据访问设计思想 但是,Spring的好处是,你可以挑选一些项目,而且,你可以学习这些不同项目中的某一部分。例如,在Spring核心下载里面,有一些极好的库文件,可以帮助你执行JDBC操作,随后建立一些非常容易编写和管理的数据访问对象(DAO……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
有许多不同方面的框架,学习Spring可能会令人生畏。其核心是,Spring是控制反转(IOC)和信赖注入(DI)容器。它也是一些切面编程的强大平台。Spring的MVC层、Spring Web Flow、安全性、Roo、AMQP、Blaze Integration和VMWare加到这个列表上的一些新项目,整个事情变得非常吓人。
Spring框架的数据访问设计思想
但是,Spring的好处是,你可以挑选一些项目,而且,你可以学习这些不同项目中的某一部分。例如,在Spring核心下载里面,有一些极好的库文件,可以帮助你执行JDBC操作,随后建立一些非常容易编写和管理的数据访问对象(DAOs)。现在,该专题的教程常常把问题复杂化,携带Spring数据访问各种各样的DI和IoC理念哲学,但是,事实上你可以学习Spring的数据访问方法,而不用做任何的IoC或者切面编程。
比方说,我们想添加一条新记录到名字为gamesummary的数据库表中。
标准的JDBC编码
如果你曾经做过JDBC的编码,下面的AddGameSummary类,你也许会很熟悉。它基本上做了所有的事情,连接数据和使用PreparedStatement插入一条记录:
以下是引用片段: package com.mcnz.spring; import java.sql.*; import javax.sql.*; import org.springframework.jdbc.datasource.*; public class AddGameSummary { public static void main(String[] args) { String dburl = "jdbc:mysql://localhost:3306/rps"; String name = "root"; String pass = "password"; Connection conn = null; DataSource ds = null; try { Driver driver = new com.mysql.jdbc.Driver(); ds = new SimpleDriverDataSource(driver, dburl, name, pass); conn = ds.getConnection(); } catch (SQLException e1) {e1.printStackTrace();} try{ String INSERT_SQL = "INSERT INTO GAMESUMMARY " + " (clientchoice, serverchoice, result, date) " + "VALUES (?, ?, ?)"; PreparedStatement ps = conn.prepareStatement(INSERT_SQL); ps.setString(1, "rock"); ps.setString(2, "paper"); ps.setString(3, "win"); ps.executeUpdate(); ps.close(); } catch (SQLException e) {e.printStackTrace();} finally { try {conn.close();} catch (SQLException e) {e.printStackTrace();} catch (NullPointerException e) {e.printStackTrace();} } } } |
现在,在捕获异常块的处理问题上,有许多复杂的代码块,你不需要做很多事情,常规的设置工作和PreparedStatement的正确参数。所以,Spring能做些什么呢?
使用Spring3.0的JdbcTemplate类
Spring提供了一个超级有用的类,叫做JdbcTemplate。他们的想法是,每当你执行JDBC操作时,总是有很多行几乎相同的代码。所以,为什么不直接建立一个关于这些行代码的模板,而只需要调用这个模板,相当与时刻输入他们呢?而这也正是Spring已经做完的JdbcTemplate类。你通过一个真实的JDBC连接到构造器,初始化它,然后,你能调用一个单独的方法,发出并执行SQL命令。
JdbcTemplate类是JDBC核心包的核心类。它简化了JDBC的使用,因为,它处理建立和释放资源。这帮助你避免常见的错误,如,总是忘记关闭连接。它执行了JDBC的核心工作流,像声明的建立和执行、使用应用代码提供SQL和提取结果。这个类执行SQL的查询、更新声明或者存储过程的调用、通过ResultSet模仿迭代并提取返回参数值。它也捕获JDBC异常,将他们转换成通用的、更丰富的、定义在org.springframework.dao包中的异常层次结构,Spring文档。
所以,我们可以从这里转变AddGameSummary类:
以下是引用片段: try{ String INSERT_SQL = "INSERT INTO GAMESUMMARY " + " (clientchoice, serverchoice, result, date) " + "VALUES (?, ?, ?)"; PreparedStatement ps = conn.prepareStatement(INSERT_SQL); ps.setString(1, "rock"); ps.setString(2, "paper"); ps.setString(3, "win"); ps.executeUpdate(); ps.close(); } catch (SQLException e) {e.printStackTrace();} finally { try {conn.close();} catch (SQLException e) {e.printStackTrace();} catch (NullPointerException e) {e.printStackTrace();} } |
到这:
以下是引用片段: String INSERT_SQL = "INSERT INTO GAMESUMMARY " + " (clientchoice, serverchoice, result, date) " + "VALUES (?, ?, ?)"; JdbcTemplate jdbcTemplate = new JdbcTemplate(ds); jdbcTemplate.update(INSERT_SQL, "rock", "paper", "win"); /*Look ma! No catch block!!! */ |
当我们从上到下看整个类的时候,看上去非常、非常的整洁!
以下是引用片段: package com.mcnz.spring; import java.sql.*; import javax.sql.*; import org.springframework.jdbc.core.*; import org.springframework.jdbc.datasource.*; public class AddGameSummary { public static void main(String[] args) { String dburl = "jdbc:mysql://localhost:3306/rps"; String name = "root"; String pass = "password"; DataSource ds = null; try { Driver driver = new com.mysql.jdbc.Driver(); ds = new SimpleDriverDataSource(driver, dburl, name, pass); conn = ds.getConnection(); } catch (SQLException e1) {e1.printStackTrace();} String INSERT_SQL = "INSERT INTO GAMESUMMARY " + " (clientchoice, serverchoice, result) " + "VALUES (?, ?, ?)"; JdbcTemplate jdbcTemplate = new JdbcTemplate(ds); jdbcTemplate.update(INSERT_SQL, "rock", "paper", "win"); } } |
当运行这个类的时候,以"rock"、"paper"和"win"为值的一条单独的记录将会写入到数据库表中的相应的clientchoice、serverchoice和result的列中。使用JdbcTemplate运行AddGameSummary类的迭代的结果和原始的迭代完全一样,都经过创建和初始化PreparedStatement的步骤,然而,使用Spring类大大简化了与数据库的交互的任务。更何况,你可以利用JdbcTemplate本身的优点,而不必通过Spring的DI、IoC或者切面编程的能力。
作者
相关推荐
-
Spring针对Java 8升级
Java 8刚刚在几周前发布。后来Spring Framework项目负责人发表了题为《企业项目中的Java 8》的文章。文中,指出那些著名的Java EE应用服务器如何不允许轻松升级。
-
软件项目成功:项目的处理
在软件项目成功的因素中有我们谈及了问题域和社区,然这两者并不是软件项目本身。你可以把分类当作问题领域连续讨论几个星期,但分类的问题跟实际执行分类的库并不一样。
-
Rails 4.1改进启动时间和响应布局
在经历了两个候选版本后,Rails团队刚刚发布了Rails 4.1.0。以“单点版本(point release)”发布意在说明更改向后兼容,可以无痛升级。
-
你应该远离的六个Java特性
近日,Tarnovski撰文谈到了普通开发者应该尽量避免使用的6个Java特性,这些特性常见于各种框架或库当中,使用这些特性也许会给你所开发的应用带来灾难。