iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用MyBatis如何动态调用SQL标签
  • 662
分享到

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

mybatissql标签 2023-05-31 10:05:52 662人浏览 薄情痞子
摘要

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

今天就跟大家聊聊有关使用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标签有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 使用MyBatis如何动态调用SQL标签

本文链接: https://www.lsjlt.com/news/224954.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 使用MyBatis如何动态调用SQL标签
    今天就跟大家聊聊有关使用MyBatis如何动态调用SQL标签,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、动态SQL片段通过SQL片段达到代码复用 <!--&nb...
    99+
    2023-05-31
    mybatis sql标签
  • 怎么使用MyBatis的动态SQL标签
    MyBatis的动态SQL标签可以帮助我们在SQL语句中根据条件来动态生成不同的SQL片段,从而实现更灵活的查询。 下面是一些MyB...
    99+
    2024-04-09
    MyBatis
  • 如何在MyBatis动态SQL项目中使用trim标签
    这期内容当中小编将会给大家带来有关如何在MyBatis动态SQL项目中使用trim标签,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体方法如下:select * from user   <...
    99+
    2023-05-31
    mybatis sql trim
  • 怎么在MyBatis中使用动态SQL标签
    这篇文章将为大家详细讲解有关怎么在MyBatis中使用动态SQL标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.MyBatis动态SQLMyBatis 的强大特性之一便是它的动态 SQ...
    99+
    2023-06-14
  • MyBatis动态<if>标签如何使用
    这篇文章主要介绍“MyBatis动态<if>标签如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MyBatis动态<if>标签如何使用”文章能帮助大家解决问题。一. i...
    99+
    2023-07-05
  • MyBatis动态SQL标签的用法详解
    1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S...
    99+
    2024-04-02
  • mybatis动态SQL标签有什么作用
    MyBatis动态SQL标签用于在SQL语句中添加条件判断和循环操作,根据条件动态生成SQL语句。通过使用动态SQL标签,可以根据不...
    99+
    2024-04-09
    mybatis
  • MyBatis 动态SQL之<where>标签-
    简介 where 标签主要用来简化 SQL 语句中的条件判断,可以自动处理 AND/OR 条件。 在if标签和choose-when-otherwise标签的案例中,SQL语句加入了一个条件...
    99+
    2023-09-05
    mybatis java mysql sql 开发语言
  • Mybatis动态SQL之where标签用法说明
    目录关于where标签用法使用where标签及一些注意点where标签简单使用关于where标签用法 xml映射文件部分内容: <sel...
    99+
    2024-04-02
  • MyBatis 动态SQL之<choose><when><otherwise>标签-
    简介 MyBatis 中动态语句 choose-when-otherwise 类似于 Java 中的 switch-case-default 语句。由于 MyBatis 并没有为 if 提供对应的 e...
    99+
    2023-10-09
    mybatis sql java
  • MyBatis动态<if>标签的使用
    目录前言正文一. if标签判断字符串二. if标签判断数字总结前言 MyBatis中的<if>动态SQL标签,常用场景是根据条件添加WHERE子句。本篇文章将对&...
    99+
    2023-05-19
    MyBatis动态<if>标签 MyBatis <if>标签
  • MyBatis在注解上如何使用动态SQL
    这篇文章主要介绍了MyBatis在注解上如何使用动态SQL的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis在注解上如何使用动态SQL文章都会有所收获,下面我们一起来看看吧。MyBatis在注解上使用...
    99+
    2023-07-02
  • MyBatis动态SQL怎么使用
    今天小编给大家分享一下MyBatis动态SQL怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MyBatis 框架动态...
    99+
    2023-06-29
  • MyBatis中动态SQL怎么使用
    在MyBatis中,动态SQL可以通过使用if、choose、when、otherwise、foreach等标签来实现。这些标签可以...
    99+
    2024-04-20
    mybatis
  • 怎么使用MyBatis的动态SQL
    MyBatis的动态SQL是一种通过条件判断来动态生成SQL语句的方式,可以根据不同的条件生成不同的SQL语句,从而实现动态查询。下...
    99+
    2024-04-09
    MyBatis
  • MyBatis 动态SQL使用及原理
    目录引言1. 动态SQL概述2. if标签3. choose、when和otherwise标签4. trim标签5. set标签和where标签6. foreach7. b...
    99+
    2023-05-20
    MyBatis 动态SQL MyBatis 动态SQL
  • Mybatis的where标签如何使用
    这篇文章主要讲解了“Mybatis的where标签如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis的where标签如何使用”吧!原始的手动拼接在不使用...
    99+
    2023-06-30
  • MyBatis的动态SQL功能如何应用
    MyBatis的动态SQL功能可以通过使用XML或注解来实现。在XML文件中,可以使用if、choose、foreach等标签来动态...
    99+
    2024-05-08
    MyBatis SQL
  • Mybatis如何使用ognl表达式实现动态sql
    本文讲述在mybatis中如何使用ognl表达式实现动态组装sql语句 新建Users实体类: public class Users { private Integer ...
    99+
    2024-04-02
  • Mybatis中typeAliases标签和package标签使用
    目录typeAliases标签和package标签的使用1、typeAliases2、packageproperties,typeAliases,package三个标签使用以及细节t...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作