Mybatis动态sql标签说明
一、简述
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标签说明相关推荐
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...
- mybatis动态sql标签的使用
动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...
- MyBatis——动态SQL语句——if标签和where标签复合使用
功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...
- Mybatis 动态sql语句(if标签和where标签)
功能:根据性别和名字查询用户 查询sql语句: SELECT id, username, birthday, sex, address FROM `user` WHERE sex = 1 AND us ...
- Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...
- 面试题—Mybatis动态sql是什么意思?常用的标签有哪些和用途?
传统jdbc方法中,在写组合的多表复杂sql语句时,需要去拼接sql语句,稍不注意少写一个空格或"",就会导致报错. 这个Mybatis动态sql的功能,就拥有有效的解决了这个问题 ...
- Mybatis中XML的文件SQL语句与动态sql标签(trim|where|set|foreach|if|choose|when|otherwise|bind)
在xml中写sql语句有很多的规范.标准,有时候想要找对应的例子还得翻一翻以前的代码,这里干脆对遇到的情况做个记录. 一,新建XML文件 <?xml version="1.0" ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...
最新文章
- Unable to merge dex
- 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1124. 骑马修栅栏:欧拉路径、dfs
- 燃烧温度计算程序_【知识库】燃气燃烧器如何安全操作?
- 用线段拟合曲线,纯Java实现缠论笔段
- protobuf string类型_Protobuf3 使用其他消息类型
- java表达式1 29的计算结果是,java表达式陷阱 - Funcy1122的个人空间 - OSCHINA - 中文开源技术交流社区...
- 【WinCE】流设备驱动简介及GPIO驱动的实现
- 图形学之空间坐标变化之三维图形观察及变换
- 倒排索引、分词、同义词
- LeetCode 数组 容易 python
- 错题集--大一C语言选择题
- Opengl的坑——A卡N卡实现
- java验证13位数书号_ISBN(国际标准书号)的校验
- Android系统体系结构
- 《沧浪之水》、《因为女人》作者阎真的最新作品《活着之上》的阅后笔记
- Ubuntu 16.04安装中文字体
- 前端实现组织结构列表
- 汝州九峰山下自产自销的好蜂蜜
- English语法_不定代词 - other / another
- 使用WebService进行网络编程【工具类】
热门文章
- html语言登黄鹤楼,《中国诗词大会》命题专家方笑一, 揭秘千古名诗《登黄鹤楼》为何格律“不合格”...
- HK-2010/3三通道脉象传感器/脉象传感器数据读取
- 2023秋招面试经验(华为、海康、中兴等)
- 计算机毕业设计ssm企业绩效考核系统x73jw系统+程序+源码+lw+远程部署
- c# ValidateHelper字符串格式验证
- 《卖火柴的小女孩》告诉我们什么道理?主要内容讲什么故事?
- 流利阅读12.22 ‘Spider-Man: Into the Spider-Verse’: A Fresh Take on a Venerable Hero
- 盘盘 DevOps“衍生品”: DevSecOps、NoOps、AIOps
- 硬盘分别接主板、阵列卡,系统盘盘符不为sda的解决方法
- 加解密-keccak256