标签详细说明带实例代码10
storeSqlMap.commitTransaction();
orderSqlMap.commitTransaction();
} finally {
try {
storeSqlMap.endTransaction()
} finally {
orderSqlMap.endTransaction()
}
}
上面的例子中,假设我们通过两个SqlMapClient来使用两个不同的数据库。第一个开始事务的SqlMapClient(orderSqlMap)同时也开始了一个全局事务。在这之后,所有其他的操作将被看作是这个全局事务的一部分,直到同一个SqlMapClient(orderSqlMap)调用commitTransaction()或rollbackTransaction(),届时全局事务被提交并完成其他所有的操作。
警告!虽然这些看起来很简单,但记住不要滥用全局(分布式)事务,这点很重要。这样做既有性能方面的考虑,同时也是因为全局事务会让应用服务器和数据库驱动程序的设置变得更复杂。虽然看起来简单,您可能还是会遇到一些困难。记住,EJB拥有更多厂商和工具支持。对于需要分布式事务的应用,最好还是使用Session EJB。在www.ibatis.com的JPetstore,就是一个使用SQL Map全局事务的例子。
批处理
如果要执行很多非查询(insert/update/delete)的语句,您可能喜欢将它们作为一个批处理来执行,以减少网络通讯流量,并让JDBC Driver进行优化(例如压缩)。SQL Map API使用批处理很简单,可以使用两个简单的方法划分批处理的边界:
sqlMap.startBatch();
//…execute statements in between
sqlMap.executeBatch();
当调用endBatch()方法时,所有的批处理语句将通过JDBC Driver来执行。
用SqlMapClient执行SQL语句
SqlMapCient类提供了执行所有mapped statement的API。这些方法如下:
public int insert(String statementName,
Object parameterObject)
throws SQLException
public int update(String statementName,
Object parameterObject)
throws SQLException
public int delete(String statementName,
Object parameterObject)
throws SQLException
public Object queryForObject(String statementName,
Object parameterObject)
throws SQLException
public Object queryForObject(String statementName,
Object parameterObject, Object resultObject)
throws SQLException
public List queryForList(String statementName,
Object parameterObject)
throws SQLException
public List queryForList(String statementName, Object parameterObject,
int skipResults, int maxResults)
throws SQLException
public List queryForList (String statementName,
Object parameterObject, RowHandler rowHandler)
throws SQLException
public PaginatedList queryForPaginatedList(String statementName,
Object parameterObject, int pageSize)
throws SQLException
public Map queryForMap (String statementName, Object parameterObject,
String keyProperty)
throws SQLException
public Map queryForMap (String statementName, Object parameterObject,
String keyProperty, String valueProperty)
throws SQLException
在上面的每个方法中,Mapped Statement的名称作为第一个参数。这个名称要对应<statement>的名称属性。另外,第二个参数总是参数对象。如果不需要参数对象,可以为null。除了这些之外,上面的方法就没有相同的了。下面简单地介绍一下它们的不同之处。