ibatis 总结
SqlMap的配置是iBatis中应用的核心:
1、命名空间: <sqlMap namespace="mune">,在此空间外要引用此空间的元素,则需要加上命名空间名。 (在三层架构中一般在持久层调用的时候通过命名空间名访问)
2、实体的别名:<typeAlias type="java.util.HashMap" alias="hmap"/> 也可以是自己写的实体类 <typeAlias alias="mune" type="com.pur.mune"/>
3、SQL入参parameterClass 插入语句入参:parametercolumn="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
<result property="lastName" column="ACC_LAST_NAME"/>
<result property="emailAddress" column="ACC_EMAIL"/>
</resultMap> resultMap映射的结果的目的就是要将查询的结果集绑定到映射对象的属性上。 不管使用哪种返回值参数类型,其最终目的就是要把每条记录映射到一个类的对象或者对象集合上,如果有某个类属性映射不上,则在得到的这个对象或对象集合中这个属性为空。映射的属性可以是表与实体中的一部分。不要同时使用两种返回值参数类型,这样只会令人迷惑。
5、SQL中参数的引用 SQL中引用parameterClass的参数有三种方式: iBatis内置支持的类型,比如int、string,使用#value#来引用,这个value是关键字,不可变。 map类型的参数,使用#keyName#来引用,keyName为键名。 复杂对象的参数,使用#propertyName#来引用,propertyName类属性的名字。
6、模糊查询中参数的引用 模糊查询是针对字符串而言的,如果遇到两个单引号要包含一个参数,则不能再用#来引用变量了,而应该改为$,比如:'%$varName$%',当然,也可以使用 '%' || #varname# || '%' 来绕过此问题。
7、SQL片段 可以通过<sql id="sql_xxx">...</sql>定义SQL片段,然后<include refid="sql_xxx"/>来在各种语句中引用。达到服用目的,
8、动态SQL 可以通过使用动态SQL来组织灵活性更大的更通过的SQL,这样极大减少了编码量,是iBatis应用的第二大亮点。 比如:一个动态的where条件 <dynamic prepend="where">
<isNotEmpty prepend="and" property="$$$$$">
$name like '%'|| #$name# ||'%'
</isNotEmpty>
<isGreaterThan prepend="and" property="$$$$$" compareValue="$$$number">
$code like '%'|| #$code# ||'%'
</isGreaterThan>
</dynamic> 当然,prepend表示链接关键字,可以为任何字符串,当为sql关键字时,iBatis自动判断是否应该添加该关键字。该语法也很简单,关键是要会用心思考组织动态SQL。 这里面有一点要注意:区别<isNotEmpty>和<isNotNull>区别,当为空空串时<isNotEmpty>返回true,当为空串时<isNotNull>返回真。