ibatis

ibatis中#与$的区别

#与$区别:

1.#是把传入的数据当作字符串,如果 order by #field# ,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..

2.$传入的数据直接生成在sql里,如果 order by $field$ ,如$field$ 传入的是id,则sql语句生成是这样,order by id, 这就对了.
3.$方式一般用于传入数据库对象.例如传入表名. 如果传入动态sql或条件则注意防sql注入

4.#方式一般用于传入插入/更新的值或查询/删除的where条件

另附<dynamic prepend ="字符串"> 属性关键字:

 

 

属性关键字

含义

 

<isEqual>

如果参数相等于值则查询条件有效。

<isNotEqual>

如果参数不等于值则查询条件有效。

<isGreaterThan>

如果参数大于值则查询条件有效。

<isGreaterEqual>

如果参数等于值则查询条件有效。

<isLessEqual>

如果参数小于值则查询条件有效。如下所示:

<isLessEqual prepend = ”AND” property = ”age” compareValue = ”18” >

ADOLESCENT = ‘TRUE’

</isLessEqual>

<isPropertyAvailable>

如果参数有使用则查询条件有效。

<isNotPropertyAvailable>

如果参数没有使用则查询条件有效。

<isNull>

如果参数为NULL则查询条件有效。

<isNotNull>

如果参数不为NULL则查询条件有效。

<isEmpty>

如果参数为空则查询条件有效。

<isNotEmpty>

如果参数不为空则查询条件有效。参数的数据类型为Collection、String 时参数不为NULL或“”。如下所示:

<isNotEmpty prepend=”AND” property=”firstName” >

FIRST_NAME=#firstName#

</isNotEmpty>

<isParameterPresent>

如果参数类不为NULL则查询条件有效。

<isNotParameterPresent>

Checks to see if the parameter object is not present (null). Example Usage:

<isNotParameterPresent prepend=”AND”>

EMPLOYEE_TYPE = ‘DEFAULT’

</isNotParameterPresent>

在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型匹配,而$不进行数据类型匹配,例如: select * from table where id = #id# ,其中如果字段id为字符型,那么#id#表示的就是'id'类型,如果id为整型,那么#id#就是id类型。 select * from table where id = $id$ ,如果字段id为整型,Sql语句就不会出错,但是如果字段id为字符型,那么Sql语句应该写成 select * from table where id = '$id$'
例子:
 <if test="@Ognl@isNotEmpty(manufacturer)">
				AND manufacturer like "%"#{manufacturer}"%"
			</if>
	       <if test="@Ognl@isNotEmpty(displacement)">
				AND displacement &gt;=${displacement}
			</if>
			<if test="@Ognl@isNotEmpty(displacement2)">
				AND displacement &lt;= ${displacement2}
			</if>
	       <if test="@Ognl@isNotEmpty(vehicleType)">
				AND vehicleType = #{vehicleType}
			</if>
	       <if test="@Ognl@isNotEmpty(genericName)">
				AND genericName like "%"#{genericName}"%" 
			</if>

你可能感兴趣的:(ibatis)