全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

MyBatis动态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>

11、trim

 trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。

 where例子的等效trim语句:

Xml代码 

<!-- 查询学生list,like姓名,=性别 -->  
<select id="getStudentListWhere" parameterType="StudentEntity" resultMap="studentResultMap">  
  SELECT * from STUDENT_TBL ST  
  <trim prefix="WHERE" prefixOverrides="AND|OR">  
    <if test="studentName!=null and studentName!='' ">  
      ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')  
    </if>  
    <if test="studentSex!= null and studentSex!= '' ">  
      AND ST.STUDENT_SEX = #{studentSex}  
    </if>  
  </trim>  
</select> 

set例子的等效trim语句:

Xml代码 

<!-- 更新学生信息 -->  
<update id="updateStudent" parameterType="StudentEntity">  
  UPDATE STUDENT_TBL  
  <trim prefix="SET" suffixOverrides=",">  
    <if test="studentName!=null and studentName!='' ">  
      STUDENT_TBL.STUDENT_NAME = #{studentName},  
    </if>  
    <if test="studentSex!=null and studentSex!='' ">  
      STUDENT_TBL.STUDENT_SEX = #{studentSex},  
    </if>  
    <if test="studentBirthday!=null ">  
      STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},  
    </if>  
    <if test="classEntity!=null and classEntity.classID!=null and classEntity.classID!='' ">  
      STUDENT_TBL.CLASS_ID = #{classEntity.classID}  
    </if>  
  </trim>  
  WHERE STUDENT_TBL.STUDENT_ID = #{studentID};  
</update>  

12、choose (when, otherwise)

         有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。

         if是与(and)的关系,而choose是或(or)的关系。

         例如下面例子,同样把所有可以限制的条件都写上,方面使用。选择条件顺序,when标签的从上到下的书写顺序:

Xml代码 

<!-- 查询学生list,like姓名、或=性别、或=生日、或=班级,使用choose -->  
<select id="getStudentListChooseEntity" parameterType="StudentEntity" resultMap="studentResultMap">  
  SELECT * from STUDENT_TBL ST  
  <where>  
    <choose>  
      <when test="studentName!=null and studentName!='' ">  
          ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')  
      </when>  
      <when test="studentSex!= null and studentSex!= '' ">  
          AND ST.STUDENT_SEX = #{studentSex}  
      </when>  
      <when test="studentBirthday!=null">  
        AND ST.STUDENT_BIRTHDAY = #{studentBirthday}  
      </when>  
      <when test="classEntity!=null and classEntity.classID !=null and classEntity.classID!='' ">  
        AND ST.CLASS_ID = #{classEntity.classID}  
      </when>  
      <otherwise>  
      </otherwise>  
    </choose>  
  </where>  
</select> 

以上所述是小编给大家介绍的MyBatis动态SQL标签用法实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!


# mybatis  # 动态sql  # 标签用法  # 动态sql标签用法  # mybatis的动态sql详解(精)  # mybatis动态sql之Map参数的讲解  # MyBatis执行动态SQL的方法  # Mybatis模糊查询和动态sql语句的用法  # Mybatis中的动态SQL语句解析  # MyBatis动态SQL中的trim标签的使用方法  # MyBatis实践之动态SQL及关联查询  # mybatis的动态sql之if test的使用说明  # 详解Mybatis动态sql  # Mybatis超级强大的动态SQL语句大全  # 分页  # 小编  # 多个  # 给大家  # 类似于  # 则为  # 所述  # 写上  # 给我留言  # 有一个  # 复用  # 从上到下  # 所传  # 有任何  # 更灵活  # 选项中  # _starttime  # _endtime  # findByParams  # closeplantime 


相关文章: 宝塔面板如何快速创建新站点?  建站主机是否等同于虚拟主机?  如何在阿里云域名上完成建站全流程?  如何通过WDCP绑定主域名及创建子域名站点?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  简单实现Android验证码  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站主机系统SEO优化与智能配置核心关键词操作指南  郑州企业网站制作公司,郑州招聘网站有哪些?  如何破解联通资金短缺导致的基站建设难题?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  网页设计网站制作软件,microsoft office哪个可以创建网页?  建站上传速度慢?如何优化加速网站加载效率?  如何在景安服务器上快速搭建个人网站?  如何制作网站标识牌,动态网站如何制作(教程)?  设计网站制作公司有哪些,制作网页教程?  建站之星如何实现五合一智能建站与营销推广?  微信小程序 五星评分(包括半颗星评分)实例代码  如何通过服务器快速搭建网站?完整步骤解析  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  网站制作员失业,怎样查看自己网站的注册者?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  建站主机空间推荐 高性价比配置与快速部署方案解析  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  制作网站的模板软件,网站怎么建设?  江苏网站制作公司有哪些,江苏书法考级官方网站?  建站主机默认首页配置指南:核心功能与访问路径优化  零基础网站服务器架设实战:轻量应用与域名解析配置指南  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站之星代理如何获取技术支持?  北京网站制作公司哪家好一点,北京租房网站有哪些?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  建站主机是什么?如何选择适合的建站主机?  学校建站服务器如何选型才能满足性能需求?  如何在宝塔面板中修改默认建站目录?  教程网站设计制作软件,怎么创建自己的一个网站?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  魔方云NAT建站如何实现端口转发?  电商网站制作价格怎么算,网上拍卖流程以及规则?  建站之星好吗?新手能否轻松上手建站?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何在局域网内绑定自建网站域名?  音乐网站服务器如何优化API响应速度?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  家庭服务器如何搭建个人网站?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  小建面朝正北,A点实际方位是否存在偏差?  建站主机是否属于云主机类型?  招贴海报怎么做,什么是海报招贴? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。