利用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 + "%"

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

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

(0)

相关推荐

  • 详解MyBatis模糊查询LIKE的三种方式

    模糊查询也是数据库SQL中使用频率很高的SQL语句,使用MyBatis来进行更加灵活的模糊查询. 直接传参法 直接传参法,就是将要查询的关键字keyword,在代码中拼接好要查询的格式,如%keyword%,然后直接作为参数传入mapper.xml的映射文件中. public void selectBykeyWord(String keyword) { String id = "%" + keyword + "%"; String roleType = "

  • Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办

    项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. try { realName = new String(realName.getBytes("GBK"), "UTF-8"); } catch (UnsupportedEncodingException exce

  • MyBatis中的模糊查询语句

    其实就只有一条sql语句 <select id = "search" resultType = "material"> select material_id,material_num,material_name,material_type,material_model,id from material where material_name like '%${value}%' or material_num like '%${value}%' </

  • mybatis分页及模糊查询功能实现

    mybatis中分页有3种方式来实现,通过sql语句(两种传参方式)来实现,通过mybatis 的 Rowbounds 来实现. 通过(自定义类型)传参 来实现分页: 映射文件: <select id="findListBypage" parameterType="cn.wh.util.PageUtil" resultType="Role"> select * from t_role limit #{index},#{size} &l

  • mybatis 模糊查询的实现方法

    mybatis 模糊查询的实现方法 mybatis的逆向助手确实好用,可以省去很多编写常规sql语句的时间,但是它没办法自动生成模糊查询语句,但开发中模糊查询是必不可少的,所以,需要手动对mapper编写模糊查询功能. 这里先明确MyBatis/Ibatis中#和$的区别: 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解

  • MyBatis实现动态查询、模糊查询功能

    要实现查询,咱们就先有个数据库,截图如下,其中cityAreaId是外键,本次可以忽略: 下面Branches是我的实体类,里面有name和address属性: 接口中方法: public List<Branches> finDongTai(@Param("name")String name,@Param("add")String address);//动态 public List<Branches> findLike(@Param(&quo

  • Mybatis中的like模糊查询功能

    1.  参数中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <select id="selectPersons" resultType="person" parameterType="person"> select id,sex,age,username,password from person where true &

  • MyBatis实现模糊查询的几种方式

    在学习MyBatis过程中想实现模糊查询,可惜失败了.后来上百度上查了一下,算是解决了.记录一下MyBatis实现模糊查询的几种方式. 数据库表名为test_student,初始化了几条记录,如图: 起初我在MyBatis的mapper文件中是这样写的: <select id="searchStudents" resultType="com.example.entity.StudentEntity" parameterType="com.exampl

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

    之前一直是用MyBatis进行SQL查询时,一般都是用Generator逆向生产的代码来进行查询. 现在遇到了一个业务问题,我们需要进行对不同的条件分别进行模糊查询,首先我想到的就是根据对需要进行模糊查询的字段进行判断,然后调用Example的方式进行查询条件的注入. 对于String类型的数据可以有Like查询这个方法,但是Integer或者Long这种数据类型的话就没有了,得需要自己动手写. 但是呢,我利用Generator生成的代码Example方式进行模糊查询时确无法实现,原因不太清楚,

  • 详解Mybatis中万能的Map和模糊查询写法

    1.万能的Map 假设,我们的实体类,或者数据库中的表,字段或参数过多,我们接口参数以前用的是实体类,现在考虑使用下Map! 接口: //万能的Map int addUser2(Map<String,Object> map); mapper.xml: <!--Map中的key--> <insert id="addUser2" parameterType="map"> insert into mybatis.user (id,nam

  • MyBatis中map的应用与模糊查询实现代码

    目录 1.MyBatis中map的应用 1.1.应用场景 1.2.具体实现 1.3.注意点!!! 2.模糊查询 1.MyBatis中map的应用 1.1.应用场景 假设,实体类,或者数据库中的表,字段或者参数过多,应当考虑使用Map!!! 1.2.具体实现 //万能map int addUser2(Map<String,Object> map); <!--对象中的属性,可以直接取出来 parameterType=传递map中的key--> <insert id="a

  • 基于Java 利用Mybatis实现oracle批量插入及分页查询

    目录 1.单条数据insert 2.批量数据批量insert 3.创建序列 4.oracle分页查询 前端与后端交互,分页查询 后端海量数据导出,批量查询 1.单条数据insert <!--简单SQL--> insert into userinfo (USERID, USERNAME, AGE) values(1001,'小明',20); <!--Mybatis写法1,有序列,主键是自增ID,主键是序列--> <insert id="insert" par

  • Tk.mybatis零sql语句实现动态sql查询的方法(4种)

    目录 实现方式: 方式一:使用Example实现 方式二:使用example.createCriteria实现 方式三:使用Example.builder实现 方式四:使用weekendSqls实现 有时候,查询数据需要根据条件使用动态查询,这时候需要使用动态sql,通常我们会自己写动态sql来实现,比如: <select id="findStudentByCondition" resultType="com.example.service.entity.Student

  • Mybatis实现增删改查及分页查询的方法

    MyBatis的前身就是iBatis.是一个数据持久层(ORM)框架. MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持 久层框架.MyBatis消除了几乎所有的JDBC 代码和参数的手工 设置以及结果集的检索.MyBatis使用简单的XML或注解用于 配置和原始映射,将接口和Java 的POJOs(Plan Old Java Objects,普通的Java 对象)映射成数据库中的记录.每个 MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个 SqlS

  • springboot使用JPA时间类型进行模糊查询的方法

    这个问题是我自己开发中遇到的问题  数据库使用的是mysql5.6  字段名称为checkingTime  类型为timestamp 显而易见 存到库中的是保留6位毫秒 即yyyy-MM-dd HH:mm:ss.ssssss  此时需求是精确到分钟的相同时间 不进行存储 这时候就需要进行模糊查询   搜了一圈百度 并没有什么好用的方法 我的bean类定义的是date类型 使用注解将类型更改为timestamp 存入库中 其实在做模糊查询的时候  只需要向持久层传入String类型参数即可 我的做

  • jQuery实现模糊查询的方法分析

    本文实例讲述了jQuery实现模糊查询的方法.分享给大家供大家参考,具体如下: 需求:list列表内容很多,用户需要找出列表内容中的某些条目,只有当与用户输入值匹配的条目才显示出来.(后台无分页,直接异步接口返回数据添加形成的内容列表) 虽然可以通过传参再调用查询出来,但这里主要记录的是前端处理进行模糊查询而无需再次调用接口的实现方法. html部分: <div class="search-form"> <input type="text" pla

  • MyBatis使用Map与模糊查询的方法示例

    当我们的实体类.或者数据库里的表.字段或者参数很多,这个时候考虑使用map 一.使用map传参插入数据 1.编写Dao接口/Mapper层 使用Map做参数 //Dao接口/Mapper层 使用Map传参 int addUser2(Map<String,Object> map); 2.编写Mapper.xml中的sql语句 <!-- 传递map的key--> <insert id="addUser2" parameterType="map&quo

  • ASP.NET实现按拼音码模糊查询的方法

    整个过程分为两部分:生成拼音码字段.按拼音码进行模糊查询. 批量生成拼音码字段的实现: protected void Button1_Click1(object sender, EventArgs e) { string strSQL; strSQL = "select mc from TEST001"; IDataReader dr = dac.DataReaderQuery(strSQL); while (dr.Read()) { string mc=dr["mc&quo

随机推荐