iBATIS 3 内的新特性:将 iBATIS 用作应用程序内的一种持久框架
2010-04-07 00:00:00 来源:WEB开发网如果您使用 Java 注释方法来定义对象和数据库之间的映射,那么您将无需这个配置文件,因为 iBATIS 3 提供了一个 Java 应用程序编程接口(API),让您可以以编程方式完成此配置。
使用 iBATIS 的好处
使用 iBATIS 的一个好处是 XML 配置让它得以成为一个很好的可用来将对象映射到现有关系数据库的 ORM 框架。有了 Mapper 类以及映射文件,重点就变成了将对象映射到现有的数据结构,而不是使一个数据结构遵从这个对象的结构。虽然配置成本要比使用一个使开发人员更独立于数据结构的框架多了一些,但是单独设计数据库和对象模型的确有其自身的优势。优秀的关系数据库人员和对象模型设计者可能具有相互竞争的目标,从而使得其各自的实现也具有很大的差异。
过去,我也曾在项目中大量使用过 iBATIS,这些项目中的数据库使用的是关系结构和存储过程,并且开发人员对数据库的设计也没有多少控制。
创建示例 Java 项目
要测试本文中的这些例子,需要创建一个空的 Java 项目。在这个新的 Java 项目内,创建一个包括了 main() 方法的类,如清单 6 所示。
清单 6. Main 类
package com.ibm.developerWorks.examples.ibatis;
import java.io.IOException;
import javax.sql.DataSource;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.derby.jdbc.EmbeddedDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import com.ibm.developerWorks.examples.ibatis.data.AutomobileMapper;
import com.ibm.developerWorks.examples.ibatis.model.Automobile;
public class Main {
private static final String CREATE = "create";
private static final String DELETE = "delete";
private static final String IBATIS_CONFIG = "ibatis-config.xml";
private static final String SHOW = "show";
@SuppressWarnings("static-access")
private static Options createOptions() {
Options options = new Options();
options.addOption(CREATE, false, "creates the objects in the database");
options.addOption(OptionBuilder.withArgName(SHOW).hasArg().withDescription(
"shows the specified automobile").withLongOpt(SHOW).create());
options.addOption(DELETE, false, "deletes all of the objects in database");
return options;
}
private static SqlSessionFactory createSqlMapper() throws IOException {
Reader reader = Resources.getResourceAsReader(IBATIS_CONFIG);
return new SqlSessionFactoryBuilder().build(reader);
}
public static void main(final String[] args) {
Options options = createOptions();
try {
CommandLine cmd = new GnuParser().parse(options, args);
SqlSession session = createSqlMapper().openSession();
try {
if (cmd.hasOption(CREATE)) {
System.out.println("Creating the objects in the database...");
// Create the automobiles
session.insert(Automobile.class.getName() + ".insert", new
Automobile(1, "Toyota", "Tercel", 1993));
session.insert(Automobile.class.getName() + ".insert", new
Automobile(2, "Honda", "CR-V", 2000));
session.insert(Automobile.class.getName() + ".insert", new
Automobile(3, "Chevrolet", "Impala", 1964));
session.insert(Automobile.class.getName() + ".insert", new
Automobile(4, "Dodge", "Pickup", 1946));
session.commit();
} else if (cmd.hasOption(SHOW)) {
Automobile auto = (Automobile) session.selectOne(
Automobile.class.getName() + ".select", cmd.getOptionValue(SHOW));
if (auto == null) {
System.out.println("No matching results found!");
} else {
System.out.println(auto);
}
} else if (cmd.hasOption(DELETE)) {
session.delete(Automobile.class.getName() + ".deleteAll");
session.commit();
} else {
System.out.println("Doing nothing.");
}
} finally {
session.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
更多精彩
赞助商链接