iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在MyBatis中使用动态SQL标签
  • 452
分享到

怎么在MyBatis中使用动态SQL标签

2023-06-14 12:06:01 452人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关怎么在mybatis中使用动态sql标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.MyBatis动态SQLMyBatis 的强大特性之一便是它的动态 SQ

这篇文章将为大家详细讲解有关怎么在mybatis中使用动态sql标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1.MyBatis动态SQL

MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。

动态 SQL 元素和使用 jsTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。

2.动态SQL标签:if,choose (when, otherwise),trim (where, set),foreach

2.1 if标签:直接上代码

<select id="queryByIdAndTitle"     resultType="Blog">  SELECT * FROM BLOG   WHERE 1=1   <if test="id!= null and title!=null">    AND id=#{id} and title=#{title}  </if></select>

注:if标签一般用于非空验证,如上例,若id为空,if标签里的代码,将不会执行,反之,则会执行。

2.2 choose(when,otherwise)标签:直接上代码

<select id="queryBy"     resultType="Blog">  SELECT * FROM BLOG WHERE 1=1  <choose>    <when test="title != null">      AND title like #{title}    </when>    <otherwise>      AND id= 1    </otherwise>  </choose></select>

注:choose(when,otherwise)标签相当于switch(case,default) ,如上例,若title 为空,when标签里的代码,将不会执行,默认执行otherwise标签里面的代码。

2.3 trim(where,set)标签:直接上代码

<select id="queryBy" resultType="com.scme.pojo.User" parameterType="com.scme.pojo.User">                 select * from user                  <where>                         <if test="username!=null and passWord!=null">                             and username=#{username} and password=#{password}                         </if>                 </where></select>

注:假设上例传入的username,password不为空,代码就可以运行成功!但朋友们可能有疑问了,实际上执行的sql语句是什么呢?其实,sql为:select * from user

 where username=? and password=?  朋友们是否发现,where标签代替了sql中where关键字,但if中的and不见了。其实where标签可以自动去除是“AND”或“OR”开头的sql中的“AND”或“OR”关键字。

如果 where 元素没有按正常套路出牌,我们还是可以通过自定义 trim 元素来定制sql,实现where标签的效果。代码如下:

<select id="queryBy" resultType="com.scme.pojo.User" parameterType="com.scme.pojo.User">                 select * from user                  <trim prefix="WHERE" prefixOverrides="AND |OR ">                          <if test="username!=null and password!=null">                             and username=#{username} and password=#{password}                         </if>                </trim>                 <!-- 效果同上          <where>                         <if test="username!=null and password!=null">                             and username=#{username} and password=#{password}                         </if>                 </where> -->         </select>

set标签,代码如下:

<update id="updateUser" parameterType="com.scme.pojo.User">                 update user                  <set>                     <if test="username!=null">                             username=#{username}                     </if>                 </set>                 <where>                      <if test="id!=null">                             id=#{id}                     </if>                 </where>         </update>

注:set标签功能和where标签差不多,set标签代替了sql中set关键字,set标签可以自动去除sql中的多余的“,”

同理,trim标签也可以实现set标签的功能

<update id="updateUser" parameterType="com.scme.pojo.User">                 update user          <trim prefix="set" prefixOverrides=",">              <if test="username!=null"> username=#{username} </if>         </trim>           <where>                 <if test="id!=null"> id=#{id} </if>                   </where> </update>

2.4 foreach标签:foreach标签实现批量删除,直接上代码

<delete id="batchDelete" parameterType="java.lang.String">  delete from user  where id in  <foreach item="id" index="index" collection="list"      open="(" separator="," close=")">        #{id}  </foreach></delete >

注:foreach标签可迭代任何对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数,当使用可迭代对象或者数组时,index是当前迭代的次数,item的值是本次迭代获取的元素。当使用字典(或者Map.Entry对象的集合)时,index是键,item是值。collection标签可以填('list','array','map')。

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名;

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置;

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔符;

close表示以什么结束。

3.bind

bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:

<select id="selectBlogsLike" resultType="Blog">  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />  SELECT * FROM BLOG  WHERE title LIKE #{pattern}</select>

4.Multi-db vendor support

一个配置了“_databaseId”变量的 databaseIdProvider 对于动态代码来说是可用的,这样就可以根据不同的数据库厂商构建特定的语句。比如下面的例子:

<insert id="insert">  <selecTKEy keyProperty="id" resultType="int" order="BEFORE">    <if test="_databaseId == 'oracle'">      select seq_users.nextval from dual    </if>    <if test="_databaseId == 'db2'">      select nextval for seq_users from sysibm.sysdummy1"    </if>  </selectKey>  insert into users values (#{id}, #{name})</insert>

动态 SQL 中可插拔的脚本语言

MyBatis 从 3.2 开始支持可插拔的脚本语言,因此你可以在插入一种语言的驱动(language driver)之后来写基于这种语言的动态 SQL 查询。

可以通过实现下面接口的方式来插入一种语言:

public interface LanguageDriver {  ParameterHandler createParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql);  SqlSource createSqlSource(Configuration configuration, Xnode script, Class<?> parameterType);  SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType);}

一旦有了自定义的语言驱动,你就可以在 mybatis-config.xml 文件中将它设置为默认语言:

<typeAliases>  <typeAlias type="org.sample.MyLanguageDriver" alias="myLanguage"/></typeAliases><settings>  <setting name="defaultScriptingLanguage" value="myLanguage"/></settings>

除了设置默认语言,你也可以针对特殊的语句指定特定语言,这可以通过如下的 lang 属性来完成:

<select id="selectBlog" lang="myLanguage">  SELECT * FROM BLOG</select>

或者在你正在使用的映射中加上注解 @Lang 来完成:

public interface Mapper {  @Lang(MyLanguageDriver.class)  @Select("SELECT * FROM BLOG")  List<Blog> selectBlog();

关于怎么在MyBatis中使用动态SQL标签就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 怎么在MyBatis中使用动态SQL标签

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

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

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

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

下载Word文档
猜你喜欢
  • 怎么在MyBatis中使用动态SQL标签
    这篇文章将为大家详细讲解有关怎么在MyBatis中使用动态SQL标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.MyBatis动态SQLMyBatis 的强大特性之一便是它的动态 SQ...
    99+
    2023-06-14
  • 如何在MyBatis动态SQL项目中使用trim标签
    这期内容当中小编将会给大家带来有关如何在MyBatis动态SQL项目中使用trim标签,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体方法如下:select * from user   <...
    99+
    2023-05-31
    mybatis sql trim
  • 使用MyBatis如何动态调用SQL标签
    今天就跟大家聊聊有关使用MyBatis如何动态调用SQL标签,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、动态SQL片段通过SQL片段达到代码复用 <!--&nb...
    99+
    2023-05-31
    mybatis sql标签
  • MyBatis动态SQL标签的用法详解
    1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S...
    99+
    2022-11-12
  • Mybatis动态SQL之where标签用法说明
    目录关于where标签用法使用where标签及一些注意点where标签简单使用关于where标签用法 xml映射文件部分内容: <sel...
    99+
    2022-11-13
  • MyBatis动态SQL怎么使用
    今天小编给大家分享一下MyBatis动态SQL怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MyBatis 框架动态...
    99+
    2023-06-29
  • MyBatis动态<if>标签的使用
    目录前言正文一. if标签判断字符串二. if标签判断数字总结前言 MyBatis中的<if>动态SQL标签,常用场景是根据条件添加WHERE子句。本篇文章将对&...
    99+
    2023-05-19
    MyBatis动态<if>标签 MyBatis <if>标签
  • MyBatis动态<if>标签如何使用
    这篇文章主要介绍“MyBatis动态<if>标签如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MyBatis动态<if>标签如何使用”文章能帮助大家解决问题。一. i...
    99+
    2023-07-05
  • 怎么在Mybatis中搭建动态SQL环境
    今天就跟大家聊聊有关怎么在Mybatis中搭建动态SQL环境,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. Mybatis–动态SQL动态 SQL 是 MyBatis 的强大特性...
    99+
    2023-06-14
  • MyBatis中怎么实现动态SQL!
    这篇文章将为大家详细讲解有关MyBatis中怎么实现动态SQL!,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、if标签if是最常用标签,经常用在判断语句...
    99+
    2022-10-18
  • MyBatis动态SQL表达式怎么使用
    本篇内容介绍了“MyBatis动态SQL表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态 sql 简单来讲就是我们能通过条件...
    99+
    2023-07-04
  • Mybatis的动态SQL语句怎么使用
    这篇文章主要介绍“Mybatis的动态SQL语句怎么使用”,在日常操作中,相信很多人在Mybatis的动态SQL语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mybatis的动态SQL语句怎么使用...
    99+
    2023-06-30
  • Mybatis在注解上怎么实现动态SQL
    本文小编为大家详细介绍“Mybatis在注解上怎么实现动态SQL”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis在注解上怎么实现动态SQL”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在注解上实现动...
    99+
    2023-07-02
  • Mybatis中动态SQL,if,where,foreach怎么用
    这篇文章主要为大家展示了“Mybatis中动态SQL,if,where,foreach怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mybatis中动态SQL,if,wher&#...
    99+
    2023-05-30
    mybatis sql
  • MyBatis在注解上如何使用动态SQL
    这篇文章主要介绍了MyBatis在注解上如何使用动态SQL的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis在注解上如何使用动态SQL文章都会有所收获,下面我们一起来看看吧。MyBatis在注解上使用...
    99+
    2023-07-02
  • Mybatis中where标签与if标签怎么结合使用
    这篇文章主要介绍“Mybatis中where标签与if标签怎么结合使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mybatis中where标签与if标签怎么结合使用”文章能帮...
    99+
    2023-07-05
  • mybatis中<choose>标签怎么使用
    本文小编为大家详细介绍“mybatis中<choose>标签怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis中<choose>标签怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
  • Mybatis中xml的动态sql怎么实现
    这篇文章主要介绍“Mybatis中xml的动态sql怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Mybatis中xml的动态sql怎么实现”文章能帮助大家解决问题。动态SQL简介动态 SQ...
    99+
    2023-07-02
  • Trim标签在Mybatis中的使用方法
    Trim标签在Mybatis中的使用方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体代码如下所示:<update id="updateAu...
    99+
    2023-05-31
    mybatis trim
  • MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)
    使用原因:         批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了 批量修改: 1、Mapper.java中...
    99+
    2023-08-31
    mysql sql 数据库 java mybatis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作