Ibatis支持.net开发。
sqlMap文件
<alias> <resultMaps> <statements>
$ #符号
Mobile like '%$mobile%' ->mobile like '%'+#mobile#+'%'
ApplicationContext-ibatis.xml
- 数据源配置dataSource
- sqlMapClient 关联sqlmap-config.xml和数据源dataSource
- dao bean配置,关联sqlMapClient
sqlMapClient架构
设置配置,如缓存模式(cacheModelsEnabled 缺省true),增加模式(字节码增强 enhancementEnabled 缺省false),延迟加载(lazyLoadingEnabled 缺省true),错误跟踪,最大线程数(maxRequests),最大会话数(maxSession),最大事务数(maxTransaction),使用命名空间(useStatementNamespaces 缺省false 例如:queryForObject("sqlMapName.statementName"); )。
maxRequests > maxSession,maxTransactions, 缺省512
maxSession >= maxTransactions && maxSession < maxRequest 缺省128
maxTransactions <= maxSession && maxTransaction <远远小于 maxRequest 缺省32
数据源配置参数说明:
Pool.MaximumActiveConnections: 数据库连接池可维持的最大容量
Pool.MaximumIdelConnections: 数据库连接池中允许的挂起(idle)连接数
SIMPLE模式:
Pool.MaximumCheckoutTime: 连接被某个任务所允许占用的最大时间。
Pool.TimeToWait: 设定线程所允许等待的最长时间
Pool.PingQuery: select 1 from t_user
Pool.PingConnectionsOlderThan: 对持续连接时间超过设定值的连接进行检测。
Pool.PingConnectionsNotUsedFor: 对空闲超过设定值的连接进行检测。
- 关联sqlMap xml文件
sqlMap文件
1.<typeAlias>
2.resultMap <result />
3.parameterMap <parameter />
4.select,insert,update,delete,statement,sql
<dynamic> 动态SQL,分页查询。
isEmpty,isEqual,isGreaterEqual,isGreaterThan,isLessEqual,isLessThan,isNotEmpty,isNotEqual,isNotNull,isNull
</dynamic>
5.procedure调用存储过程,优点:减少sql网络传输。对业务关系复杂的sql语句的封装,sql语句以程序块的形式被封装在数据库中,写好之后,无论是java,还是.net,抑或其他开发语言,可以像使用sql语句那样随意的调用,这就是数据库开发。
Jdbc: CallableStatement cs = ct.prepareCall("{call paging_pro(?)}");
cs.setString(1, "emp");
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.INTEGER); //注册输出类型。
<parameterMap class="map" id="swap">
<parameter property="nameStr" javaType="java.lang.String" jdbcType="varchar" mode="IN"/>
<parameter property="returnid" javaType="java.lang.Integer" jdbcType="int" mode="OUT"/>
</parameterMap>
<procedure id="insertProcedure" parameterMap="swap">
{call paging_pro(?,?)}
</procedure>
特殊字符的处理:写在<![CDATA[ ]]>
缓存与查询
LRU: 最近最少使用算法
FIFO: 先进先出队列
LFU: 最近最不常用调度算法
OPT: 根据未来实际使用情况将未来的近期里不用的页替换出去,这种算法是用来评价期它替换算法好坏的标准,不可能实现。
<cacheModel type="LRU" id="ttt">
<flushInterval hours="24" />
<flushOnExecute statement="saveT" />
<flushOnExecute statement="modifyT" />
<flushOnExecute statement="deleteT" />
<property name="size" value="1000" />
</cacheModel>
<select … cacheModel="ttt">
sqlMapConfig.xml 中的异同.
| iBATIS_v1 | iBATIS_v2 | iBATIS_v3 |
DOCTYPE | sql-map-config.dtd | sql-map-config-2.dtd | ibatis-3-config.dtd |
configuration标签 | <sql-map-config> </sql-map-config> | <sqlMapConfig> </sqlMapConfig> | <configuration> </configuration> |
sqlMap标签 | <sql-map recource../> | <sqlMap recource../> | <mappers> <mapper recource.. /> </mappers> |
sqlMap 映射中的异同
| iBATIS_v1 | iBATIS_v2 | iBATIS_v3 |
DOCTYPE | sql-map.dtd | sql-map-2.dtd | ibatis-3-mapper.dtd |
sqlMap标签 | <sql-map> </sql-map> | <sqlMap> </sqlMap> | <mapper> </mapper> |
statement标签 | <mapped-statement> </mapped-statement> | <select></select> <update></update> <statement></>… | <select></select> <update></update>
|
参数表示 | #id# | #id# | #{id} |
sqlMap API的异同
| iBATIS_v1 | iBATIS_v2 | iBATIS_v3 |
执行对象 | SqlMap | SqlMapClient | SqlSession |
得到执行 | XMLSqlMapBuilder-> builderSqlMap | SqlMapClientBuilder-> builderSqlMap | SqlSessionFactory-> openSession |
执行 | excuteQueryForObject | queryForObject.. queryForList… update… | selectOne… selectList… update… |