ibatis如何配置动静态结合的where语句

ibatis如何配置动静态结合的where语句,第1张

1.

<dynamic prepend="where">..</dynamic>标签,即可此标签中间部分任一个条件为true时,会向当前的sql语句中添加一个"where"的字符.

2.

若只有一个判断条件时,可以直接用:

<isNotEmpty prepend="where" property="name">键宏竖

name like '%$name$%'

</isNotEmpty>

3.

模糊查询:

在通常情况下ibatis的参数在sqlmap中使用#param#的形式,参数名以稿大’#‘包着,但当使用模糊查询时,须将#改为$.如上.

4.

设置范围查询时,须用双重判断,又如绝樱:

<isNotEmpty prepend="" property="_starttime">

<isNotEmpty prepend="and" property="_endtime">

<![CDATA[

createtime >= #_starttime#

and createtime <#_endtime#

]]>

</isNotEmpty>

</isNotEmpty>

首先,所谓SQL的动态和静态,是指SQL语句在何时被编译执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程。

在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,例如在Java的一段代码中有一个待执行的SQL“select * from t1 where c1>5”,在Java编译阶段,就可以将这段SQL交给数据库管理系统去分析,数据返慎库软件可以对这段SQL进行语法解析,生成数据库方面的可执行代码,这样的SQL称为静态SQL,即在编译阶段就可以确定数据库要做什么事情。

而如果嵌入的SQL没有明确给出,如在Java中定义了一个字符串类型的变量sql:String sql,然后采用preparedStatement对象的execute方法去执行这个sql,该sql的值可能等于从文本框中读取的一个SQL或者从键盘输入的SQL,但具体是什么,在编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL。例如每一种数据库软件都有能够执行SQL语句的界面,那个界面接收的SQL就是动态SQL,因为数据库漏余敬厂商在做这个界面时毁芹,并不知道用户会输入哪些SQL,只有在该界面执行后,接收了用户的实际输入,才知道SQL是什么。

另外还要注意一点,在SQL中如果某些参数没有确定,如"select * from t1 where c1>? and c2<?",这种语句是静态SQL,不是动态SQL,虽然个别参数的值不知道,但整个SQL的结构已经确定,数据库是可以将它编译的,在执行阶段只需将个别参数的值补充进来即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11989360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存