iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >J-Hi查询过滤器的实现原理是什么
  • 831
分享到

J-Hi查询过滤器的实现原理是什么

2023-06-17 13:06:08 831人浏览 独家记忆
摘要

本篇文章给大家分享的是有关J-Hi查询过滤器的实现原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。J-Hi设计自己的查询过滤器而没有直接采用Hibernate的Crit

本篇文章给大家分享的是有关J-Hi查询过滤器的实现原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

J-Hi设计自己的查询过滤器而没有直接采用Hibernate的Criteria,是出于以下两个原因:

Hibernate的Criteria的功能是很强大,但在使用上还是比较繁琐。因此J-Hi想从用户使用的简单易用性上考虑设计一款查询过滤器。

J-Hi是一款跨ORM的多框架平台,不能拘泥一种只在Hibernate适用的产品。因此从设计角度考虑,J-Hi对于查询过滤功能必须要有一个中间层,从而使适应多ORM框架成为可能。

下面让我们来分析一下对于sql的查询具体应该考虑些什么

字段名 数据库表的字段名

操作符 比如大于、小于……。还会包括一些特殊的操作符如like和in

NO NO操作符是对操作符的补充,只有in和lik也会有no

值 对应字段类型的具体值,如字符串就要加引号,日期就要做转换

空值 空值是特殊值,表述形式如IS NULL或IS NOT NULL

关系符 两个查询条件之间的关系包括三种 AND OR NOT

优前级 通过左右括号来控制查询条件的优前级

8、通配符 如果是like操作符,在值的左侧或是右侧或两侧都可以通过%来控制值的匹配条件

对于java来说,无非就是考虑如何将上述的描述通过对象化的方式实现

J-Hi查询过滤器的实现原理是什么

先让我们用例说明:

Filter filter = FilterFactory.getSimpleFilter("name", "马超");

首先所有的过滤器都必须由FilterFactory(过滤器工厂)创建,参数依次为

name:POJO的属性名的字符串,可以通过.级联如(org.id);

value:待过滤的过滤值

oprtion:操作符,提供多种操作符,具体参见javadoc

relation:关系符,两个过滤器之间的关系,如AND / OR / NOT

过滤器可以通过addCondition方法累加过滤条件,例如:

filter.addCondition("name", "赵云", Filter.OPERATOR_EQ,Filter.RELATION_OR);

调用addCondtion()方法返回是条件累加后的Filter,因此你可以一直不断的调用addCondtion()方法,而不用每做一个过滤条件就创建一个新的Flter。

也可以通过addFilter方法将两个过滤器连接合并在一起

otherFilter.addFilter(filter, Filter.RELATION_AND);

因为一个过滤器会有多个查询条件,因此在通过addFilter()将两上过滤器进行合并时会对这两个过滤器自动加左右括号。对应sql为:

(otherFilter的查询条件) and (name like ‘%马超%’ or name = ‘赵云’ )

与addFilter对应,J-Hi还提供了removeFilter的功能,目的是通过目标过滤器中删除曾经加进来的子过滤器

otherFilter.remove(filter);

对字符串的操作,如果不加操作符那么系统默认采用like操作符,并且左右两侧均会加通配符,为了解决通配符的问题,J-Hi提供了

Filter likeFilter = FilterFactory.getLikeFilter("name", "马超", Filter.RELATION_AND, LikeFilter. LIKE_CONTROLER_LEFT );

对应的SQL语名为:name like ‘%马超’

如果对null或非null做过滤

FilterFactory.getSimpleFilter(propertyName, null, Filter.OPERATOR_EQ);      FilterFactory.getSimpleFilter(propertyName, null, Filter.OPERATOR_NOT_EQ);

对应的SQL语句分别为:propertyName IS NULL ; propertyName IS NOT NULL

如果做包含(IN)做过滤

FilterFactory.getInFilter(propertyName, coll);

其中coll是java.util.Collection接口的对象

除此以外,J-Hi还提供了排序

Sorter sorter = SorterFactory.getSimpleSort(propertyName, Sorter.ORDER_DESC);     Sorter.addSort(properyName1, Sorter.ORDER_ASC);

首先所有的排序器都必须由SorterFactory(过滤器工厂)创建,排序器可以通过addSort方法累加。也可以通过addSort方法将两个排序器连接合并在一起

具体的调用方法例如:

HiUserManager userMgr = (HiUserManager)springContextHolder.getBean(HiUser.class);      userMger.getObjects(filter,sorter);

总结:J-Hi的查询过滤器并没有象Hibernate的Criteria那么的强大,还不支持外连接与聚合。原因是这种大数据量的统计对ORM框架来实现在效率上并不是好的解决方案,再者实现上述功能增加了使用者操作的复杂度。荐于以上两个原因J-Hi的查询过滤器没有实现上述功能。

以上就是J-Hi查询过滤器的实现原理是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: J-Hi查询过滤器的实现原理是什么

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

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

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

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

下载Word文档
猜你喜欢
  • J-Hi查询过滤器的实现原理是什么
    本篇文章给大家分享的是有关J-Hi查询过滤器的实现原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。J-Hi设计自己的查询过滤器而没有直接采用Hibernate的Crit...
    99+
    2023-06-17
  • java过滤器的工作原理是什么
    Java过滤器的工作原理是基于Servlet规范中的过滤器接口(javax.servlet.Filter)来实现的。过滤器可以用于在...
    99+
    2023-08-26
    java
  • RocketMQ消息过滤与查询的实现
    消息过滤 RocketMQ分布式消息队列的消息过滤方式有别于其它MQ中间件,是在Consumer端订阅消息时再做消息过滤的。 RocketMQ这么做是还是在于其Producer端写入...
    99+
    2024-04-02
  • EntityFrameworkCore实现软删除与查询过滤器
    注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布后,功能可能存在变动。 继续探索Entity Frame...
    99+
    2024-04-02
  • 如何实现一个Laravel查询过滤器
    今天小编给大家分享一下如何实现一个Laravel查询过滤器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。上下文在撰写本文时,...
    99+
    2023-07-05
  • redis布隆过滤器的工作原理是什么
    Redis布隆过滤器是一种数据结构,用于快速判断一个元素是否存在于一个集合中。它基于位数组和多个哈希函数实现。 工作原理如下: 初...
    99+
    2024-04-09
    redis
  • bilateral filter双边滤波器的实现原理是什么
    本篇文章为大家展示了bilateral filter双边滤波器的实现原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 双边滤波(Bilateral filter)的原理双边滤波器之所以能够做...
    99+
    2023-06-06
  • Lucene查询原理是什么
    本篇内容介绍了“Lucene查询原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Lucene查询原理本节主要是一些Lucene的背景...
    99+
    2023-06-02
  • sql查询过滤重复数据的方法是什么
    在SQL中,可以使用DISTINCT关键字来过滤掉重复的数据。DISTINCT关键字用于从查询结果中选择唯一的记录,即去除重复的记录...
    99+
    2023-09-15
    sql
  • mybatis流查询的原理是什么
    MyBatis是一个基于Java的持久层框架,其流查询的原理是利用数据库的游标功能来一次性获取大量数据,减少内存的消耗和提高查询效率...
    99+
    2024-03-12
    mybatis
  • Redis BloomFilter布隆过滤器原理与实现
    目录Bloom Filter 概念Bloom Filter 原理缓存穿透Bloom Filter的缺点常见问题go语言实现Bloom Filter 概念 布隆过滤器(英语:Bloom...
    99+
    2024-04-02
  • MySQL子查询原理是什么
    这篇文章主要介绍“MySQL子查询原理是什么”,在日常操作中,相信很多人在MySQL子查询原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL子查询原理是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-29
  • 在Django中动态地过滤查询集的实现
    目录简介开始使用数据准备创建视图创建URL创建模板创建客户端脚本结语简介 要建立一个允许过滤和分页的列表页,你必须让一些独立的东西一起工作。Django的对象关系映射器(ORM)和内...
    99+
    2024-04-02
  • Spring mvc中内置编码过滤器的原理是什么
    Spring mvc中内置编码过滤器的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。web.xml 中 添加如下配置:<filter> ...
    99+
    2023-05-31
    springmvc 滤器
  • PostgreSQL的查询处理过程是什么
    这篇文章主要讲解了“PostgreSQL的查询处理过程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL的查询处理过程是什么”吧!一、...
    99+
    2024-04-02
  • Java布隆过滤器的原理和实现分析
    目录前言1. 预备知识1.1 哈希函数2. 布隆过滤器2.1 概念2.2 实现原理2.3 步骤2.4 实现前言 数组、链表、树等数据结构会存储元素的内容,一旦数据量过大,消耗的内存也...
    99+
    2022-11-13
    Java布隆过滤器 Java布隆过滤器原理 Java布隆过滤器实现
  • Vue的过滤器是什么
    这篇文章主要为大家展示了“Vue的过滤器是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue的过滤器是什么”这篇文章吧。1. 过滤器案例中使用到时间格式相关API1.1 对过滤器的理解定义...
    99+
    2023-06-29
  • 如何理解布隆过滤器算法的实现原理
    这篇文章主要讲解了“如何理解布隆过滤器算法的实现原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解布隆过滤器算法的实现原理”吧! 布隆过滤...
    99+
    2024-04-02
  • Java中的布隆过滤器原理实现和应用
    目录介绍实现初始化数据代码实现测试存在的数据不存在的数据介绍 本文全部代码地址 布隆过滤器是一种高效的数据结构,用于判断一个元素是否存在于一个集合中.它的主要优点是速度快,空间占用少...
    99+
    2023-05-17
    Java布隆过滤器使用 Java布隆过滤器实现
  • MySQL查询优化器的工作原理是什么
    本篇内容介绍了“MySQL查询优化器的工作原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  My...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作