ibatis动态查询操作

本篇第一版本基于有一定了解的哥们准备的。之后有时间会把关联资料补齐,我也在整理学习中。开始转载记录:

 

<select id="SelectEemployee" parameterClass="string" resultMap = "employee-result"> select * from employee //动态SQL语句 <dynamic prepend="WHERE"> <isParameterPresent> emp_id = #value# </isParameterPresent> </dynamic> </select> </statements> </sqlMap>

 

 

 

补充规范示例:

 

<isGreaterThan prepend="and" compareValue="-1" property="State"> State = #State# </isGreaterThan> <isNotEqual prepend="and" property="OrderStateTime" compareValue="0001-1-1 0:00:00" > CreateDate>=#OrderStateTime# </isNotEqual> <isNotEqual prepend="and" property="OrderEndTime" compareValue="0001-1-1 0:00:00" > <![CDATA[ CreateDate <= #OrderEndTime#]]> </isNotEqual> <isNotEmpty prepend="and" property="OrderId"> id like '%$OrderId$%' </isNotEmpty>

 

 

/*动态SQL的写法:

开始 <dynamic

条件成立时前面要加的字符串 prepend ="字符串">

<属性关键字 (见下表)

prepend="字符串"

判断条件的对象属性名 property="字符串"

如果是属性关键字是比较条件时,字符串存放要比较的值compareValue="字符串">

要显示的条件名

</属性关键字>

结束</dynamic>

*/

/*动态SQL的参数有

 

 

属性关键字

含义

<isEqual>

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

<isNotEqual>

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

<isGreaterThan>

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

<isGreaterEqual>

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

<isLessEqual>

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

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

ADOLESCENT = ‘TRUE’

</isLessEqual>

<isPropertyAvailable>

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

<isNotPropertyAvailable>

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

<isNull>

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

<isNotNull>

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

<isEmpty>

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

<isNotEmpty>

如果参数不为空则查询条件有效。参数的数据类型为CollectionString 时参数不为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中SQL的解析是比较符合常规的数据库的SQL操作的,它的XML解析功能做得是比较实用的,适合用JAVA程序员管用的思维,给一段代码:

 

<select id="querySysLogList" parameterClass="SystemLogPara" resultMap="SystemLogResult" >
     select  * from (
            SELECT 
          r.*,rownum rn from ( select * from AMS_SYSTEM_LOG t
           <dynamic prepend="where">
                 <isNotNull prepend="AND" property="userID">
                      t.UserID like '%$userID$%'
                 </isNotNull>
                <isNotNull prepend="AND" property="userName">
                      t.UserName like '%$userName$%'
                 </isNotNull>
                 <isNotNull prepend="AND" property="operObjectName">
                      t.OperObjectName like '%$operObjectName$%'
                 </isNotNull>
                  <isNotNull prepend="AND" property="theModule">
                      t.TheModule like '%$theModule$%'
                 </isNotNull>
                  <isNotNull prepend="AND" property="userIP">
                      t.UserIP like '%$userIP$%'
                 </isNotNull>
                 <isNotNull prepend="AND" property="operResult">
                    OperResult like '%$operResult$%'
                 </isNotNull>
                 <isNotNull prepend="AND" property="beginTime">
                     t.OperTime >= #beginTime#
                 </isNotNull>
                  <isNotNull prepend="AND" property="endTime">
                     <![CDATA[
                     t.OperTime <= #endTime#
                      ]]>
                 </isNotNull>
                 <isNotNull prepend="AND" property="userGroupList">
                    <iterate property="userGroupList" open="(" close=")" conjunction="OR">
	       t.userGroupKey like '%$userGroupList[]$%'
                    </iterate>
                 </isNotNull>
             </dynamic>
             order by t.OperTime desc
             ) r
               <![CDATA[
            
        ) s  where s.rn <= #endRowNum# and  s.rn >=#startRowNum# 
      ]]>
            
  </select>

 仔细看以上的查询配置不难看出,这个SQL提供了动态条件判断的物理分页查询,代码的效率还是不错的。


     

你可能感兴趣的:(sql,ibatis)