文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用MyBatis如何动态调用SQL标签

2023-05-31 10:58

关注

今天就跟大家聊聊有关使用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>

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>

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>

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>

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>

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标签有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯