服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - 利用MyBatis进行不同条件的like模糊查询的方法

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

2021-05-27 13:23melissa_hexiu Java教程

这篇文章主要介绍了利用MyBatis进行不同条件的like模糊查询,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

之前一直是用mybatis进行sql查询时,一般都是用generator逆向生产的代码来进行查询。

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

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

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

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

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

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

我的方法

1。首先,定义search类,有查询字段type,和查询条件condition,利用这个类将数据传入sql查询中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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查询方法

?
1
2
3
4
5
6
7
8
9
10
11
12
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是如何实现的

?
1
2
3
4
5
6
<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

?
1
select count(*) from table where (table_a like paramsvalue)

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

?
1
paramsvalue = "%" + paramsvalue + "%"

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

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

原文链接:https://blog.csdn.net/melissa_heixiu/article/details/60879122

延伸 · 阅读

精彩推荐