mybatis Example Criteria like 模糊查询问题

 更新时间:2023年02月27日 14:26:30   作者:Chandler丶  
这篇文章主要介绍了mybatis Example Criteria like 模糊查询问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

用Mybatis代码生成工具会产生很多个XXXExample类,这些类的作用是什么?

查阅了很多资料,在这里总结归纳一下

简介

XXXExample类用于构造复杂的筛选条件

它包含一个名为Criteria的内部静态类,它包含将在where子句中一起结合的条件列表。

Criteria类的集合允许您生成几乎无限类型的where子句。

可以使用createCriteria方法或or方法创建Criteria对象。

当使用createCriteria方法创建第一个Criteria对象时,它会自动添加到Criteria对象列表中 -

如果不需要其他子句,则可以轻松编写简单的Where子句。使用or方法时,Criteria类将添加到所有实例的列表中。

官方建议仅使用or方法创建Criteria类。这种方法可以使代码更具可读性。

Criteria类

Criteria内部类包括每个字段的andXXX方法,以及每个标准SQL谓词

包括:

字段方法含义
IS NULL表示相关列必须为NULL
IS NOT NULL表示相关列不能为NULL
=(等于)表示相关列必须等于方法调用中传入的值
<>(不等于)表示相关列不能等于方法调用中传入的值
>(大于)表示相关列必须大于方法调用中传入的值
> =(大于或等于)表示相关列必须大于或等于方法调用中传入的值
<(小于)表示相关列必须小于方法调用中传入的值
<=(小于或等于)表示相关列必须小于或等于方法调用中传入的值
LIKE意味着相关列必须“类似”方法调用中传入的值。代码不会添加所需的’%’,您必须自己在方法调用中传入的值中设置该值。
NOT LIKE意味着相关列必须“不喜欢”方法调用中传入的值。代码不会添加所需的’%’,您必须自己在方法调用中传入的值中设置该值。
BETWEEN意味着相关列必须“在”方法调用中传入的两个值之间。
NOT BETWEEN意味着相关列必须“不在”方法调用中传入的两个值之间。
IN表示相关列必须是方法调用中传入的值列表之一。
NOT IN表示相关列不能是方法调用中传入的值列表之一。

简单实例

生成简单的WHERE子句

  TestTableExample example = new TestTableExample();
  example.createCriteria().andField1EqualTo(5);

或者

 TestTableExample example = new TestTableExample();
  example.or().andField1EqualTo(5);

实际上动态生成的where子句是这样

where field1 = 5

复杂查询

TestTableExample example = new TestTableExample();

  example.or()
    .andField1EqualTo(5)
    .andField2IsNull();

  example.or()
    .andField3NotEqualTo(9)
    .andField4IsNotNull();

  List<Integer> field5Values = new ArrayList<Integer>();
  field5Values.add(8);
  field5Values.add(11);
  field5Values.add(14);
  field5Values.add(22);

  example.or()
    .andField5In(field5Values);

  example.or()
    .andField6Between(3, 7);

实际上动态生成的where子句是这样

     where (field1 = 5 and field2 is null)
     or (field3 <> 9 and field4 is not null)
     or (field5 in (8, 11, 14, 22))
     or (field6 between 3 and 7)

可以通过在任何示例类上调用setDistinct(true)方法来强制查询为DISTINCT。

模糊查询实战

自己根据理解配合PageHelper做了一个简单的多条件模糊查询加深理解

具体实现如下,支持多个字段的同时搜索

        PageHelper.startPage(pageNum,pageSize);
        TbBrandExample example = new TbBrandExample();
        TbBrandExample.Criteria criteria = example.createCriteria();
        if (tbBrand != null) {
            if (tbBrand.getName() != null && tbBrand.getName().length()>0) {
                criteria.andNameLike("%"+tbBrand.getName()+"%");
            }
            if (tbBrand.getFirstChar() != null && tbBrand.getFirstChar().length()>0) {
                criteria.andFirstCharLike("%"+tbBrand.getFirstChar()+"%");
            }
        }
        Page<TbBrand> page = (Page<TbBrand>) brandMapper.selectByExample(example);
        return new PageResult((int) page.getTotal(),page.getResult());

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot2.X国际化文件编写配置

    Spring Boot2.X国际化文件编写配置

    这篇文章主要介绍了Spring Boot2.X国际化文件编写配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • binarySearch在java的查找实例用法

    binarySearch在java的查找实例用法

    在本篇文章里小编给大家整理的是一篇关于binarySearch在java的查找实例用法,对此有兴趣的朋友们可以学习参考下。
    2021-02-02
  • mybatisplus逻辑删除基本实现和坑点解决

    mybatisplus逻辑删除基本实现和坑点解决

    这篇文章主要介绍了mybatisplus逻辑删除基本实现和坑点解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java多线程Synchronized实现可见性原理解析

    java多线程Synchronized实现可见性原理解析

    这篇文章主要介绍了java多线程Synchronized实现可见性原理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 分析ABA问题的本质及其解决办法

    分析ABA问题的本质及其解决办法

    CAS的全称是compare and swap,它是java同步类的基础,java.util.concurrent中的同步类基本上都是使用CAS来实现其原子性的。本文将介绍ABA问题的本质及其解决办法。
    2021-06-06
  • ThreadPoolExecutor核心线程数和RocketMQ消费线程调整详解

    ThreadPoolExecutor核心线程数和RocketMQ消费线程调整详解

    这篇文章主要介绍了ThreadPoolExecutor核心线程数和RocketMQ消费线程调整详解,Rocketmq 消费者在高峰期希望手动减少消费线程数,通过DefaultMQPushConsumer.updateCorePoolSize方法可以调用内部的setCorePoolSize设置多线程核心线程数,需要的朋友可以参考下
    2023-10-10
  • java中a=a+1和a+=1的区别介绍

    java中a=a+1和a+=1的区别介绍

    这篇文章主要介绍了java中a=a+1和a+=1的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java怎样动态获取泛型参数的类型

    java怎样动态获取泛型参数的类型

    在Java中,泛型信息在编译时会被擦除,但可以通过特定API获取运行时的泛型参数类型,主要API包括Class的getGenericSuperclass()和getGenericInterfaces()方法,以及ParameterizedType的getActualTypeArguments()方法
    2024-09-09
  • 详解Java中的BigDecimal

    详解Java中的BigDecimal

    这篇文章主要介绍了Java中的BigDecimal的使用方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-09-09
  • Java实现克鲁斯卡尔算法的示例代码

    Java实现克鲁斯卡尔算法的示例代码

    克鲁斯卡尔算法是一种用于求解最小生成树问题的贪心算法。这篇文章主要为大家详细介绍了Java实现克鲁斯卡尔算法的方法,需要的可以参考一下
    2023-04-04

最新评论