继续学习ibatis,还是代码+注释+说明的简单方式。
ibatis的SqlMapConfig.xml文件的配置
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE sqlMapConfig 3 PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" 4 "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> 5 <sqlMapConfig> 6 7 <!-- cacheModelsEnabled: 是否启用SqlMapClient上的缓存机制。 建议设为"true" --> 8 <!-- enhancementEnabled: 是否针对POJO启用字节码增强机制以提升getter/setter的调用效能,避免Reflect所带来的性能开销。同时,这也为Lazy Loading带来提升。 建议设为"true" --> 9 <!-- lazyLoadingEnabled: 是否使用延迟加载机制,建议设置true --> 10 <!-- errorTracingEnabled: 是否启用错误日志,在开发时设置为"true"可方便调试 --> 11 <!-- maxRequests: 最大并发请求数(Statement并发数) --> 12 <!-- maxSessions: 最大Session数。即当前最大允许的并发SqlMapClient数 --> 13 <!-- maxTransactions: 最大并发事物数,应满足 maxTransactions < maxSessions < maxRequests --> 14 <!-- useStatementNamespaces: 是否使用Statement命名空间。 这里的命名空间指的是映射文件中,sqlMap节的namespace属性,如在上例中针对user表的映射文件sqlMap节点: <sqlMap namespace="User"> 15 这里指定了此sqlMap节点下定义的操作均属于"User"命名空间。 在useStatementNamespaces="true"的情况下,Statement调用需追加命名空间,如:sqlMap.update("User.findUserById", 1); 16 否则直接通过Statement名称调用即可,如: sqlMap.update("findUserById",1); 但请注意此时需要保证所有映射文件中,Statement定义无重名。 --> 17 <settings 18 cacheModelsEnabled="true" 19 enhancementEnabled="true" 20 lazyLoadingEnabled="true" 21 errorTracingEnabled="true" 22 maxRequests="30" 23 maxSessions="10" 24 maxTransactions="5" 25 useStatementNamespaces="false" 26 /> 27 28 <!-- transactionManager 节点定义了ibatis 的事务管理器,目前提供了以下几种选择:JDBC、JTA、EXTERNAL --> 29 <!-- JDBC: 通过传统JDBC Connection.commit/rollback实现事务支持 --> 30 <!-- JTA: 使用容器提供的JTA服务实现全局事务管理 --> 31 <!-- EXTERNAL: 外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制。此时ibatis 将把所有事务委托给外部容器进行管理。 32 此外,通过Spring 等轻量级容器实现事务的配置化管理也是一个不错的选择 --> 33 <properties resource="jdbc.properties" /> 34 <transactionManager type="JDBC"> 35 <!-- type: dataSouce的实现类型。可选值: SIMPLE、DBCP、JNDI --> 36 <!-- SIMPLE:SIMPLE是ibatis内置的dataSource实现,其中实现了一个简单的数据库连接池机制, 对应ibatis 实现类为 37 com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory --> 38 <!-- DBCP: 基于Apache DBCP 连接池组件实现的DataSource 封装,当无容器提供DataSource 服务时,建议使用该选项,对应ibatis 实现类为 39 com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory --> 40 <!-- JNDI: 使用J2EE 容器提供的DataSource 实现,DataSource 将通过指定的JNDI Name 从容器中获取。对应ibatis 实现类为 41 com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory --> 42 <dataSource type="SIMPLE"> 43 <property name="JDBC.Driver" value="${jdbc.driverClassName}" /> 44 <property name="JDBC.ConnectionURL" value="${jdbc.url}" /> 45 <property name="JDBC.Username" value="${jdbc.username}" /> 46 <property name="JDBC.Password" value="${jdbc.password}" /> 47
48 <!-- 数据库连接池可维持的最大容量 --> 49 <property name="Pool.MaximumActiveConnections" value="10"/> 50 <!-- 数据库连接池中允许的挂起(idle)连接数 --> 51 <property name="Pool.MaximumIdelConnections" value="5"/> 52 <!-- 数据库联接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回。(毫秒) --> 53 <property name="Pool.MaximumCheckoutTime" value="12000"/> 54 <!-- 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒) --> 55 <property name="Pool.TimeToWait" value="600"/> 56 <!-- 数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。 57 检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”,如果执行此语句成功,连接池管理器将认为此连接处于可用状态 --> 58 <property name="Pool.PingQuery" value="select 1 from USER"/> 59 <!-- 是否允许检测连接状态 --> 60 <property name="Pool.PingEnabled" value="true"/> 61 <!-- 对持续连接时间超过设定值(毫秒)的连接进行检测 --> 62 <property name="Pool.PingConnectionsOlderThan" value="1"/> 63 <!-- 对空闲超过设定值(毫秒)的连接进行检测 --> 64 <property name="Pool.PingConnectionsNotUsedFor" value="1"/> 65 </dataSource> 66 </transactionManager> 67 68 <!-- sqlMap 节点指定了映射文件的位置,配置中可出现多个sqlMap 节点,以指定项目内所包含的所有映射文件 --> 69 <sqlMap resource="com/si/sqlMap/User.xml" /> 70 </sqlMapConfig>
上面的dataSource为type=“SIMPLE”时的配置。type为DBCP时
1 <!-- 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒) --> 2 <property name="Pool.MaximumWait" value="5000"/> 3 <!-- 数据库连接状态检测语句 --> 4 <property name="Pool.ValidationQuery" value="10"/> 5 <!-- 当数据库连接被废弃时,是否打印日志 --> 6 <property name="Pool.LogAbandoned" value="10"/> 7 <!-- 数据库连接被废弃的最大超时时间 --> 8 <property name="Pool.RemoveAbandonedTimeout" value="10"/> 9 <!-- 当连接空闲时间超过RemoveAbandonedTimeout时,是否将其废弃 --> 10 <property name="Pool.RemoveAbandoned" value="10"/>
type为JNDI时
1 <transactionManager type="JDBC" > 2 <dataSource type="JNDI"> 3 <property name="DataSource" value="java:comp/env/jdbc/myDataSource"/> 4 </dataSource> 5 </transactionManager>