一、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语句使用相关推荐

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

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

  2. Mybatis 动态Sql语句《常用》

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

  3. Mybatis—动态SQL语句与逆向工程

    Mybatis动态SQL语句与逆向工程 MyBatis动态SQL语句与逆向工程 1.动态SQL语句 1.1.动态SQL是什么 1.2.动态SQL有什么用 1.3.基于XML的实现 1.3.2.接口文件 ...

  4. Mybatis动态SQL语句大全

    动态 SQL 语句大全 读完这篇文章里你能收获到 Mybatis动态SQL语句大全 Mybatis中如何定义变量 Mybatis中如何提取公共的SQL片段 1.if语句 需求:根据作者名字和博客名字来 ...

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

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

  6. 【转】mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    转自:除非申明,文章均为一号门原创,转载请注明本文地址,谢谢! 转载地址:http://blog.csdn.net/kutejava/article/details/9164353#t5 1. if ...

  7. mybatis动态SQL语句

    三.动态SQL语句 有些时候,sql语句where条件中,需要一些安全判断,例如按性别检索,如果传入的参数是空的,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.这是我们可以使 ...

  8. MyBatis学习总结(11)——MyBatis动态Sql语句

    MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...

  9. Mybatis动态sql语句的生成

    在XMLLanguageDriver的createSQLSource()方法中,可以将已经经过解析的xml节点传入,并且传入相应的参数类型,开始动态sql语句的生成. @Override public ...

最新文章

  1. JVM指令详解(上)
  2. Android 三种方式实现自定义圆形页面加载中效果的进度条
  3. 巨杉数据库:金融级数据库是怎样炼成的
  4. 相似度算法(http://blog.sina.com.cn/s/blog_62b83291010127bf.html)
  5. IO多路复用的机制:select、poll、epoll
  6. 初中动画flash作品_初中Flash动画设计基础知识试题及答案.doc
  7. Unity: 打飞碟Adapter版
  8. windows server 2008安装配置DHCP服务器
  9. Creator+微信小游戏:(3)微信openID获取(https、wss问题)
  10. CTR预估 论文精读(十七)--ESMM: Entire Space Multi-Task Model
  11. 我内心深处最温柔的痛楚,你是否还能感知?
  12. 《德鲁克管理思想精要》读书笔记1 - 管理是什么?
  13. 通信网络与IP网络底层传输技术梳理(SONET/SDH/OTN/ATM/Ethernet/MPLS/PTN...)
  14. 【TPAMI 2022】A Survey on Vision Transformer
  15. 面试题01.05.一次编辑
  16. 攻防世界writeup
  17. 微信或QQ屏蔽域名,爆红域名如何在微信打开,如何进行微信域名防封?
  18. fasterxml-jackson发生Can not deserialize instance of的原因
  19. 安卓最新版本_安卓/苹果 | 两大平台最新版本,看片神器!
  20. php遍历windows下中文目录下的所有文件名

热门文章

  1. 张靓颖的人脉和她的社会名流“粉丝”们
  2. Kali Linux2021.2发布,增加大量新工具和功能
  3. Knockout初体验--监控属性
  4. 怎样使alias的更改永久生效
  5. 第五章 函数和代码复用
  6. gcc(g++): error trying to exec
  7. 统计学专业同学需要掌握的数据库基本用法
  8. 游戏建模行业市场井喷式爆发,你还在闷头死磕?
  9. J2EE的web服务器
  10. Oracle数据库所有知识点集合