如何正确的使用Mybatis模糊查询

这期内容当中小编将会给大家带来有关如何正确的使用Mybatis模糊查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

10年积累的网站制作、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站策划后付款的网站建设流程,更有合作免费网站建设让你可以放心的选择与我们合作。

Mybatis 模糊查询和动态sql语句

模糊查询

对数据库最常用的操作就是查询了,但是如何使用Mybatis进行模糊查询呢?下面先看一个简单的模糊查询

  
   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE #{asd} 
  

这是一条伪模糊查询, 因为没有实现真正的模糊 “%”。参数为字符串,所以#{}中内容不被限制。但是应该如何插入 % 字符呢。 我们首先想到的是传递字符串参数时将%插入到字符串中 “张%”,但是这种方法操作略微繁琐了一些。 下面提供了使用sql方法的策略

 
   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE CONCAT( #{asd} ,'%')
  

另外一种不推荐的写法给大家


   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE '${emp_name}%'
  

#{} 是采用预编译的写法,也就是JDBC中的PerpareStatement,这种写法可以防止sql注入,但${}这种写法是不采用预编译,其中的参数写成类中的属性或者map的key值或者为接口中注解的参数名。

mybatis 提供了bind 标签。下面举个例子

 
  
   SELECT 
   * 
  FROM
   oa_employee 
  WHERE emp_name LIKE #{emp_name}
  

他是在#{}表达式自动填入value值,值得注意的是“_parameter.getEmp_name()” 调用的方法是对象中作为查询参数的属性的get方法

多条件查询

多种条件查询的要点是判断查询条件是否为空,拼接sql语句。在mybatis中提供了if标签和where 标签。 下面来介绍两种标签的用法。

if标签

 
SELECT 
* 
FROM 
oa_employee 
WHERE 1=1 
 
and emp_name = #{emp_name } 
 
 
and sex = #{emp_sex} 
 

mybatis 中的if标签有些类似于EL表达式的使用,test中可以直接写入类中的属性或者key值。

where标签


   SELECT 
   * 
   FROM
   oa_employee 
   
   
    and emp_name = #{emp_name }
   
   
    and sex = #{emp_sex}
   
   
  

这里的where标签 替换了前一段代码的 where 1=1 。 mybatis中的where 标签会判断标签内是否有内容, 如果有内容就自动生成where 并把 where 后面的第一个and +一个空格,or+一个空格 去掉。

choose , when 和 otherwise 标签


   SELECT 
   * 
   FROM
   oa_employee 
   
   
    
       and emp_name = #{emp_name }
    
     
       and sex = #{emp_sex}
    
    
      emp_id = 50
    
   
   
  

当所有条件不满足时,执行otherwise标签的内容。

trim标签


   SELECT 
   * 
   FROM
   oa_employee 
    
    
      and emp_name = #{emp_name }
    
    
       and sex = #{emp_sex}
    
  

trim标签的属性及其含义

  • - prefix : 标签之间有内容在最前面加入

  • - prefixOverrides: 检查内容的最前面是否匹配,匹配就删除

  • - suffix: 标签之间有内容在最后面加入

  • - suffixOverrides:检查内容的最后面是否匹配,匹配就删除

set标签

set标签常用于update操作,并且会自动抹掉无关的,

 
  UPDATE 
   oa_employee 
  
    
       emp_name = #{emp_name}
    
    
      ,sex = #{emp_sex}
    
  
  WHERE emp_id = 50 
  

foreach标签

foreach 用于处理数组或者list集合,下面是一个批量添加的例子

 
  INSERT INTO 
  oa_employee 
  ( emp_name, sex, fk_dept_id) 
  VALUES
   
   (#{employee.emp_name},#{employee.emp_sex},#{employee.fk_dept_id})
  
  

其中 如果参数为数组 则collection只能为“array” 参数为List集合则collection只能为 “list” item类似JSTL 中的var的作用, 指代容器中的每一个对象。separator=”,”的含义是每条数据以 , 分割。 未注明的属性有 open 和 close 他们的含义是在遍历开始和结束时分别添加其内容。

上述就是小编为大家分享的如何正确的使用Mybatis模糊查询了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


分享文章:如何正确的使用Mybatis模糊查询
标题网址:http://scyanting.com/article/gsodsi.html