我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

今天就跟大家聊聊有关使用MyBatis如何动态调用SQL标签,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、动态SQL片段通过SQL片段达到代码复用