Spring框架学习指导

日期: 2010-12-02 作者:Sal Pece翻译:刘志超 来源:TechTarget中国 英文

有许多不同方面的框架,学习Spring可能会令人生畏。其核心是,Spring是控制反转(IOC)和信赖注入(DI)容器。它也是一些切面编程的强大平台。Spring的MVC层、Spring Web Flow、安全性、Roo、AMQP、Blaze Integration和VMWare加到这个列表上的一些新项目,整个事情变得非常吓人。

  Spring框架的数据访问设计思想   但是,Spring的好处是,你可以挑选一些项目,而且,你可以学习这些不同项目中的某一部分。例如,在Spring核心下载里面,有一些极好的库文件,可以帮助你执行JDBC操作,随后建立一些非常容易编写和管理的数据访问对象(DAO……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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或者切面编程的能力。

作者

Sal Pece
Sal Pece

相关推荐

  • 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特性,这些特性常见于各种框架或库当中,使用这些特性也许会给你所开发的应用带来灾难。