2.3 Mybati框架 --动态SQL

*爱你&永不变心* 提交于 2020-03-12 14:00:06

    动态SQL作用:Mybatis3采用了OGNL的表达式来完成动态SQL拼装。避免开发人员在进行数据库开发时,手动拼装SQL;

动态SQL主要元素:
<if> :判断语句,用于单条件分支判断;
<choose>(<when><otherwise>):相当于java的 switch、case、default语句,用于多条件分支判断;
<where>、<trim>、<set>:辅助元素,用于处理一些SQL拼装,特殊字符问题;
<bind>:从OGNL表达式创建一个变量,并将其绑定到上下文,常用语模糊查询的sql中;

1.<if> 应用demo

在这里插入图片描述

2.<choose> <when> <otherwise> 应用demo

这三个元素相当于java中的 switch case default 语句
在这里插入图片描述

3.<where> 元素的应用demo

    where元素需要与if 或者是 choose 元素配合使用,当内部子元素条件至少有一个满足时候,会在sql语句中自动插入 where 关键字。目的在于避免一定要在SQL语句中 提前写 where 条件,让SQL语句更加灵活
    ps:但是这个时候 where 后 会直接是 and ……,效果是这样的
            select …… where and ……
        很明显的语法错误对不对,所以没有完美解决这个问题,是一个隐患
在这里插入图片描述

4.<trim> :元素为解决 where and 关键字 在拼装SQL 造成的语法错误 而生:

    在trim 元素中 配置 prefix="where" prefixOverrides="and" 即可解决 简单应用where元素 可能造成 where 与 and 关键字 造成的语法问题:
在这里插入图片描述

5.<set> <if> 元素在拼装 update 语句中的应用 demo

    此时,业务中对数据库 进行 update 操作,只需要在传入对象(customer)中set完属性值即可,交由Mybatis根据对象中属性值是否为空自行拼装SQL(该点优于Hibernate全表映射框架在更新数据时必须更新所有字段,效率相对较高)
在这里插入图片描述

6.<foreach>: 用来实现 sql 语句中 select * from table where id in (id1,id2,id3,……)这样的形式:

其中,item 是循环中当前的元素;
    index: 是当前元素在集合中的位置下标;
     collection:是配置传递过来的参数类型,他可以是 array、list(或collection)、Map集合的键、POJO类(数据库表映射类)中数组或集合类型的属性名称;
    separator:是各个元素之间的分隔符。

    在几个属性中,collection最容易报错,该属性必须指定,在不同情况,属性值也是不同的:
     若传入的是单个参数,且参数类型是一个数组或list,属性值分别为 array 、list(或collection);
    若传入的参数是多个的时候,就需要封装成一个Map,这个时候collection的属性值就是Map的键;
     若传入的是POJO类,collection属性值就是该类中需要进行遍历的数组或集合的属性名

在这里插入图片描述

7.<bind>:元素意义:

    避免在项目移植数据库的时候出现SQL语法问题,在进行模糊查询时,利用 bind 元素。
    因为oracle 与 mysql 及其他数据库 sql 方言SQL注入问题 的问题
(例如:
     传统方法 ……like ‘ %${username}% ’,会导致SQL注入问题
    mysql中 ……username like concat(’%’,username,’%’);;
    oracle 中 是 || 拼接的;;

demo
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!