您的位置:首页 > 数据库

Ibatis动态SQL标签用法

2014-06-08 22:28 369 查看
对于一些特殊符号,如大于号>、小于号< 等需要写在<![CDATA[]]中方可有效,否则失效。

1、动态SQL片段
通过SQL片段达到代码复用
<!-- 动态条件分页查询 -->

<sqlid="sql_count">

select count(*)

</sql>

<sqlid="sql_select">

select *

</sql>

<sqlid="sql_where">

from icp

<dynamicprepend="where">

<isNotEmptyprepend="and"property="name">

name like '%$name$%'

</isNotEmpty>

<isNotEmptyprepend="and"property="path">

path like '%path$%'

</isNotEmpty>

<isNotEmptyprepend="and"property="area_id">

area_id = #area_id#

</isNotEmpty>

<isNotEmptyprepend="and"property="hided">

hided = #hided#

</isNotEmpty>

</dynamic>

<dynamic prepend="">

<isNotNullproperty="_start">

<isNotNullproperty="_size">

limit #_start#, #_size#

</isNotNull>

</isNotNull>

</dynamic>

</sql>

<selectid="findByParamsForCount"parameterClass="map"resultClass="int">

<includerefid="sql_count"/>

<includerefid="sql_where"/>

</select>

<selectid="findByParams"parameterClass="map"resultMap="icp.result_base">

<includerefid="sql_select"/>

<includerefid="sql_where"/>

</select>

2、数字范围查询
所传参数名称是捏造所得,非数据库字段,比如_img_size_ge、_img_size_lt字段
<isNotEmptyprepend="and"property="_img_size_ge">

<![CDATA[

img_size >= #_img_size_ge#

]]>

</isNotEmpty>

<isNotEmptyprepend="and"property="_img_size_lt">

<![CDATA[

img_size < #_img_size_lt#

]]>

</isNotEmpty>
多次使用一个参数也是允许的

<isNotEmptyprepend="and"property="_now">

<![CDATA[

execplantime >= #_now#

]]>

</isNotEmpty>

<isNotEmptyprepend="and"property="_now">

<![CDATA[

closeplantime
<= #_now#

]]>

</isNotEmpty>

3、时间范围查询

<isNotEmptyprepend="" property="_starttime">

<isNotEmptyprepend="and"property="_endtime">

<![CDATA[

createtime >= #_starttime#

and createtime
< #_endtime#

]]>

</isNotEmpty>

</isNotEmpty>

4、in查询

<isNotEmptyprepend="and"property="_in_state">

state in ('$_in_state$')

</isNotEmpty>

5、like查询

<isNotEmptyprepend="and"property="chnameone">

(chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%')

</isNotEmpty>

<isNotEmptyprepend="and"property="chnametwo">

chnametwo like '%$chnametwo$%'

</isNotEmpty>

6、or条件

<isEqualprepend="and"property="_exeable"compareValue="N">

<![CDATA[

(t.finished='11' or t.failure=3)

]]>

</isEqual>

<isEqualprepend="and"property="_exeable"compareValue="Y">

<![CDATA[

t.finished in ('10','19') and t.failure<3

]]>

</isEqual>

7、where子查询

<isNotEmptyprepend="" property="exprogramcode">

<isNotEmptyprepend="" property="isRational">

<isEqualprepend="and"property="isRational"compareValue="N">

code not in

(select t.contentcode

from cms_ccm_programcontent t

where t.contenttype='MZNRLX_MA'

and t.programcode = #exprogramcode#)

</isEqual>

</isNotEmpty>

</isNotEmpty>

<select
id="findByProgramcode"
parameterClass="string"
resultMap="cms_ccm_material.result">

select *

from cms_ccm_material

where code in

(select t.contentcode

from cms_ccm_programcontent t

where t.contenttype = 'MZNRLX_MA'

and programcode = #value#)

order by updatetime desc

</select>

9、函数的使用

<!-- 添加 -->

<insertid="insert"parameterClass="RuleMaster">

insert into rulemaster(

name,

createtime,

updatetime,

remark

) values (

#name#,

now(),

now(),

#remark#

)

<selectKeykeyProperty="id"resultClass="long">

select LAST_INSERT_ID()

</selectKey>

</insert>

<!-- 更新 -->

<updateid="update"parameterClass="RuleMaster">

update rulemaster set

name = #name#,

updatetime = now(),

remark = #remark#

where id = #id#

</update>

10、map结果集

<!-- 动态条件分页查询 -->

<sqlid="sql_count">

select count(a.*)

</sql>

<sqlid="sql_select">

select a.id vid,

a.img imgurl,

a.img_s imgfile,

b.vfilename vfilename,

b.name name,

c.id sid,

c.url url,

c.filename filename,

c.status status

</sql>

<sqlid="sql_where">

From secfiles c, juji b, videoinfo a

where

a.id = b. videoid

and b.id = c.segmentid

and c.status = 0

order by a.id asc,b.id asc,c.sortnum asc

<dynamic prepend="">

<isNotNullproperty="_start">

<isNotNullproperty="_size">

limit #_start#, #_size#

</isNotNull>

</isNotNull>

</dynamic>

</sql>

<!-- 返回没有下载的记录总数 -->

<selectid="getUndownFilesForCount"parameterClass="map"resultClass="int">

<includerefid="sql_count"/>

<includerefid="sql_where"/>

</select>

<!-- 返回没有下载的记录 -->

<selectid="getUndownFiles"parameterClass="map"resultClass="java.util.HashMap">

<includerefid="sql_select"/>

<includerefid="sql_where"/>

</select>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: