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());

总结

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

相关文章

  • Mybatis中TypeHandler使用小结

    Mybatis中TypeHandler使用小结

    MyBatis的TypeHandler是一个强大的机制,它为我们提供了一种灵活的方式来处理Java类型与数据库类型之间的转换,本文主要介绍了Mybatis中TypeHandler使用小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • SpringBoot @Transactional事务不生效排查方式

    SpringBoot @Transactional事务不生效排查方式

    这篇文章主要介绍了SpringBoot @Transactional事务不生效排查方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java获取当前时间的时间戳方法总结

    Java获取当前时间的时间戳方法总结

    Java中获取时间戳的方式有很多种,下面这篇文章主要给大家介绍了关于Java获取当前时间的时间戳的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用java具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-06-06
  • 微服务Spring Cloud Alibaba 的介绍及主要功能详解

    微服务Spring Cloud Alibaba 的介绍及主要功能详解

    Spring Cloud 是一个通用的微服务框架,适合于多种环境下的开发,而 Spring Cloud Alibaba 则是为阿里巴巴技术栈量身定制的解决方案,本文给大家介绍Spring Cloud Alibaba 的介绍及主要功能,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 一文掌握spring cloud gateway(总结篇)

    一文掌握spring cloud gateway(总结篇)

    Spring Cloud Gateway是Spring Cloud的全新项目,该项目是基于Spring 5.0,Spring WebFlux和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式,本文通过实例代码总结介绍spring cloud gateway的相关知识,感兴趣的朋友一起看看吧
    2024-12-12
  • Mybatis配置之<typeAliases>别名配置元素解析

    Mybatis配置之<typeAliases>别名配置元素解析

    这篇文章主要介绍了Mybatis配置之<typeAliases>别名配置元素解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java并发编程之原子性、可见性、有序性

    java并发编程之原子性、可见性、有序性

    这篇文章主要给大家分享的是java并发编程的原子性、可见性和有序性,文章会具体举例说明,感兴趣的小伙伴可以参考一下文章的具体内容
    2021-09-09
  • 一文盘点五种最常用的Java加密算法

    一文盘点五种最常用的Java加密算法

    大家平时的工作中,可能也在很多地方用到了加密、解密,比如:支付功能等,所以本文为大家盘点了Java中五个常用的加密算法,希望对大家有所帮助
    2023-06-06
  • SpringMVC基于阻塞队列LinkedBlockingQueue的同步长轮询功能实现详解

    SpringMVC基于阻塞队列LinkedBlockingQueue的同步长轮询功能实现详解

    这篇文章主要介绍了SpringMVC基于阻塞队列LinkedBlockingQueue的同步长轮询功能实现详解,本文介绍的也是生产者消费者的一种实现,生产者不必是一个始终在执行的线程,它可以是一个接口,接受客户端的请求,向队列中插入消息,需要的朋友可以参考下
    2023-07-07
  • Java高级架构之FastDFS分布式文件集群详解

    Java高级架构之FastDFS分布式文件集群详解

    这篇文章主要介绍了Java高级架构之FastDFS分布式文件集群详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04

最新评论