insert 返回的为插入的主键值,但必须在配置文件中加入 <selectKey/>
如果主键值为 String
< selectKey resultClass = "String" keyProperty = "resourceId" >
<![CDATA[
select resource_id as resourceId from rentout where resource_id=#resourceId#
]]>
</ selectKey >
如果主键值为 Int 型
< selectKey resultClass = "Integer" keyProperty = "id" >
<![CDATA[
Select last_insert_id();
]]>
</ selectKey >
Update, 和 Delete 返回为修改数据影响的条数;
a. 在关键字传入前加‘%’; 例: String keyword=”%”+keyword+”%”;
b 、过滤关键字中的非法字符
在 <sql></sql> 中包含需要复用的 SQL 语句,在需要的地方 <include refid=””/> 引入即可
resultClass: 可以把结果自动映射到相应的 JAVA 类中,但无法指定输出字段的类型,会对性能产生轻微的影响。
resultMap: 可以预先定义 resultMap 元素,可以控制数据如何从结果集中取出,以及哪个属性匹配哪个字段,
parameterClass 属性值是 JAVA 类的全限定名,目的是限制输入参数的类型为指定的 JAVA 类,如果不指定,任何带有合适属性( get/set 方法)的 JAVA BEAN 都可以作为输入参数
parameterMap: 预先定义 parameterMap 的属性值,用于有次序的参数匹配 JDBC 符号
“ # ” 为占为符
“ $ ”为直接替换,但为出现 SQL 引入问题和性能上的影响, like,limit 和表名的引入必须使用“ $ ”
a. 用 ibatis 自带的分页功能,但是自带分页是把所有数据读入内存再分页的,所以必须自己覆写 LimitSqlExecutor 方法,
b. 直接使用 limit 实现
<isEqual> 比较属性值和静态值或另一个属性值是否相等
<idNotEqual> 比较属性值和静态值或另一个属性值是否不相等
<isGreaterThan> 比较属性值是否大于静态值或另一个属性值
<isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值
<isLessThan> 比较属性值是否小于静态值或另一个属性值
<isLessEqual> 比较属性值是否小于等于静态值或另一个属性值
<isNull> 检查属性是否为 NULL
<isNotNull> 检查属性是否不为 NULL
<isEmpty> 检查属性是否为 NULL 或空
<isNotEmpty> 检查属性是否不为 NULL 或不为空
<isPropertyAvailable> 检查是否存在该属性
<isNotPropertyAvailable> 检查是否不存在该属性
用了特殊字符的 SQL 语句不能直接使用。必须用 <![CDATA[ ]]>
<cacheModel id=”person-cache” implementation=”LRU”>
<flushInterval hours=”24”/> // 可以用 hours/minutes/second
<flushOnExecute statement=”selectperson”/> // 需要缓存的方法,可以为多个
<property name=”size” value=”1000”/>
</cacheModel>
缓存策略:
LRU :最近最少使用
MEMORY :适用于没有统一的对象重用模式, property 的属性值必须是 STRONG ,
SOFT , WEAK ,这三个值分别对应于 JVM 不同内存 reference 类型。
WEAK, 大多数情况下, WEAK 是最佳选择,缺省值就是 WEAK ,它能大大提高常用查询的性能,对于当前不被使用的查询数据,将被清除
SOFT ,在查询结果对象不被使用,可以减少内存不足的可能性
STRONG ,对查询的结果一直保留在内存中,可以使用在数据量很少或者静态数据的时
FIFO :先进先出
OSCACHE :配置 oscache.properties
假如没有必要写 JAVA BEAN 作为参数,可以直接使用基本类型,也可以直接传入参数值。如果是直接传入参数值就配置文件中必须写 #value# 做为参数传入
<iterate perpend=”AND” property=”stringList” open=”(” close=”)” conjunction=”OR”>
<![CDATA[
Username=#stringList[]#
]]>
</iterate>
List 参数名后面一定要加“ [] ”,防止解析器简单的把 List 解析成 String
结果: username=(1 or 2 or 3)
startTransacton();
commitTransaction();
rollbackTransaction();
如果有很多非查询的( insert/update/delete )语句要处理,为了减少网络通讯的流量,可以进行批处理
sqlMap.startBatch();
sqlMap.endBatch();
直接把查存出来的结果映射成 XML document
<select id=”getPerson” parameterClass=”int” resultClass=”xml” xmlResultName=”person”>
Select id as id,name as name from person where id=#value#;
</select>
结果:返回的为 XML 格式的字符串( String )
<xmlversion="1.0"encoding="UTF-8"/>
< person >
<id>2</id>
<name>2222</name>
</ person >
xmlResultName 属性值为根目录名