WEB开发网
开发学院软件开发Java iBATIS 3 内的新特性:将 iBATIS 用作应用程序内的... 阅读

iBATIS 3 内的新特性:将 iBATIS 用作应用程序内的一种持久框架

 2010-04-07 00:00:00 来源:WEB开发网   
核心提示: 在 Automobile mapper 的 XML 配置中,resultMap 元素用来映射 model_year 数据库列与 Automobile 对象上的 year 字段,iBATIS 3 内的新特性:将 iBATIS 用作应用程序内的一种持久框架(8),这个映射相当简单,可以在注释内进行,

在 Automobile mapper 的 XML 配置中,resultMap 元素用来映射 model_year 数据库列与 Automobile 对象上的 year 字段。这个映射相当简单,可以在注释内进行,只要使用为该列赋别名的 SQL 特性就可以了,这个特性可由在 @Select 注释内定义的 SQL 完成。

AutomobileMapper 接口内的 Select 注释将 selectAutomobile 方法映射到用来根据给定值从 automobiles 表选择一个记录的 SQL。这个值被指定为实参的 id 参数并被作为 #{id} 包括在这个 SQL 语句内,正如其在 XML 配置中那样。使用 Java 接口映射这些 SQL 方法的一个极大的好处是 feedbac 会以编译时错误的形式出现在 Java 编辑器中。这样一来,我们就可以确认这些方法均能返回正确的类型,而 XML 配置通常需要先执行代码才能找到错误。

此外,iBATIS 3 现在还支持接口继承,允许对 Java 接口进行优化以减少代码重复。

iBATIS 文档中有这样的一个提示,即对于较小且较为简单的项目,注释可以更为简单和易读。不过,较 XML 配置而言,注释的功能相对有限。若项目中包含复杂的对象或复杂的数据库结构,请考虑使用 XML 配置,而不是 Java 注释。

其他的 API 变更

iBATIS 的基于注释的配置要求实例化也要稍微不同。我们不再使用 Reader 类来读取 XML 配置,而是要向 Configuration 对象添加映射程序,如清单 9 所示。

清单 9. 使用了注释配置的新 Java 代码

package com.ibm.developerWorks.examples.ibatis; 
 
// snipped imports 
 
public class Main { 
 
  // snipped constants declarations--didn't change 
 
  // new method for creating data source 
  private static DataSource createDataSource() { EmbeddedDataSource 
  dataSource = new org.apache.derby.jdbc.EmbeddedDataSource(); 
  dataSource.setDatabaseName("/tmp/MyDB"); return dataSource; } 
 
  @SuppressWarnings("static-access") 
  private static Options createOptions() { 
   // snipped... no changes 
  } 
 
  private static SqlSessionFactory createSqlMapper() throws 
   IOException { DataSource datasource = createDataSource(); 
   TransactionFactory transaction = new JdbcTransactionFactory(); 
    Configuration configuration = new Configuration(new Environment 
    ("development", transaction, datasource)); configuration 
    .addMapper(AutomobileMapper.class); 
    return new SqlSessionFactoryBuilder().build(configuration); 
  } 
 
  public static void main(final String[] args) { 
    Options options = createOptions(); 
    try { 
      CommandLine cmd = new GnuParser().parse(options, args); 
 
      SqlSession session = createSqlMapper().openSession(); 
      AutomobileMapper mapper = session.getMapper(AutomobileMapper.class); 
       
      try { 
        if (cmd.hasOption(CREATE)) { 
          System.out.println("Creating the objects in the database..."); 
          // Create the automobiles 
          mapper.insertAutomobile(new Automobile 
          (1, "Toyota", "Tercel", 1993)); 
          mapper.insertAutomobile(new Automobile 
          (2, "Honda", "CR-V", 2000)); 
          mapper.insertAutomobile( new Automobile(3, 
          "Chevrolet", "Impala", 1964)); 
          mapper.insertAutomobile(new Automobile(4, "Dodge", "Pickup", 1946)); 
 
          session.commit(); 
 
        } else if (cmd.hasOption(SHOW)) { 
Automobile auto = mapper.selectAutomobile( Integer.parseInt(cmd.getOptionValue(SHOW))); 
 
          if (auto == null) { 
            System.out.println("No matching results found!"); 
          } else { 
            System.out.println(auto); 
          } 
 
        } else if (cmd.hasOption(DELETE)) { 
 
          mapper.deleteAll(); 
          session.commit(); 
 
        } else { 
          System.out.println("Doing nothing."); 
        } 
 
      } finally { 
        session.close(); 
      } 
 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
 
} 

上一页  3 4 5 6 7 8 9  下一页

Tags:iBATIS 特性 iBATIS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接