一、简述

1️⃣config 文件常用标签
properties 标签:引入外部 properties 文件资源。
settings 标签:设置 mybatis 全局行为。
typeAlias 标签:减少 mapper 文件配置,给模型类起别名。
transactionManager 标签:配置 mybatis 的事务行为(JDBC|MANAGED)
dataSource 标签:配置 mybatis 数据源(POOLED|UNPOOLED|JNDI)
mappers 标签:引入Mapper文件或接口(url|resources|class|package)
2️⃣Mapper 文件常用标签
a. resultMap 标签:对查询的结果进行封装处理
简单 pojo 类型处理,只需处理表中字段和对像中属性映射处理。
包装 pojo 类型处理,使用 Collection 处理包装集合类型的对像,association 处理包含单个 pojo 对像。
Collection 处理的两种方式:
1.连接查询 join
2.通过多条 select 查询的方式。
association 处理两种方式:
1.连接查询 join
2.通过多条 select 查询的方式。

discriminor 鉴别器:根据查询结果中某个字段作为标识符,根据其查询的值,进行分类封装处理。

b.主键映射策略:如果主键由数据库生成,而不是手动指定,怎么获取该主键的问题。
一般使用 selectKey 标签处理。
3️⃣自定义封装结果集(了解):
按照自已定义方式把数据库返回结果封装成自己想要的类型。
一般自己建立结果的处理类,实现 ResultHandler 接口,重写里面的方法。
一般在select(“statementId”,params,ResultHandler实现类对像)
4️⃣解决什么样问题
用来解决 sql 语句 where 后条件的拼接问题,
使用流程控制标签来完成条件的拼接:if 标签,where 标签,foreach 标签。。。。
5️⃣常用动态 sql 标签
1.if 标签
2.choose when otherwise 标签
3.trim 标签
4.foreache 标签
5.where 标签
6.set 标签

二、if 标签:类似于 Java 中的 if 语句

<select id="selectByItem" parameterType="User" resultType="User">select * from USERwhere 1=1<!--mybatis如果是低版本时,如果是整形值,不要用‘’来判断;3.4.6版本没有问题--><if test="id != null and id !=''">and id = #{id}</if><if test="username !=null and username !=''">and username=#{username}</if>
</select>

三、where标签

根据查询条件是否存在,来决定是否生成 where 字符串。可以去除 where 后面紧跟的 sql 关键字, 如 or 或 and。

<!-- where标签 -->
<select id="selectByItem2" parameterType="User" resultType="User">select * from USER<where><if test="id !='' and id != null">and id = #{id}</if><if test="username !=null and username !=''">and username=#{username}</if></where>
</select>

四、 choose when otherwise

和 Java 中 switch case 作用类似。不管有多少条件满足,只拼接其中一个条件。

<!-- choose when otherwise -->
<select id="selectByItem3" parameterType="User" resultType="User">select * from USER<where><choose><when test="id !='' and id != null">and id = #{id}</when><when test="username !=null and username !=''">and username=#{username}</when><otherwise>and 1=1</otherwise></choose></where>
</select>

五、Set 标签

set 用法和上面 where 用法一致。可以生成 update 语句中的 set 关键字,也可去除 sql 关键字,如逗号(set 标签中 sql 字符串最后的逗号)

<update id="update" parameterType="User">update USER<set><if test="username !=null and username !=''">username = #{username},</if><if test="password !=null and password !=''">password=#{password},</if></set>where id = #{id}
</update>

六、foreach 标签

类似于 Java 中的 foreach 迭代。把传入 sql 语句中的数组类型或集合类型数据进行遍历操作。

<!-- 接口中参数为数组时,collection值必须为array -->
<select id="selectByIds" resultType="User">select * from USER<foreach collection="array" item="id" open="where id in(" separator="," close=")">#{id}</foreach>
</select>
​
<!-- 接口中参数为pojo,collection值必须为该数组类型属性名 -->
<select id="selectByIds2" resultType="User" parameterType="User">select * from USER<foreach collection="ids" item="id" open="where id in(" separator="," close=")">#{id}</foreach>
</select>

七、trim 标签:可以删除 sql 语句指定的字符串。

<!--prefix="前缀":在后面sql字符串前面拼接指定的前缀。prefixOverrides="要去除的字符":把紧跟着前缀后面的字符去掉。suffix="后缀":在后面sql字符串后面拼接指定的后缀。suffixOverrides="要去除的字符":把紧跟着后缀前面的字符去掉。
-->
​<update id="update2" parameterType="User">update USER<trim prefix="set" prefixOverrides=","><if test="username !=null and username !=''">,username = #{username}</if><if test="password !=null and password !=''">,password=#{password}</if><if test="address !=null and address !=''">,address=#{address}</if></trim>where id = #{id}
</update><update id="update3" parameterType="User">update USER<trim prefix="set" suffixOverrides=","><if test="username !=null and username !=''">username = #{username},</if><if test="password !=null and password !=''">password=#{password},</if><if test="address !=null and address !=''">address=#{address},</if></trim>where id = #{id}
</update>

Mybatis动态sql标签说明相关推荐

  1. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  2. mybatis动态sql标签的使用

    动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...

  3. MyBatis——动态SQL语句——if标签和where标签复合使用

    功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...

  4. Mybatis 动态sql语句(if标签和where标签)

    功能:根据性别和名字查询用户 查询sql语句: SELECT id, username, birthday, sex, address FROM `user` WHERE sex = 1 AND us ...

  5. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!

    封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...

  6. 面试题—Mybatis动态sql是什么意思?常用的标签有哪些和用途?

    传统jdbc方法中,在写组合的多表复杂sql语句时,需要去拼接sql语句,稍不注意少写一个空格或"",就会导致报错. 这个Mybatis动态sql的功能,就拥有有效的解决了这个问题 ...

  7. Mybatis中XML的文件SQL语句与动态sql标签(trim|where|set|foreach|if|choose|when|otherwise|bind)

    在xml中写sql语句有很多的规范.标准,有时候想要找对应的例子还得翻一翻以前的代码,这里干脆对遇到的情况做个记录. 一,新建XML文件 <?xml version="1.0" ...

  8. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...

  9. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

最新文章

  1. Unable to merge dex
  2. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1124. 骑马修栅栏:欧拉路径、dfs
  3. 燃烧温度计算程序_【知识库】燃气燃烧器如何安全操作?
  4. 用线段拟合曲线,纯Java实现缠论笔段
  5. protobuf string类型_Protobuf3 使用其他消息类型
  6. java表达式1 29的计算结果是,java表达式陷阱 - Funcy1122的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. 【WinCE】流设备驱动简介及GPIO驱动的实现
  8. 图形学之空间坐标变化之三维图形观察及变换
  9. 倒排索引、分词、同义词
  10. LeetCode 数组 容易 python
  11. 错题集--大一C语言选择题
  12. Opengl的坑——A卡N卡实现
  13. java验证13位数书号_ISBN(国际标准书号)的校验
  14. Android系统体系结构
  15. 《沧浪之水》、《因为女人》作者阎真的最新作品《活着之上》的阅后笔记
  16. Ubuntu 16.04安装中文字体
  17. 前端实现组织结构列表
  18. 汝州九峰山下自产自销的好蜂蜜
  19. English语法_不定代词 - other / another
  20. 使用WebService进行网络编程【工具类】

热门文章

  1. html语言登黄鹤楼,《中国诗词大会》命题专家方笑一, 揭秘千古名诗《登黄鹤楼》为何格律“不合格”...
  2. HK-2010/3三通道脉象传感器/脉象传感器数据读取
  3. 2023秋招面试经验(华为、海康、中兴等)
  4. 计算机毕业设计ssm企业绩效考核系统x73jw系统+程序+源码+lw+远程部署
  5. c# ValidateHelper字符串格式验证
  6. 《卖火柴的小女孩》告诉我们什么道理?主要内容讲什么故事?
  7. 流利阅读12.22 ‘Spider-Man: Into the Spider-Verse’: A Fresh Take on a Venerable Hero
  8. 盘盘 DevOps“衍生品”: DevSecOps、NoOps、AIOps
  9. 硬盘分别接主板、阵列卡,系统盘盘符不为sda的解决方法
  10. 加解密-keccak256