MyBatis动态sql语句使用
一、MyBatis动态语句分为4种元素:
元素 | 作用 | 描述 |
if | 条件判断 | 单条件判断 |
choose(when、otherwise) | 条件选择,相当Java when | 多条件分支判断 |
where、set | 辅助 | 处理sql语句拼接问题 |
foreache | 循环 | 循环 |
二、Mybatis动态sql语句使用方式、例子
1、if元素,如下
<select id="selByName" resultType="yuan.yuanmybatis.entity.Account">select id,name,created,updated from account where 1=1<if test="name !=null and name !=''">and name like concat('%',#{name},'%')</if></select>
2.choose
<select id="selByChoose" resultType="yuan.yuanmybatis.entity.Account">select id,name,created,updated,money from account where 1=1<choose><when test="name !=null and name !=''">and name like concat('%',#{name},'%')</when><when test="money !=null and money !=''">and name =#{money}</when><otherwise>and isdeleted=1</otherwise></choose></select>
3、where元素,细心的读者会发现1、2点会有一个1=1,如果没有1=1,那么会变成如下错误语句:
select id,name,created,updated,money from account where and name like concat('%',#{name},'%')
这个时候我们可以用where元素处理sql:
<select id="selByName" resultType="yuan.yuanmybatis.entity.Account">select id,name,created,updated from account<where><if test="name !=null and name !=''">and name like concat('%',#{name},'%')</if></where></select>
where元素在里面的条件成立的时候,才会加入where这个sql关键字。
4、trim元素可以帮助我们去掉一下and、or等,prefix代表语句前缀, prefixOverrides代表要去掉的字符串
<select id="selByChoose" resultType="yuan.yuanmybatis.entity.Account">select id,name,created,updated,money from account<trim prefix="where" prefixOverrides="and"><choose><when test="name !=null and name !=''">and name like concat('%',#{name},'%')</when><when test="money !=null and money !=''">and name =#{money}</when><otherwise>and isdeleted=1</otherwise></choose></trim></select>
5、set元素,它可以在遇到逗号的时候,把对应的逗号去掉
<update id="updateAccout" parameterType="yuan.yuanmybatis.entity.Account">update account<set><if test="name !=null and name !=''">name=#{name},</if><if test="money!=null and money!=''">money=#{money}</if></set>where id=#{id}</update>
6、foreach元素,它时一个循环语句,作用时用来遍历集合,支持数组、List、Set接口集合
<select id="selIn" resultType="yuan.yuanmybatis.entity.Account">select id,name,created,updated from account where name in<foreach collection="nameList" index="index" item="name" open="(" separator="," close=")">#{name}</foreach></select>
MyBatis动态sql语句使用相关推荐
- MyBatis——动态SQL语句——if标签和where标签复合使用
功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...
- Mybatis 动态Sql语句《常用》
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...
- Mybatis—动态SQL语句与逆向工程
Mybatis动态SQL语句与逆向工程 MyBatis动态SQL语句与逆向工程 1.动态SQL语句 1.1.动态SQL是什么 1.2.动态SQL有什么用 1.3.基于XML的实现 1.3.2.接口文件 ...
- Mybatis动态SQL语句大全
动态 SQL 语句大全 读完这篇文章里你能收获到 Mybatis动态SQL语句大全 Mybatis中如何定义变量 Mybatis中如何提取公共的SQL片段 1.if语句 需求:根据作者名字和博客名字来 ...
- Mybatis 动态sql语句(if标签和where标签)
功能:根据性别和名字查询用户 查询sql语句: SELECT id, username, birthday, sex, address FROM `user` WHERE sex = 1 AND us ...
- 【转】mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
转自:除非申明,文章均为一号门原创,转载请注明本文地址,谢谢! 转载地址:http://blog.csdn.net/kutejava/article/details/9164353#t5 1. if ...
- mybatis动态SQL语句
三.动态SQL语句 有些时候,sql语句where条件中,需要一些安全判断,例如按性别检索,如果传入的参数是空的,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.这是我们可以使 ...
- MyBatis学习总结(11)——MyBatis动态Sql语句
MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...
- Mybatis动态sql语句的生成
在XMLLanguageDriver的createSQLSource()方法中,可以将已经经过解析的xml节点传入,并且传入相应的参数类型,开始动态sql语句的生成. @Override public ...
最新文章
- JVM指令详解(上)
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- 巨杉数据库:金融级数据库是怎样炼成的
- 相似度算法(http://blog.sina.com.cn/s/blog_62b83291010127bf.html)
- IO多路复用的机制:select、poll、epoll
- 初中动画flash作品_初中Flash动画设计基础知识试题及答案.doc
- Unity: 打飞碟Adapter版
- windows server 2008安装配置DHCP服务器
- Creator+微信小游戏:(3)微信openID获取(https、wss问题)
- CTR预估 论文精读(十七)--ESMM: Entire Space Multi-Task Model
- 我内心深处最温柔的痛楚,你是否还能感知?
- 《德鲁克管理思想精要》读书笔记1 - 管理是什么?
- 通信网络与IP网络底层传输技术梳理(SONET/SDH/OTN/ATM/Ethernet/MPLS/PTN...)
- 【TPAMI 2022】A Survey on Vision Transformer
- 面试题01.05.一次编辑
- 攻防世界writeup
- 微信或QQ屏蔽域名,爆红域名如何在微信打开,如何进行微信域名防封?
- fasterxml-jackson发生Can not deserialize instance of的原因
- 安卓最新版本_安卓/苹果 | 两大平台最新版本,看片神器!
- php遍历windows下中文目录下的所有文件名