简介
使用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();
 }