栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mysql动态sql之mybatis动态sql

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql动态sql之mybatis动态sql

mysql动态sql想必大家都了解了

举个列子:现在有如下sql语句

select id,name from animals where id = 1 and name ="老虎"

很简单的sql语句但是在我们进行传参时  加入id 赋值为null 或者 name 为 null 

那么sql语句就会报错,那么这个时候就需要用到伟大的mybatis了,在日常的开发中mybatis这个半持久化框架的好处不用多说,直接上代码。

  1.   if  是我们比较常见的写法
    
      SELECT * FROM BLOG
      WHERe state = ‘ACTIVE’
      
        AND title like #{title}
      
    

    这条语句提供了可选的查找文本功能。如果不传入 “title”,那么所有处于 “ACTIVE” 状态的 BLOG 都会返回;如果传入了 “title” 参数,那么就会对 “title” 一列进行模糊查找并返回对应的 BLOG 结果(细心的读者可能会发现,“title” 的参数值需要包含查找掩码或通配符字符)。

    如果希望通过 “title” 和 “author” 两个参数进行可选搜索该怎么办呢?首先,我想先将语句名称修改成更名副其实的名称;接下来,只需要加入另一个条件即可。

    
      SELECT * FROM BLOG WHERe state = ‘ACTIVE’
      
        
          AND title like #{title}
        
        
          AND author_name like #{author.name}
        
        
          AND featured = 1
        
      
    

  2.  where 的处理
    select * from table
    where
     
        state = #{state}
      
      
        AND title like #{title}
      
      
        AND author_name like #{author.name}
      

    如果语句中title或author为空那么就会变成

    select * from table 
    where 

    很明显 这是一条错误的语句这时候有两种处理方法

    
    select * from table
    
     
        state = #{state}
      
      
        AND title like #{title}
      
      
        AND author_name like #{author.name}
      
    
    

    where 元素只会在子元素返回任何内容的情况下才插入 “WHERe” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

    如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:

    
      ...
    

    第二种写法