iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springdata jpa如何使用Example快速实现动态查询功能
  • 627
分享到

springdata jpa如何使用Example快速实现动态查询功能

2023-06-25 16:06:57 627人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关springdata jpa如何使用Example快速实现动态查询功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Example官方介绍Query by Example (Q

这篇文章将为大家详细讲解有关springdata jpa如何使用Example快速实现动态查询功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    Example官方介绍

    Query by Example (QBE) is a user-friendly querying technique with a simple interface. It allows dynamic query creation and does not require to write queries containing field names. In fact, Query by Example does not require to write queries using store-specific query languages at all.

    谷歌翻译

    按例查询(QBE)是一种用户界面友好的查询技术。 它允许动态创建查询,并且不需要编写包含字段名称的查询。 实际上,按示例查询不需要使用特定的数据库的查询语言来编写查询语句。

    Example api的组成

    • Probe:含有对应字段的实例对象。

    • ExampleMatcher:ExampleMatcher携带有关如何匹配特定字段的详细信息,相当于匹配条件。

    • Example:由Probe和ExampleMatcher组成,用于查询。

    限制

    • 属性不支持嵌套或者分组约束,比如这样的查询 firstname = ?0 or (firstname = ?1 and lastname = ?2)

    • 灵活匹配只支持字符串类型,其他类型只支持精确匹配

    Limitations

    No support for nested/grouped property constraints like firstname = ?0 or (firstname = ?1 and lastname = ?2)

    Only supports starts/contains/ends/regex matching for strings and exact matching for other property types

    使用

    创建实体映射:

    @Entity@Table(name="t_user")@Data@AllArgsConstructor@NoArgsConstructor@ToStringpublic class User {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    @Column(name="username")    private String username;    @Column(name="passWord")    private String password;    @Column(name="email")    private String email;    @Column(name="phone")    private String phone;    @Column(name="address")    private String address;}

    测试查询

    @Testpublic void contextLoads() {    User user = new User();    user.setUsername("admin");    Example<User> example = Example.of(user);    List<User> list = userRepository.findAll(example);    System.out.println(list);}

    打印的sql语句如下:

    Hibernate:     select        user0_.id as id1_0_,        user0_.address as address2_0_,        user0_.email as email3_0_,        user0_.password as password4_0_,        user0_.phone as phone5_0_,        user0_.username as username6_0_     from        t_user user0_     where        user0_.username=?

    可以发现,试用Example查询,默认情况下会忽略空值,官方文档也有说明:

    This is a simple domain object. You can use it to create an Example. By default, fields having null values are ignored, and strings are matched using the store specific defaults. Examples can be built by either using the of factory method or by using ExampleMatcher. Example is immutable.

    在上面的测试之中,我们只是只是定义了Probe而没有ExampleMatcher,是因为默认会不传时会使用默认的匹配器。点进方法可以看到下面的代码:

    static <T> Example<T> of(T probe) {    return new TypedExample(probe, ExampleMatcher.matching());}static ExampleMatcher matching() {    return matchingAll();}static ExampleMatcher matchingAll() {    return (new TypedExampleMatcher()).withMode(ExampleMatcher.MatchMode.ALL);}

    自定匹配器规则

    @Testpublic void contextLoads() {    User user = new User();    user.setUsername("y");    user.setAddress("sh");    user.setPassword("admin");    ExampleMatcher matcher = ExampleMatcher.matching()            .withMatcher("username", ExampleMatcher.GenericPropertyMatchers.startsWith())//模糊查询匹配开头,即{username}%            .withMatcher("address" ,ExampleMatcher.GenericPropertyMatchers.contains())//全部模糊查询,即%{address}%            .withIgnorePaths("password");//忽略字段,即不管password是什么值都不加入查询条件    Example<User> example = Example.of(user ,matcher);    List<User> list = userRepository.findAll(example);    System.out.println(list);}

    打印的sql语句如下:

    select    user0_.id as id1_0_,    user0_.address as address2_0_,    user0_.email as email3_0_,    user0_.password as password4_0_,    user0_.phone as phone5_0_,    user0_.username as username6_0_ from    t_user user0_ where    (        user0_.username like ?    )     and (        user0_.address like ?    )

    参数如下:

    2018-03-24 13:26:57.425 TRACE 5880 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [y%]
    2018-03-24 13:26:57.425 TRACE 5880 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - [%sh%]

    补充

    官方创建ExampleMatcher例子(1.8 lambda)

    ExampleMatcher matcher = ExampleMatcher.matching()  .withMatcher("firstname", match -> match.endsWith())  .withMatcher("firstname", match -> match.startsWith());}

    StringMatcher 参数

    Matching生成的语句说明
    DEFAULT (case-sensitive)firstname = ?0默认(大小写敏感)
    DEFAULT (case-insensitive)LOWER(firstname) = LOWER(?0)默认(忽略大小写)
    EXACT (case-sensitive)firstname = ?0精确匹配(大小写敏感)
    EXACT (case-insensitive)LOWER(firstname) = LOWER(?0)精确匹配(忽略大小写)
    STARTING (case-sensitive)firstname like ?0 + ‘%'前缀匹配(大小写敏感)
    STARTING (case-insensitive)LOWER(firstname) like LOWER(?0) + ‘%'前缀匹配(忽略大小写)
    ENDING (case-sensitive)firstname like ‘%' + ?0后缀匹配(大小写敏感)
    ENDING (case-insensitive)LOWER(firstname) like ‘%' + LOWER(?0)后缀匹配(忽略大小写)
    CONTAINING (case-sensitive)firstname like ‘%' + ?0 + ‘%'模糊查询(大小写敏感)
    CONTAINING (case-insensitive)LOWER(firstname) like ‘%' + LOWER(?0) + ‘%'模糊查询(忽略大小写)

    说明:

    在默认情况下(没有调用withIgnoreCase())都是大小写敏感的。

    api之中还有个regex,但是我在mysql下测试报错,不了解具体作用。

    关于“springdata jpa如何使用Example快速实现动态查询功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    --结束END--

    本文标题: springdata jpa如何使用Example快速实现动态查询功能

    本文链接: https://www.lsjlt.com/news/305850.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • springdata jpa使用Example快速实现动态查询功能
      目录Example官方介绍Example api的组成限制使用测试查询自定匹配器规则补充官方创建ExampleMatcher例子(1.8 lambda)StringMatcher 参...
      99+
      2024-04-02
    • springdata jpa如何使用Example快速实现动态查询功能
      这篇文章将为大家详细讲解有关springdata jpa如何使用Example快速实现动态查询功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Example官方介绍Query by Example (Q...
      99+
      2023-06-25
    • 使用JPA+querydsl如何实现多条件动态查询
      目录JPAquerydsl多条件动态查询介绍一下querydsl看源码springdataJPA和querydsl什么是SpringDataJPA?什么是QueryDSL?@Mapp...
      99+
      2024-04-02
    • Superset实现动态SQL查询功能
      使用自定义参数方式实现 superset 实现SQL动态查询 1、启用参数:config.py 设置"ENABLE_TEMPLATE_PROCESSING": True 2、当前su...
      99+
      2024-04-02
    • 怎么使用JPA+querydsl实现多条件动态查询
      这篇文章将为大家详细讲解有关怎么使用JPA+querydsl实现多条件动态查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA querydsl多条件动态查询相信很多人在做订单管理的时候会用到多条件的...
      99+
      2023-06-29
    • C#如何实现快速查询文件
      今天小编给大家分享一下C#如何实现快速查询文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。相信使用过Everything的...
      99+
      2023-07-02
    • 如何使用PHP实现快速的直播功能?
      随着直播行业的不断发展,越来越多的企业开始尝试直播营销。而对于程序员来说,使用PHP实现直播功能是一个不错的选择。本文将介绍如何使用PHP实现快速的直播功能。了解直播的基本原理在开始使用PHP实现直播功能之前,我们首先应该了解直播的基本原理...
      99+
      2023-05-22
      PHP 直播功能 快速实现
    • 使用JVM 如何实现动态分派功能
      这期内容当中小编将会给大家带来有关使用JVM 如何实现动态分派功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 动态分派一个体现是重写(override)。下面的代码,运行结果很明显。public ...
      99+
      2023-05-31
      jvm 动态分派
    • 微信小程序如何实现快递查询功能
      这篇文章给大家分享的是有关微信小程序如何实现快递查询功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信小程序 快递查询功能:产品需求,准备api,代码编写。 第一步...
      99+
      2024-04-02
    • 如何使用mybatis-plus实现分页查询功能
      今天就跟大家聊聊有关使用mybatis-plus如何实现分页查询功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 引入依赖...
      99+
      2024-04-02
    • 如何使用jpa实现动态插入与修改
      这篇文章给大家分享的是有关如何使用jpa实现动态插入与修改的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。jpa之动态插入与修改(重写save)1.动态插入@Data@Entity@DynamicInsert@Ta...
      99+
      2023-06-25
    • Jpa Specification如何实现and和or同时使用查询
      目录同时使用and和or的查询JPA 动态查询之AND、OR结合使用问题描述代码示例同时使用and和or的查询 UserServiceImpl 类,service实现类 impo...
      99+
      2024-04-02
    • SpringBoot项目中使用JPA如何实现表关联查询
      SpringBoot项目中使用JPA如何实现表关联查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是FloorC...
      99+
      2023-05-31
      springboot jpa 表关联查询
    • linq动态条件查询如何使用
      本篇内容主要讲解“linq动态条件查询如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linq动态条件查询如何使用”吧!1,linq动态条件之构造表达式树private Expr...
      99+
      2023-06-17
    • 使用Spring Data JPA如何实现自定义规则查询
      使用Spring Data JPA如何实现自定义规则查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、常用规则速查1   And    并且2   Or    &nbs...
      99+
      2023-05-31
      spring data jpa
    • Springboot项目如何快速实现Aop功能
      这篇文章主要讲解了“Springboot项目如何快速实现Aop功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Springboot项目如何快速实现Aop功能”吧!依赖引入Springboo...
      99+
      2023-07-05
    • ajax如何实现分页查询功能
      小编给大家分享一下ajax如何实现分页查询功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ajax分页查询功能的具体代码,具体内容如下显示的效果如下:实现效果的...
      99+
      2023-06-08
    • CSS3如何实现特性查询功能
      这篇文章主要介绍了CSS3如何实现特性查询功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们已经知道使用媒体查询(Media Query...
      99+
      2024-04-02
    • thinkphp5如何实现查询计数功能
      这篇“thinkphp5如何实现查询计数功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp5如何实现查询计数...
      99+
      2023-07-05
    • Node.js如何实现添加查询功能
      这篇文章主要介绍“Node.js如何实现添加查询功能”,在日常操作中,相信很多人在Node.js如何实现添加查询功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.js如何实现添加查询功能”的疑惑有所...
      99+
      2023-07-04
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作