动态SQL
通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中。
MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。
choose, when, otherwise
和Java中的switch语句相似,MyBatis提供choose元素。
trim, where, set
上面的例子中如果把“state = ?ACTIVE?”也设置为动态的话就有可能出现问题。所以,
where元素知道如果由被包含的标记返回任意内容,就仅仅插入“WHERE”。而且,如果以“AND”或“OR”开头的内容,那么就会跳过WHERE不插入。
如果where元素没有做出你想要的,你可以使用trim元素来自定义。比如,和where元素相等的trim元素是:
overrides属性采用管道文本分隔符来覆盖,这里的空白也是重要的。它的结果就是移除在overrides属性中指定的内容,插入在with属性中的内容。
和动态更新语句相似的解决方案是set。set元素可以被用于动态包含更新的列,而不包含不需更新的。比如:
这里,set元素会动态前置SET关键字,而且也会消除任意无关的逗号,那也许在应用条件之后来跟踪定义的值。
如果你对和这相等的trim元素好奇,它看起来就是这样的:
注意这种情况下我们覆盖一个后缀,而同时也附加前缀。
foreach
另外一个动态SQL通用的必要操作是迭代一个集合,通常是构建在IN条件中的。比如:
foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中。
MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。
if
choose(when,otherwise)
trim(where,set)
foreach
if
在动态SQL中所做的最通用的事情是包含部分where字句的条件。比如:
[html] view plaincopy
- <select id=”findActiveBlogWithTitleLike”
- parameterType=”Blog” resultType=”Blog”>
- SELECT * FROM BLOG
- WHERE state = ?ACTIVE?
- <if test=”title != null”>
- AND title like #{title}
- </if>
- </select>
choose, when, otherwise
和Java中的switch语句相似,MyBatis提供choose元素。
[html] view plaincopy
- <select id=”findActiveBlogLike”
- parameterType=”Blog” resultType=”Blog”>
- SELECT * FROM BLOG WHERE state = ?ACTIVE?
- <choose>
- <when test=”title != null”>
- AND title like #{title}
- </when>
- <when test=”author != null and author.name != null”>
- AND title like #{author.name}
- </when>
- <otherwise>
- AND featured = 1
- </otherwise>
- </choose>
- </select>
trim, where, set
上面的例子中如果把“state = ?ACTIVE?”也设置为动态的话就有可能出现问题。所以,
[html] view plaincopy
- <select id=”findActiveBlogLike”
- parameterType=”Blog” resultType=”Blog”>
- SELECT * FROM BLOG
- <where>
- <if test=”state != null”>
- state = #{state}
- </if>
- <if test=”title != null”>
- AND title like #{title}
- </if>
- <if test=”author != null and author.name != null”>
- AND title like #{author.name}
- </if>
- </where>
- </select>
如果where元素没有做出你想要的,你可以使用trim元素来自定义。比如,和where元素相等的trim元素是:
[html] view plaincopy
- <trim prefix="WHERE" prefixOverrides="AND |OR ">
- …
- </trim>
和动态更新语句相似的解决方案是set。set元素可以被用于动态包含更新的列,而不包含不需更新的。比如:
[html] view plaincopy
- <update id="updateAuthorIfNecessary"
- parameterType="domain.blog.Author">
- update Author
- <set>
- <if test="username != null">username=#{username},</if>
- <if test="password != null">password=#{password},</if>
- <if test="email != null">email=#{email},</if>
- <if test="bio != null">bio=#{bio}</if>
- </set>
- where id=#{id}
- </update>
如果你对和这相等的trim元素好奇,它看起来就是这样的:
[html] view plaincopy
- <trim prefix="SET" suffixOverrides=",">
- …
- </trim>
foreach
另外一个动态SQL通用的必要操作是迭代一个集合,通常是构建在IN条件中的。比如:
[html] view plaincopy
- <select id="selectPostIn" resultType="domain.blog.Post">
- SELECT *
- FROM POST P
- WHERE ID in
- <foreach item="item" index="index" collection="list"
- open="(" separator="," close=")">
- #{item}
- </foreach>
- </select>
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
相关推荐
【MyBatis学习笔记六】——MyBatis一对一,一对多,多对一,多对多.zip博客地址:https://blog.csdn.net/weixin_43817709/article/details/117537580
【标题】"MyBatis学习笔记1" 涉及的知识点主要集中在MyBatis这一流行的持久层框架上。MyBatis是一个优秀的Java ORM(对象关系映射)框架,它允许开发者将SQL查询与Java代码分离,使得数据库操作更加灵活且易于维护。...
这篇“mybatis 学习笔记”将带你深入理解 MyBatis 的核心概念和主要功能。 1. **MyBatis 概述**: MyBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它的核心是 SQL 映射文件和 SqlSessionFactory。ORM 技术...
mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记
Mybatis学习笔记(狂神).md
在"MyBatis学习笔记.zip"这个压缩包中,包含了四天的学习内容,分别以"MyBatis_day1"、"MyBatis_day2"、"MyBatis_day3"和"MyBatis_day4"命名,这些笔记可能详细阐述了MyBatis的核心概念和使用方法。让我们逐一解析...
1.课程计划 第一天: 1、Mybatis的介绍 2、Mybatis的入门 a)使用jdbc操作数据库存在的问题 b)Mybatis的架构 c)Mybatis的入门程序 3、Dao的开发方法 a)原始dao的开发方法 ... 从入门学习到使用精通。
MyBatis-Plus 学习笔记 MyBatis-Plus 是一个基于 MyBatis 的增强工具,旨在简化开发、提高效率。它提供了许多实用的特性和功能,例如无侵入、损耗小、强大的 CRUD 操作、支持 Lambda 形式调用、支持多种数据库、...
个人mybatis学习笔记,是个人学习后记录所得,记录内容仅供参考,如如果有什么不对的地方,欢迎指正。
在本学习资源中,你将找到一份详尽的Mybatis学习笔记和源码,这将极大地助力你的学习过程,尤其是对自学者而言。这份笔记被认为是非常有价值且深入的,作者在其中倾注了大量的精力,确保了内容的全面性和实用性。 ...
本学习笔记是作者在大学期间深入学习Mybatis后的整理,旨在帮助初学者快速入门并掌握其核心概念与功能。 笔记共分为11个章节,涵盖Mybatis的基础到高级应用,以下是主要知识点的详细讲解: 1. **Mybatis简介**:...
个人学习myBatis持久层框架时记录的MyBatis学习笔记,供参考
Mybatis学习笔记整理,全面详实,通俗易懂.md
马士兵老师的MyBatis学习笔记主要涵盖了以下几个核心知识点: 1. **MyBatis安装与环境搭建**:首先,你需要配置Java开发环境,并了解Maven或Gradle构建工具,因为MyBatis通常与这些工具结合使用来管理依赖。然后,...