Ibatis支持.net开发。
sqlMap文件
<alias> <resultMaps> <statements>
$ #符号
Mobile like '%$mobile%' ->mobile like '%'+#mobile#+'%'
ApplicationContext-ibatis.xml
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文件
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… |
http://www.iteye.com/topic/847698