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集合 Mapmap=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 WHERE no=#{no} name= #{name}, sex=#{sex} 我个人感觉 标签就是 结合 他同时具有两者的功能 UPDATE student WHERE no=#{no} name= #{name}, sex=#{sex}