日期:2014-05-16 浏览次数:20381 次
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <!-- Settings各节点的说明: cacheModelsEnable :是否启用SqlMapClient上的缓存机制,建议设为true; enhancementEnabled:是否针对POJO启用字节码增加机制以提升getter/setter的调用效能,避免使用Java reflect所带来的性能开销, 同时也为Lazy Loading带来了极大的性能提升,建议设置为true; lazyLoadingEnabled:是否启用延迟加载机制,建议设为"true"; errorTracingEnabled:是否启用错误日志,在开发期间建议设为"true" 以方便调试; maxRequests:最大并发请求数(Statement并发数); maxSessions:最大Session 数。即当前最大允许的并发SqlMapClient数。maxSessions设定必须介于maxTransactions和maxRequests之间, 即maxTransactions<maxSessions=<maxRequests; maxTransactions:最大并发事务数; useStatementNamespaces:是否使用Statement命名空间。这里的命名空间指的是映射文件中,sqlMap节点的namespace属性,如针对users表的映射文件sqlMap节点: <sqlMap namespace="Users">这里,指定了此sqlMap节点下定义的操作均从属于"Users"命名空间。在useStatementNamespaces="true"的情况 下,Statement调用需追加命名空间,如:sqlMap.update("Users.updateUser",user);否则直接通过Statement名称调用即可,如: sqlMap.update("updateUser",user);但请注意此时需要保证所有映射文件中,Statement定义无重名。 --> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="true" /> <!-- transactionManager节点定义了iBatis的事务管理器,提供三种方式,(1、JDBC,2、jta:分布式数据库,3、EXTERNAL:itbatis本身不做事务处理由外部进行处理); dataSource节点:从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性; type属性:type属性指定了dataSource的实现模式,共三种模式,(1、simple:ibatis提供的较小的连接池 2、dbcp:是apache实现的连接池 3、jndi:tomcate或weblogic提供的服务); JDBC.Driver:JDBC驱动; JDBC.ConnectionURL:数据库连接URL,如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以获得JDBC事务的多Statement支持; JDBC.Username:数据库用户名; JDBC.Password:数据库用户密码; Pool.MaximumActiveConnections:数据库连接池可维持的最大容量; Pool.MaximumIdleConnections:数据库连接池中允许的挂起(idle)连接数; Pool.MaximumCheckoutTime数据库连接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回,(毫秒); Pool.TimeToWait:当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间,(毫秒); Pool.PingQuery:数据库连接状态检测语句。某些数据库在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用, 检测语句应该是一个最简化的无逻辑SQL。如“select 1 from user”,如果执行此语句成功,连接池管理器将认为此连接处于可用状态; Pool.PingEnabled:是否允许检测连接状态; Pool.PingConnectionsOlderThan:对持续连接时间超过设定值(毫秒)的连接进行检测; Pool.PingConnectionsNotUsedFor:对空闲超过设定值(毫秒)的连接进行检测; --> <transactionManager type="JDBC" commitRequired="true"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/company"/> <property name="JDBC.Username" value="root"/> <property name="JDBC.Password" value="11"/> <property name="Pool.MaximumActiveConnections" value="10" /> <property name="Pool.MaximumIdleConnections" value="5" /> <property name="Pool.MaximumCheckoutTime" value="120000" /> <property name="Pool.TimeToWait" value="500" /> <property name="Pool.PingQuery" value="select 1 from ACCOUNT" /> <property name="Pool.PingEnabled" value="false" /> <property name="Pool.PingConnectionsOlderThan" value="1" /> <property name="Pool.PingConnectionsNotUsedFor" value="1" /> </dataSource> </transactionManager> <sqlMap resource="news.xml"/> </sqlMapConfig>
commitRequired为true,即默认为自动提交事物。
commitRequired为false,即以手动的方法提交事物。?
?示例:
public void delete(String newsId) { logger.debug(StringUtil.append("delete()", BEGIN)); SqlMapClient sqlMapClient=IbatisUtil.getInstance().getSqlMapClient(); try { sqlMapClient.startTransaction(); //开始事物