MyBatis--08--常用标签

这篇具有很好参考价值的文章主要介绍了MyBatis--08--常用标签。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1.常用属性

属性 描述
id 在命名空间中唯一的标识符,被用来引用这条语句
parameterType 传入这条语句的参数的类全限定名或别名
resultType 期望从这条语句中返回结果的类全限定名或别名,resultType 和 resultMap 之间只能同时使用一个
resultMap 在命名空间中唯一的标识符,被用来引用这条语句 ,resultType 和 resultMap 之间只能同时使用一个
flushCache 将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:对于(select语句)false ;对于( insert、update 和 delete 语句)true
useCache 将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对于(select语句)为 true
useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false
keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)

2.SQL定义标签

MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言

2.1 select

用于数据查询操作,例:

<select id="selectUserInfo" parameterType="int" resultType="map">
  select * from user_info where id=#{keyId}
</select>

属性介绍:

  1. id :唯一的标识符.
  2. parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user
  3. resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与resultMap 不能并用

2.2 insert

用于数据保存操作,例:

<insert id="insertUserInfo" parameterType="map" useGeneratedKeys="true" keyProperty="keyId">
  insert into user_info (
	userName,
	userSex
  )values(
  	#{userName},
  	#{userSex}
  )
</insert>

属性介绍:

  1. id :唯一的标识符
  2. parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User
    PS:keyProperty属性可返回此条插入数据的主键值

2.3 update

用于数据更新操作,例:

<update id="updateUserInfo" parameterType="map">
  update  user_info
  set userName=#{userName}
  where id=#{keyId}
</update>

2.4 delete

用于数据删除操作,例:

<delete id="selectUserInfo" parameterType="int">
  delete  from user_info 
  where id=#{keyId}
</delete>

2.5 resultMap

MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言

2.6 sql

用于定义可重用的 SQL 代码片段,以便在多个SQL语句中使用。 参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。例:

<!-- 定义 -->
<sql id="userColumns"> ${alias}.userName,${alias}.userSex</sql>

<!-- 运用 -->
<select id="selectUserInfo" resultType="map">
  select
    <include refid="userColumns"><property name="alias" value="t1"/></include>,
    <include refid="userColumns"><property name="alias" value="t2"/></include>
  from user_info  t1
  left join user_info_copy t2
</select>

3.SQL动态标签

3.1 if

单个条件判断,用以实现条件筛选,例:

<select id="selectUserInfo" parameterType="map" resultType="map">
  select * from user_info 
  where 1=1
  <if test="userSex !=null and userSex !='' ">
  	and userSex=#{userSex}
  </if>
  <if test="userName !=null and userName !='' ">
  	and userName like CONCAT('%',#{userName},'%')
  </if>
</select>

PS:此处需要注意,如果参数值为数字int型,判断是否等于某个固定值时可能会导致判断失效,例如:

<if test="userFlag !=null and userFlag !='' and userFlag =='1'">
  	……
</if>

可以修改为:

<!-- .toString()转换 -->
<if test="userFlag !=null and userFlag !='' and userFlag =='1'.toString()">
  	……
</if>

<!-- 外层单引号,内部双引号 -->
<if test='userFlag !=null and userFlag !="" and userFlag =="1"'>
  	……
</if>

3.2 foreach

MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言
*open和close指在foreach标签头和尾添加指定内容,常见于IN和VALUES函数

3.2.1 批量插入表数据

INSERT INTO table (a, b, c, d) VALUES
<foreach collection = "list" item = "item" separatior = ",">
    (#{item.a}, #{item.b}, #{item.c}, #{item.d})
</foreach>
 
/*执行Mybatis后的SQL语句示例
 *<foreach>在每个数据集间添加了','
 */
INSERT INTO table (a, b, c, d) VALUES
 ('a',123,true,'112456789'),
 ('b',124,true,'112455789'),
 ('c',125,false,'112466789'),
 ('d',126,true,'112451789')

3.2.2 批量更新表数据

(1)单条件更新

UPDATE table SET b = '10'
WHERE a IN
<foreach collection = "list" item = "item" open = "(" close = ")" separator = ",">
    #{item.a}
</foreach>
 
/*执行Mybatis后的SQL语句示例
 *单条件用到了IN函数
 *<foreach>在标签头尾添加了'(' ')',并在每个数据间添加了','
 */
UPDATE table SET b = '10'
WHERE a IN ('ZBD12131','ZBD12132','ZBD12133')

(2)多条件更新

UPDATE table
SET a =
CASE
<foreach collection="list" item="item">
    WHEN b=#{item.b} AND c = #{item.c} THEN '10'
</foreach>
ELSE a END;
 
/*执行Mybatis后的SQL语句示例
 *多条件批量更新用到了SQL语句中的CASE WHEN函数
 */
UPDATE table
SET a =
CASE
WHEN b=123 AND c = true THEN '10'
WHEN b=124 AND c = true THEN '10'
WHEN b=125 AND c = false THEN '10'
WHEN b=126 AND c = true THEN '10'
ELSE d END;

复杂
MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言

3.2.3 批量查询表数据

(1)list单条件查询

SELECT * FROM table
WHERE a IN
<foreach collection = "list" item = "item" open = '(' close = ')' separator = ','>
    #{item.a}
</foreach>
 
//执行Mybatis后的SQL语句示例
SELECT * FROM table
WHERE a IN ('ZBD123','ZBD124','ZBD125','ZBD126')

(2)list多条件查询

SELECT * FROM table
WHERE a = #{a}
AND
<foreach collection = "list" item = "item" open = '(' close = ')' separator = 'OR'>
    b = #{item.b} 
    AND c = #{item.c}
    AND d = #{item.d}
</foreach>
 
/*执行Mybatis后的SQL语句示例
 *多条件批量查询用到了SQL语句OR函数,视实际应用环境修改separator参数
 */
SELECT * FROM table
WHERE a = '123'
AND (
    b=123 AND c = true AND d = 'ZBD123' OR
    b=124 AND c = true AND d = 'ZBD124' OR
    b=125 AND c = false AND d = 'ZBD125' OR
    b=126 AND c = true AND d = 'ZBD126'
)

3.3 choose/when/otherwise

用以实现条件的多种判断,类似与if else,例:

<select id="selectUserInfo" parameterType="map" resultType="map">
  select * from user_info 
  where 1=1
  <choose>
  	<when test="userFlag!=null and userFlag!='' and userFlag=='Y'">
  		and id<=100
  	</when>
  	<when test="userFlag!=null and userFlag!='' and userFlag=='N'">
  		and id <=200
  	</when>
  	<otherwise>
  		and id<=300
  	</otherwise>
  </choose>
</select>

3.4 where

只会在子元素返回任何内容的情况下才插入 “WHERE” 子句,并且可以自动处理判断条件语句返回的第一个and或or,
例:不使用where标签时,若userSex为空,语法错误会报错:

<select id="selectUserInfo" parameterType="map" resultType="map">
  select * from user_info 
  where
  <if test="userSex !=null and userSex !='' ">
  	userSex=#{userSex}
  </if>
  <if test="userName !=null and userName !='' ">
  	and userName like CONCAT('%',#{userName},'%')
  </if>
</select>

修改为:< where>
<select id="selectUserInfo" parameterType="map" resultType="map">
  select * from user_info
  <where>
  <if test="userSex !=null and userSex !='' ">
  	userSex=#{userSex}
  </if>
  <if test="userName !=null and userName !='' ">
  	and userName like CONCAT('%',#{userName},'%')
  </if>
  </where>
</select>

自动转换为:select * from user_info where userName like ……

3.5 set

可以动态更新需要更新的列,忽略其它不更新的列,例:

<update id="updateUserInfo" parameterType="map">
  update  user_info
  <set>
  <if test="userName!= null and userName!=''">
  userName=#{userName},
  </if>
  userSex=#{userSex}
  </set>
  where id=#{keyId}
</update>

3.6 trim

  • trim标记是一个格式化的标记,主要用于拼接sql的条件语句(前缀或后缀的添加或忽略),可以完成set或者是where标记的功能。

MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言

prefix 给sql语句拼接的前缀
suffix 给sql语句拼接的后缀
prefixOverrides 指定去除多余的前缀内容,如:prefixOverrides=“AND OR”,去除trim标签内sql语句多余的前缀"and"或者"or"
suffixOverrides 指定去除多余的后缀内容 ,去除sql语句后面的关键字或者字符,
<trim prefix="前缀" suffix="后缀" prefixOverrides="忽略前缀字符" suffixOverrides="忽略后缀字符">
    SQL语句
</trim>

3.6.1 在select中

<select id="selectByNameOrHobby" resultMap="BaseResultMap">
	select * from student 
	<trim prefix="WHERE" prefixOverrides="AND | OR">
		<if test="name != null and name.length()>0"> 
			AND name=#{name}
		</if>
		<if test="hobby != null and hobby.length()>0">
			AND hobby=#{hobby}
		</if>
	</trim>
</select>

MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言

  • 当然,避免出现“WHERE AND”还有其他方法,如where 1=1的查询条件
<!--将where提取出来,并加上“1=1”的查询条件 -->
select * from student where 1=1
	<trim suffixOverrides=",">
		<if test="name != null and name != ''">
			and NAME = #{name}
		</if>
		<if test="hobby != null and hobby != ''">
			and HOBBY = #{hobby}
		</if>
	</trim>

3.6.2 用在insert中

<insert id="insert" parameterType="Object">
    insert into student 
	<trim prefix="(" suffix=")" suffixOverrides=",">
		<if test="name != null">
			NAME,
		</if>
		<if test="hobby != null  ">
			HOBBY,
		</if>
	</trim>
	<trim prefix="values(" suffix=")" suffixOverrides=",">
		<if test="name != null  ">
			#{name},
		</if>
		<if test="hobby != null  ">
			#{hobby},
		</if>
	</trim>
</insert>

3.6.3 在update中

<update id="updateByPrimaryKey" parameterType="Object">
	update student set 
	<trim  suffixOverrides=",">
		<if test="name != null">
		    NAME=#{name},
		</if>
		<if test="hobby != null">
		    HOBBY=#{hobby},
		</if>
	</trim> 
	where id=#{id}
</update>

MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言
复杂
MyBatis--08--常用标签,Spring基础知识--SSM,mybatis,java,开发语言文章来源地址https://www.toymoban.com/news/detail-827433.html

到了这里,关于MyBatis--08--常用标签的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis基础知识(二)

    目录 1.MyBatis映射文件配置注意事项 2.MyBatis中的批处理实现 3.MyBatis的Executor执行器 4.半自动ORM映射框架与全自动ORM映射框架 1.在同一个xml映射文件中,id是唯一的 2.在不同xml映射文件中,若已配置了namespace,则id可以重复,否则也是唯一的 原因:namespace.id是MapString, MappedStatem

    2024年02月12日
    浏览(52)
  • Mybatis基础知识

    1.1原始jdbc操作(查询数据)   1.2原始jdbc操作(插入数据)   1.3 原始jdbc操作的分析 原始jdbc开发存在的问题如下: ①数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能; ②sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需

    2024年02月12日
    浏览(38)
  • MyBatis基础知识和快速入门、MyBatis核心配置文件讲解

    什么是Mybatis MyBatis 是一个优秀的基于java的 持久层框架 ,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中

    2024年02月04日
    浏览(102)
  • Oracle常用基础知识

    SQL语言是一种数据库语言  1、DDL:数据定义语言 create-创建  drop-删除 alter-修改 rename-重命名 truncate-截断 2、DML:数据操作语句 insert-插入 delete-删除 update-更新 select-查询 3、DCL:数据控制语句 grant-授权 revoke-回收权力 commit-提交事务 rollback-回滚事务 注:Oracle命令不区分大小写

    2024年02月12日
    浏览(45)
  • Unity | Shader基础知识(第九集:shader常用单词基础知识速成)

    目录 一、顶点(Vertex)和法线(Normal) 二、UV信息 三、 基础数据种类 1 基础数据种类 2 基础数据数组 3 基础数据数组的赋值 4 对数据数组的调用 四、 基础矩阵 1 基础矩阵种类  2 对矩阵数组的调用 2.1对一个数据的调用  2.2对多个数据的调用  2.3对数据的赋值 五、基础纹理种

    2024年02月01日
    浏览(69)
  • Selenium 基础知识(二):常用方法

    1、send_keys()方法:模拟键盘输入 2、text方法:获取文本值 3、get_attribute():获取属性值 4、maximize_window():实现浏览器窗口最大化 5、current_window_handle:返回窗口句柄,即标识窗口字符串 6、current_url:获取当前窗口URL 7、is_selected():判断元素是否被选中,多用于选择框 8、is_e

    2024年02月16日
    浏览(43)
  • 目标检测(1)—— 基础知识和常用数据集

    一张图片,经过网络后得到输出,检测出感兴趣目标的一个位置,比如下图的车在什么地方,狗在什么地方;还要输出相应位置的目标是什么类别的。 目标检测:位置+类别 矩形框:位置 矩形框:类别 eg:人脸检测 把人脸作为目标,就把人脸框起来。 eg:文字检测 把文字

    2024年02月08日
    浏览(40)
  • Java数组详解 -- 基础知识与常用操作

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码以及可以在我主页的资源里找到,如果在学

    2024年02月13日
    浏览(49)
  • 【Spring】Spring基础知识 Java开发必看

    🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前专攻C/C++、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:C++STL、蓝桥杯,喜欢OJ的小伙伴可以看一手 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️学习应使你快乐!望与诸君

    2024年02月13日
    浏览(42)
  • python基础知识(二):变量和常用数据类型

    变量是值可以改变的量,其定义方法如下,通过赋值运算符将变量名和变量值连接: 例如: 其中将值\\\"Hello Python world!“通过赋值运算符”=\\\"赋值给变量message。 (1) 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包