博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
--------------------------------MaBatis动态sql--------------------------
阅读量:4619 次
发布时间:2019-06-09

本文共 3881 字,大约阅读时间需要 12 分钟。

1)动态SQL基于OGNL的表达式,可以方便的在SQL语句中实现某些逻辑,用于实现动态SQL的元素如下:

  (1)if:利用if实现简单的条件选择。

  (2)choose(when,otherwise):相当于Java中的switch语句。通常与when和otherwise搭配。

  (3)where :简化SQL语句中where的条件判断,主要用来简化SQL语句中的where条件判断,并能智能的处理and和          or,不必要担心关键字导致的语法错误。

       (4)set:解决动态更新语句

  (5)trim:可以灵活的去除多余的关键字。

  (6)foreach:迭代一个集合,通常用于in条件

2) 

现在前台有个表单!表单中有三项条件 来查询 符合条件的学生!01.根据学生姓名查询02.根据老师姓名查询03.根据年级名称查询针对于上述的情况,我们发现三个查询条件 不在同一个表中!第一种情况:  把学生姓名,老师姓名,年级名称封装成一个Map集合  Map
map=new HashMap
(); //把三个条件放进map map.put("studentName",学生姓名); map.put("teacherName",老师姓名); map.put("gradeName",年级名称); //调用dao层方法 dao.xxx(map); 然后去mapper.xml文件中执行sql语句 select s.name,s.id,s.age from student s,teacher t,grade g where s.tId=t.id and s.gId=g.id and s.name=#{studentName} //开始使用map中的key and t.name=#{teacherName} and g.name=#{gradeName}第二种情况: 用户可以传递几个参数,我们在方法定义时就书写几个形参! 在接口中书写方法 List
selectStduentsByCondition(String stuName,String teacherName,String gradeName); 在mapper.xml文件中书写sql select s.name,s.id,s.age from student s,teacher t,grade g where s.tId=t.id and s.gId=g.id and s.name=#{0} //开始使用参数的下标 and t.name=#{1} and g.name=#{2}总结#{}中可以存放的内容01. 当参数是对象的时候,存放的是对象的属性02. 存放map时的注意点 001.当参数是map集合时,存放的是map的key 002.如果map的value是对象时,存放的是对象的属性03.如果传递一个参数,存放的是占位符04.如果传递多个参数,存放的是参数对应的下标,从0开始

 上面都是写死的。没用动态标签,看下面

SELECT id,NAME,age FROM student

4)使用if+trim实现多条件查询

     

 

trim 属性

                prefix:前缀覆盖并增加其内容

                suffix:后缀覆盖并增加其内容

                prefixOverrides:前缀判断的条件

                suffixOverrides:后缀判断的条件

标签单独使用,如下
如果name为空或空串 则进行全部查询,效率会下降当进行多条件下查询是,
可以提高查询速度 和优化查询语句
使用
UPDATE student
name= #{name},
sex=#{sex}
WHERE no=#{no}
我个人感觉
标签就是
结合 他同时具有两者的功能
UPDATE student
name= #{name},
sex=#{sex}
WHERE no=#{no}

 

转载于:https://www.cnblogs.com/laosunlaiye/p/7586867.html

你可能感兴趣的文章
SpringBoot------ActiveMQ安装
查看>>
详细了解 int? 类型
查看>>
纯js事件注册方法(解决兼容性)
查看>>
字符串匹配 ?kmp : hash
查看>>
mongod.service: control process exited, code=exited status=1
查看>>
vue npm 安装
查看>>
大照片背景在网页设计中应用的精美作品范例(下篇)
查看>>
c# 发送邮件、附件 分类: C# 2014-12-...
查看>>
对360来说,江湖上再无“搜狗”这个传说
查看>>
composer
查看>>
OpenCV特征点检测——ORB特征
查看>>
mysql的csv数据导入与导出
查看>>
leetcode笔记:Pascal's Triangle
查看>>
java Hibernate UUID代码
查看>>
【QwQ】乱七八糟的置顶
查看>>
ASP.NET性能优化之构建自定义文件缓存
查看>>
利用API自动建立GL科目段组合
查看>>
UVA 696 How Many Knights
查看>>
2018.10.13 队测总结
查看>>
水平垂直居中方法总结
查看>>