1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE sqlMapConfig 3 PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 4 "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> 5 <sqlMapConfig> 6 <settings ⑴ 7 cacheModelsEnabled="true" 8 enhancementEnabled="true" 9 lazyLoadingEnabled="true" 10 errorTracingEnabled="true" 11 maxRequests="32" 12 maxSessions="10" 13 maxTransactions="5" 14 useStatementNamespaces="false"/> 15 <transactionManager type="JDBC"> ⑵ 16 <dataSource type="SIMPLE"> ⑶ 17 <property name="JDBC.Driver" value="com.p6spy.engine.spy.P6SpyDriver"/> 18 <property name="JDBC.ConnectionURL"value="jdbc:mysql://localhost/sample"/> 19 <property name="JDBC.Username" value="user"/> 20 <property name="JDBC.Password" value="mypass"/> 21 <property name="Pool.MaximumActiveConnections" value="10"/> 22 <property name="Pool.MaximumIdleConnections" value="5"/> 23 <property name="Pool.MaximumCheckoutTime" value="120000"/> 24 <property name="Pool.TimeToWait" value="500"/> 25 <property name="Pool.PingQuery" value="select 1 from ACCOUNT"/> 26 <property name="Pool.PingEnabled" value="false"/> 27 <property name="Pool.PingConnectionsOlderThan" value="1"/> 28 <property name="Pool.PingConnectionsNotUsedFor" value="1"/> 29 </dataSource> 30 </transactionManager> 31 <sqlMap resource="com/ibatis/sample/User.xml"/> ⑷ 32 <sqlMap resource="com/ibatis/sample/Address.xml"/> 33 </sqlMapConfig>
| 参数 | 描述 | 
| cacheModelsEnabled | 是否启用SqlMapClient上的缓存机制。 建议设为"true" | 
| enhancementEnabled | 是否针对POJO启用字节码增强机制以提升 getter/setter的调用效能,避免使用Java Reflect所带来的性能开销。 同时,这也为Lazy Loading带来了极大的性能 提升。 建议设为"true" | 
| errorTracingEnabled | 是否启用错误日志,在开发期间建议设为"true" 以方便调试 | 
| lazyLoadingEnabled | 是否启用延迟加载机制,建议设为"true" | 
| maxRequests | 最大并发请求数(Statement并发数) | 
| maxTransactions | 最大并发事务数 | 
| maxSessions | 最大Session 数。即当前最大允许的并发SqlMapClient数。 maxSessions设定必须介于 maxTransactions和maxRequests之间,即 maxTransactions<maxSessions=< maxRequests | 
| useStatementNamespaces | 是否使用Statement命名空间。 这里的命名空间指的是映射文件中,sqlMap节点 的namespace属性,如在上例中针对t_user 表的映射文件sqlMap节点: <sqlMap namespace="User"> 这里,指定了此sqlMap节点下定义的操作均从 属于"User"命名空间。 在useStatementNamespaces="true"的情 况下,Statement调用需追加命名空间,如:sqlMap.update("User.updateUser",use r); 否则直接通过Statement名称调用即可,如: sqlMap.update("updateUser",user); 但请注意此时需要保证所有映射文件中, Statement定义无重名。 | 
| 参数 | 描述 | 
| JDBC.Driver | JDBC 驱动。如:com.microsoft.jdbc.sqlserver.SQLServerDriver | 
| JDBC.ConnectionURL | 数据库URL。如: jdbc:microsoft:sqlserver://localhost:1433;databaseName=ibatis如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以获得JDBC事务的多Statement支持。 | 
| JDBC.Username | 数据库用户名 | 
| JDBC.Password | 数据库用户密码 | 
| Pool.MaximumActiveConn ections | 数据库连接池可维持的最大容量。 | 
| Pool.MaximumIdleConnec tions | 数据库连接池中允许的挂起(idle)连接数 | 
| Pool.MaximumCheckoutTime | 数据库联接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回。(毫秒) | 
| Pool.TimeToWait | 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒) | 
| Pool.PingQuery | 数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”,如果执行此语句成功,连接池管理器将认为此连接处于可用状态 | 
| Pool.PingEnabled | 是否允许检测连接状态。 | 
| Pool.PingConnectionsOlderThan | 对持续连接时间超过设定值(毫秒)的连接进行检测。 | 
| Pool.PingConnectionsNotUsedFor | 对空闲超过设定值(毫秒)的连接进行检测。 | 
| Pool.MaximumWait | 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒) | 
| Pool.ValidationQuery | 数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”,如果执行此语句 成功,连接池管理器将认为此连接处于可用状态。 | 
| Pool.LogAbandoned | 当数据库连接被废弃时,是否打印日志。 | 
| Pool.RemoveAbandonedTimeout | 数据库连接被废弃的最大超时时间 | 
| Pool.RemoveAbandoned | 当连接空闲时间超过RemoveAbandonedTimeout时,是否将其废弃。 | 
1 <transactionManager type="JDBC" > 2 <dataSource type="JNDI"> 3 <property name="DataSource" 4 value="java:comp/env/jdbc/myDataSource"/> 5 </dataSource> 6 </transactionManager>
1 <transactionManager type="JTA" > 2 <property name="UserTransaction" value="java:/ctx/con/UserTransaction"/> 3 <dataSource type="JNDI"> 4 <property name="DataSource" value="java:comp/env/jdbc/myDataSource"/> 5 </dataSource> 6 </transactionManager>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="映射文件名称:User"> <typeAlias alias="user" type="com.ibatis.sample.User"/> 给对应的类取别名 <cacheModel id="userCache" type="LRU"> <flushInterval hours="24"/> 设定缓存有效期 <flushOnExecute statement=" updateUser"/> 指定执行特定Statement时,将缓存清空。如updateUser操作将更新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。 <property name="size" value="1000" /> CacheModel中最大容纳的数据对象数量 </cacheModel> 申明了一个名为"userCache"的cacheModel,之后可以在Statement申明中对其进行引用:例如: <select id="getUser" parameterClass="java.lang.String" resultClass="user" cacheModel="userCache"> <select id="" parameterClass="java.lang.String" resultClass="user"> <![CDATA[ 可以避免SQL 中与XML 规范相冲突的字符对XML映射文件的合法性造成影响。 SQL语句 ]]> </select> < update id=" " parameterClass="java.lang.String" > <![CDATA[ SQL语句 ]]> </ update > < insert id=" " parameterClass="java.lang.String" > <![CDATA[ SQL语句 ]]> </ insert > < delete id="" parameterClass="java.lang.String" > <![CDATA[ SQL语句 ]]> </ delete > </sqlMap>
1 public class SQLMapper { 2 public static SqlMapClient sqlMapper; 3 static{ 4 String resource = "org/lzp/xml/SqlMapConfig.xml";指明了配置文件的相对路径 5 try { 6 Reader reader = Resources.getResourceAsReader(resource); 7 //ibatis2.0 8 /* XmlSqlMapClientBuilder xmlBuilder = 9 new XmlSqlMapClientBuilder(); 10 sqlMapper = xmlBuilder.buildSqlMap(reader); 11 */ 12 //ibatis1.0 13 sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); 14 } catch (Exception e) { 15 e.printStackTrace(); 16 } 17 } 18 }
| 参数 | 描述 | 
| parameterClass | 参数类。指定了参数的完整类名(包括包路径)。 可通过别名避免每次重复书写冗长的类名。 | 
| resultClass | 结果类。指定结果类型的完整类名(包括包路径) 可通过别名避免每次重复书写冗长的类名。 | 
| parameterMap | 参数映射,需结合parameterMap节点对映射关系加以定义。对于存储过程之外的statement而言,建议使用parameterClass作为参数配置方式,一方面避免了参数映射配置工作,另一方面其性能表现也更加出色。 | 
| resultMap | 结果映射,需结合resultMap节点对映射关系加以定义。 | 
| cacheModel | statement对应的Cache模块。 | 
1 <select id="getUsers" parameterClass="user" resultClass="user"> 2 Select id,name,sex from t_user 3 <dynamic prepend="WHERE"> 4 <isNotEmpty prepend="AND" property="name"> 5 (name like #name#) 6 </isNotEmpty> 7 <isNotEmpty prepend="AND" property="address"> 8 (address like #address#) 9 </isNotEmpty> 10 </dynamic> 11 </select>
| 节点名 | 描述 | 
| <isPropertyAvailable> | 参数类中是否提供了此属性 | 
| <isNotPropertyAvailable> | 与<isPropertyAvailable>相反 | 
| <isNull> | 属性值是否为NULL | 
| <isNotNull> | 与<isNull>相反 | 
| <isEmpty> | 如果属性为Collection或者String,其size是否<1, 如果非以上两种类型,则通过 String.valueOf(属性值) 获得其String类型的值后,判断其size是否<1 | 
| <isNotEmpty> | 与<isEmpty>相反。 | 
| 节点名 | 属性值与compareValues的关系 | 
| <isEqual> | 相等。 | 
| <isNotEqual> | 不等。 | 
| <isGreaterThan> | 大于 | 
| <isGreaterEqual> | 大于等于 | 
| <isLessThan> | 小于 | 
| <isLessEqual> | 小于等于 | 
原文:http://www.cnblogs.com/xiayahui/p/4545713.html