• iBatis动态SQL标签用法


    1、动态SQL片段
    通过SQL片段达到代码复用
    <!-- 动态条件分页查询 -->
    <sql id="sql_count">
    select count(*)
    </sql>
    <sql id="sql_select">
    select *
    </sql>
    <sql id="sql_where">
    from icp
    <dynamic prepend="where">
    <isNotEmpty prepend="and" property="name">
    name like '%$name$%'
    </isNotEmpty>
    <isNotEmpty prepend="and" property="path">
    path like '%path$%'
    </isNotEmpty>
    <isNotEmpty prepend="and" property="area_id">
    area_id = #area_id#
    </isNotEmpty>
    <isNotEmpty prepend="and" property="hided">
    hided = #hided#
    </isNotEmpty>
    </dynamic>
    <dynamic prepend="">
    <isNotNull property="_start">
    <isNotNull property="_size">
    limit #_start#, #_size#
    </isNotNull>
    </isNotNull>
    </dynamic>
    </sql>
    <select id="findByParamsForCount" parameterClass="map" resultClass="int">
    <include refid="sql_count"/>
    <include refid="sql_where"/>
    </select>
    <select id="findByParams" parameterClass="map" resultMap="icp.result_base">
    <include refid="sql_select"/>
    <include refid="sql_where"/>
    </select>

    2、数字范围查询
    所传参数名称是捏造所得,非数据库字段,比如_img_size_ge、_img_size_lt字段
    <isNotEmpty prepend="and" property="_img_size_ge">
    <![CDATA[
    img_size >= #_img_size_ge#
    ]]>
    </isNotEmpty>
    <isNotEmpty prepend="and" property="_img_size_lt">
    <![CDATA[
    img_size < #_img_size_lt#
    ]]>
    </isNotEmpty>

    多次使用一个参数也是允许的
    <isNotEmpty prepend="and" property="_now">
    <![CDATA[
    execplantime >= #_now#
    ]]>
    </isNotEmpty>
    <isNotEmpty prepend="and" property="_now">
    <![CDATA[
    closeplantime <= #_now#
    ]]>
    </isNotEmpty>

    3、时间范围查询
    <isNotEmpty prepend="" property="_starttime">
    <isNotEmpty prepend="and" property="_endtime">
    <![CDATA[
    createtime >= #_starttime#
    and createtime < #_endtime#
    ]]>
    </isNotEmpty>
    </isNotEmpty>

    4、in查询
    <isNotEmpty prepend="and" property="_in_state">
    state in ('$_in_state$')
    </isNotEmpty>

    5、like查询
    <isNotEmpty prepend="and" property="chnameone">
    (chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%')
    </isNotEmpty>
    <isNotEmpty prepend="and" property="chnametwo">
    chnametwo like '%$chnametwo$%'
    </isNotEmpty>

    6、or条件
    <isEqual prepend="and" property="_exeable" compareValue="N">
    <![CDATA[
    (t.finished='11' or t.failure=3)
    ]]>
    </isEqual>

    <isEqual prepend="and" property="_exeable" compareValue="Y">
    <![CDATA[
    t.finished in ('10','19') and t.failure<3
    ]]>
    </isEqual>

    7、where子查询
    <isNotEmpty prepend="" property="exprogramcode">
    <isNotEmpty prepend="" property="isRational">
    <isEqual prepend="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、函数的使用
    <!-- 添加 -->
    <insert id="insert" parameterClass="RuleMaster">
    insert into rulemaster(
    name,
    createtime,
    updatetime,
    remark
    ) values (
    #name#,
    now(),
    now(),
    #remark#
    )
    <selectKey keyProperty="id" resultClass="long">
    select LAST_INSERT_ID()
    </selectKey>
    </insert>
    <!-- 更新 -->
    <update id="update" parameterClass="RuleMaster">
    update rulemaster set
    name = #name#,
    updatetime = now(),
    remark = #remark#
    where id = #id#
    </update>

    10、map结果集
    <!-- 动态条件分页查询 -->
    <sql id="sql_count">
    select count(a.*)
    </sql>
    <sql id="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>
    <sql id="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="">
    <isNotNull property="_start">
    <isNotNull property="_size">
    limit #_start#, #_size#
    </isNotNull>
    </isNotNull>
    </dynamic>
    </sql>
    <!-- 返回没有下载的记录总数 -->
    <select id="getUndownFilesForCount" parameterClass="map" resultClass="int">
    <include refid="sql_count"/>
    <include refid="sql_where"/>
    </select>
    <!-- 返回没有下载的记录 -->
    <select id="getUndownFiles" parameterClass="map" resultClass="java.util.HashMap">
    <include refid="sql_select"/>
    <include refid="sql_where"/>
    </select>

  • 相关阅读:
    [转]create a basic sql server 2005 trigger to send email alerts
    SDUT OJ 2783 小P寻宝记
    联想杨元庆:互联网不包治百病 概念被夸大
    【Stackoverflow好问题】Java += 操作符实质
    poj 2513 Colored Sticks (trie 树)
    Nginx基础教程PPT
    POJ 1753 Flip Game (DFS + 枚举)
    poj 3020 Antenna Placement (最小路径覆盖)
    Unable to boot : please use a kernel appropriate for your cpu
    HDU 2844 Coins (多重背包)
  • 原文地址:https://www.cnblogs.com/suifengbingzhu/p/2648191.html
Copyright © 2020-2023  润新知