利用MyBatis进行不同条件的like模糊查询的方法

 更新时间:2018年08月22日 10:58:40   作者:melissa_hexiu  
这篇文章主要介绍了利用MyBatis进行不同条件的like模糊查询,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

之前一直是用MyBatis进行SQL查询时,一般都是用Generator逆向生产的代码来进行查询。

现在遇到了一个业务问题,我们需要进行对不同的条件分别进行模糊查询,首先我想到的就是根据对需要进行模糊查询的字段进行判断,然后调用Example的方式进行查询条件的注入。

对于String类型的数据可以有Like查询这个方法,但是Integer或者Long这种数据类型的话就没有了,得需要自己动手写。

但是呢,我利用Generator生成的代码Example方式进行模糊查询时确无法实现,原因不太清楚,但是感觉代码没问题。

于是,只能我们自己手动写SQL语句了。

但是呢,每个查询条件都写一个查询语句的话,简单归简单,但是太麻烦。

那么,我们能不能利用一个查询来实现对不同字段的模糊查询呢?

我的方法

1。首先,定义Search类,有查询字段Type,和查询条件Condition,利用这个类将数据传入SQL查询中。

public class SearchType {

  private String type;

  private String condition;

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public String getCondition() {
    return condition;
  }

  public void setCondition(String condition) {
    this.condition = condition;
  }
}

定义好类后,我们在Service中调用Mapper查询方法

public List searchUser(String type,String condition) {

    SearchType search = new SearchType();
    search.setCondition(condition);
    search.setType(type);

    //模糊查询各字段

      List<MkUser> list = userMapper.selectWithConditionLike(search);
      return list;

  }

这里的MKUser是我们查询结果后存储数据的类

下面看看Mapper.xml是如何实现的

<select id="selectWithConditionLike" resultMap="BaseResultMap" parameterType="com.moka.common.pojo.SearchType" >
  select userid ,username ,we_name ,we_number ,tel_number ,updateTime ,invite_number ,purchased_total 
  from mk_user
  where ${type} like CONCAT(CONCAT('%',#{condition}),'%')

 </select>

关于为什么一个地方是${},另一个是#{},自己查询这两个的区别。

注意数据库中的字段跟MKUser类中字段的对应,
我利用BaseResultMap进行了对应。

这样就搞定了。

Mybaits Generator 模糊查询 (like)的使用方式

like 使用

使用like时如果不手动拼接 % 等上去的话很难达到模糊搜索的要求,默认生成的SQL语句如下:

如传入变量是 paramsValue

SELECT count(*) FROM table WHERE (table_a LIKE paramsValue) 

由此可得,我们可以给传入的变量手动拼接 %,也就是说

paramsValue = "%" + paramsValue + "%"

之后再传入 则可以达到模糊匹配的效果,当然这种前后都加 % 的做法尽量避免使用,数据量大的情况下检索效果不会太好,因为会进行全表检索,而不使用索引。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot获取配置信息的三种方式总结

    SpringBoot获取配置信息的三种方式总结

    这篇文章给大家介绍了SpringBoot获取配置信息的三种方式,@Value属性值注入,绑定配置类和通过 environment获取这三种方式,文中通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • 详解CopyOnWriteArrayList是如何保证线程安全

    详解CopyOnWriteArrayList是如何保证线程安全

    这篇文章主要为大家介绍了CopyOnWriteArrayList是如何保证线程安全讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    这篇文章主要介绍了java实现无符号数转换、字符串补齐、md5、uuid、随机数示例,需要的朋友可以参考下
    2014-04-04
  • Java BigDecimal案例详解

    Java BigDecimal案例详解

    这篇文章主要介绍了Java BigDecimal案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • SpringBoot项目启动后自动加载系统配置的多种实现方式

    SpringBoot项目启动后自动加载系统配置的多种实现方式

    这篇文章主要介绍了SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2025-01-01
  • 为spring get请求添加自定义的参数处理操作(如下划线转驼峰)

    为spring get请求添加自定义的参数处理操作(如下划线转驼峰)

    这篇文章主要介绍了为spring get请求添加自定义的参数处理操作(如下划线转驼峰),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • SpringBoot请求转发的方式小结

    SpringBoot请求转发的方式小结

    本文主要介绍了SpringBoot请求转发的方式,一共有两大类,一种是controller控制器转发一种是使用HttpServletRequest进行转发,本文就详细的介绍一下,感兴趣的可以了解一下
    2023-09-09
  • Java static关键字详细介绍与用法总结

    Java static关键字详细介绍与用法总结

    这篇文章主要介绍了Java中static关键字的作用和用法详细介绍,主要讲了静态方法、静态变量、静态类、static和final一块用等内容。需要的朋友可以参考下
    2017-04-04
  • java实现客户管理系统

    java实现客户管理系统

    这篇文章主要为大家详细介绍了java实现客户管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 浅谈Java绝对布局

    浅谈Java绝对布局

    这篇文章主要介绍了Java当中的绝对布局,还举了一个简单的实例,需要的朋友可以参考下。
    2017-08-08

最新评论