欢迎使用我的 在线工具

小D

读历史、看小说、写程序都是我所爱。技术不好,头脑不灵光,靠的是兴趣。
随笔 - 35, 文章 - 25, 评论 - 13, 引用 - 0
数据加载中……

使用iBatis

简介
使用SQL Map,能够大大减少访问关系数据库的代码。SQL Map使用简单的XML配置文件将Java Bean映射

成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在

于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您充分发挥SQL语句的能力。

1.  com.ibatis.sqlmap.client.SqlMapClient
 一个使用SQL Maps(从这个类开始运行的)的,线程安全的客户端。这个接口通过继承

SqlMapTransactionManager和SqlMapExecutor接口获得了事务控制和执行方法。
 SqlMapClient是使用SQL Maps 的核心类。这个类将允许你映射操作语句(select、insert、

update、delete等),而且还划分了事务界线并能使用批处理。一旦你拥有了一个SqlMapClient实例,你

使用SQL 映射变得足够简单。
 SqlMapClient能够直接作为多线程客户端使用(内部session管理),或者你也能得到一个单线程

的session并且使用它。如果你明确的获得一个session(使用 openSession()方法)的话,这里可能有一

点轻微性能的提升,因为这样节省了SqlMapClient管理线程上下文信息的开销。但是在大多数的情况下

,这不会产生什么不同,因此你可以选择任意一个你需要或喜欢的方式。
 一个SqlMapClient实例可以被安全地作为静态的,或者实现为一个单例。一般来说,好的想法

是,做成一个简单的配置类,而通过SqlMapClientBuilder去配置这个类的事例。
 其实就是客户端程序员进行Sql Map操作的客户端类。
SQL Maps (com.ibatis.sqlmap.*)
SQL Map的概念
SQL Map API让开发人员可以轻易地将Java Bean映射成PreparedStatement的输入参数和ResultSet结果

集。开发SQL Map的想法很简单:提供一个简洁的架构,能够用20%的代码实现80%JDBC的功能。
SQL Map如何工作?
SQL Map提供了一个简洁的框架,使用简单的XML描述文件将Java Bean,Map实现和基本数据类型的包装

类(String,Integer等)映射成JDBC的PreparedStatement。以下流程描述了SQL Maps的高层生命周期


将一个对象作为参数(对象可以是Java Bean,Map实现和基本类型的包装类),参数对象将为SQL修改语

句和查询语句设定参数值。
1) 执行mapped statement。这是SQL Maps最重要的步骤。SQL Map框架将创建一个PreparedStatement实

例,用参数对象为PreparedStatement实例设定参数,执行PreparedStatement并从ResultSet中创建结果

对象。
2) 执行SQL的更新数据语句时,返回受影响的数据行数。执行查询语句时,将返回一个结果对象或对象

的集合。和参数对象一样,结果对象可以是Java Bean,Map实现和基本数据类型的包装类。


 下面是使用SqlMapClient的示例代码:
 //
 // autocommit simple query --these are just examples...not patterns
 //
 
 Employee emp = (Employee) sqlMap.queryForObject("getEmployee", new Integer(1));
 
 //
 // transaction --these are just examples...not patterns
 //
 
 try {
   sqlMap.startTransaction()
   Employee emp2 = new Employee();
   // ...set emp2 data
   Integer generatedKey = (Integer) sqlMap.insert ("insertEmployee", emp2);
   emp2.setFavouriteColour ("green");
   sqlMap.update("updateEmployee", emp2);
   sqlMap.commitTransaction();
 } finally {
   sqlMap.endTransaction();
 }
 
 //
 // session --these are just examples...not patterns
 //
 
 try {
   SqlMapSession session = sqlMap.openSession()
   session.startTransaction()
   Employee emp2 = new Employee();
   // ...set emp2 data
   Integer generatedKey = (Integer) session.insert ("insertEmployee", emp2);
   emp2.setFavouriteColour ("green");
   session.update("updateEmployee", emp2);
   session.commitTransaction();
 } finally {
   try {
     session.endTransaction();
   } finally {
     session.close();
   }
   // Generally your session scope would be in a wider context and therefore the
   // ugly nested finally block above would not be there.  Realize that sessions
   // MUST be closed if explicitly opened (via openSession()).
 }
 
 //
 // batch --these are just examples...not patterns
 //
 
 try {
   sqlMap.startTransaction()
   List list = (Employee) sqlMap.queryForList("getFiredEmployees", null);
   sqlMap.startBatch ();
   for (int i=0, n=list.size(); i < n; i++) {
     sqlMap.delete ("deleteEmployee", list.get(i));
   }
   sqlMap.executeBatch();
   sqlMap.commitTransaction();
 } finally {
   sqlMap.endTransaction();
 }


 

posted on 2009-11-04 21:10 vagasnail 阅读(406) 评论(0)  编辑  收藏 所属分类: Java框架


只有注册用户登录后才能发表评论。


网站导航: