千家信息网

MyBatis动态SQL怎么实现

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了MyBatis动态SQL怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis动态SQL怎么实现文章都会有所收获,下面我们一起来看看吧。m
千家信息网最后更新 2026年11月02日MyBatis动态SQL怎么实现

这篇文章主要介绍了MyBatis动态SQL怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis动态SQL怎么实现文章都会有所收获,下面我们一起来看看吧。

mybatis最强大的功能之一便是它的动态sql能力

借用官方文档的一段话 : 如果您以前有使用JDBC或者类似框架的 经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在 columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。

那么如果没有这种功能到底有多痛苦呢 ? 我们来举例说明

这是一张表 , 试想如果我们通过 name 和 age来查询表信息时 , sql语句中肯定会存在 where和and字句 , 但是如果 name或者age 有一个为null或者都为null , 那么此时的 where 和and就会被孤立,那么这样肯定会出现很多问题 , 所以mybatis的动态sql功能帮助我们完美解决

MyBatis 中用于实现动态 SQL 的元素主要有:

If where trim set choose(when, otherwise) foreach

if和where

使用这种标签 , 动态sql可以根据 条件来自动帮我们完善sql

SqlSession sqlSession= MybatisUtil.getSqlSession();EmployeeDao mapper=sqlSession.getMapper(EmployeeDao.class);//创建一个对象,set值Employee employee = new Employee();employee.setName("");employee.setAge(null);List employees = mapper.selectAllEmployee1(employee);System.out.println(employees);sqlSession.commit();sqlSession.close();

第一次我们都设置null值, 表中数据完全被查询

第二次我们只查询年龄

employee.setName("");employee.setAge(20);

查询到两条年龄为20的数据 , 这就是mybatis动态sql的强大之处

trim

上述的 where 与 if 我们也可以使用 trim 来代替where

这里有两个属性 prefix , prefixOverrides

prefix : 代表前缀 , 如果if 中有成立的条件, 就会在sql前面拼入where字句

prefixOverrides : 根据if 条件自动判断是否去除 or | and字句

相应的也有suffix与suffixOverrides , 代表对尾部的判断

Choose

choose代表多路选择(多选一)

当中的条件成立时, 走when中的语句,都不成立走

Set

set 可以根据条件自动添加set字句,动态更新列,也可以来剔除追加到条件末尾的任何不相关的逗号

        update employee                                    name=#{name},                                        age=#{age},                            where id=#{id}    

foreach

主要用在构建 in 条件中,它可以在 SQL 语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。 item 表示集合中每一个元素进行迭代时的别名,index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open 表示该语句以什么开始, separator 表示在每次进行迭代之间以什么符号作为分隔符,close 表示以什么结束,在使用 foreach 的时候最关键的也是最容易出错的就是 collection 属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的。

– 如果传入的是单参数且参数类型是一个 List 的时候,collection 属 性值为 list

– 如果传入的是单参数且参数类型是一个 array 数组的时候, collection 的属性值为array

//创建一个list集合List list = new ArrayList<>();list.add(19);list.add(20);List employees = mapper.selectAllEmployee2(list);

接口方法如下 :

  List selectAllEmployee2(List list);

对应动态sql如下 :

这里我们传入的是一个集合, 所以参数选择 list , 通过foreach我们可以动态的根据集合里的值来查询

关于"MyBatis动态SQL怎么实现"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"MyBatis动态SQL怎么实现"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

动态 条件 属性 语句 参数 查询 迭代 字句 痛苦 代表 元素 功能 时候 知识 内容 就是 年龄 数据 篇文章 类型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 互联网加科技 华服互联网科技怎么样 广州百单互联网科技有限公司 互联网科技活动banner 互联网科技公司怎么样 广州善班互联网科技 顺网科技2021年互联网排名 富国互联网科技创新基金 玖二柒互联网科技公司待遇 济南华为互联网科技产业总部基地 须眉科技是互联网公司吗 昭通云南众福互联网科技有限公司 互联网系的金融科技公司 互联网时代科技改变生活 湖南诚度互联网科技有限公司 雨阳互联网卡科技有限公司 互联网科技新闻 互联网科技创新创业项目 互联网高科技绘画 疫情对互联网科技公司影响 港股互联网科技股 亿人帮互联网科技 上海卓越科技 互联网 互联网 科技服务平台 互联网科技公司营业执照怎么办理 广州百诚互联网科技有限公司官网 互联网金融运营模式中的金融科技 广西泛欧互联网科技有限公司 恒生科技互联网指数十大成分股
0