我的编程空间,编程开发者的网络收藏夹
学习永远不晚

DetachedCriteria与Criteria的用方有哪些不同

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

DetachedCriteria与Criteria的用方有哪些不同

这期内容当中小编将会给大家带来有关DetachedCriteria与Criteria的用方有哪些不同,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询。

比如,我记得在Facebook中可以选择高级查询条件,这个就是个动态的查询了塞,我们无法预知使用多少个查询,直接书写死了在我们的Dao层显然是不服和我们的意思的塞

针对这种需求,对于分层应用程序来说,Web层需要传递一个查询的条件列表给业务层对象,业务层对象获得这个条件列表之后,然后依次取出条件,构造查询语句。这里的一个难点是条件列表用什么来构造?传统上使用Map,但是这种方式缺陷很大,Map可以传递的信息非常有限,只能传递name和value,无法传递究竟要做怎样的条件运算,究竟是大于,小于,like,还是其它的什么,业务层对象必须确切掌握每条entry的隐含条件。因此一旦隐含条件改变,业务层对象的查询构造算法必须相应修改,但是这种查询条件的改变是隐式约定的,而不是程序代码约束的,因此非常容易出错。

DetachedCriteria可以解决这个问题,即在web层,程序员使用DetachedCriteria来构造查询条件,然后将这个 DetachedCriteria作为方法调用参数传递给业务层对象。而业务层对象获得DetachedCriteria之后,可以在session范围内直接构造Criteria,进行查询。就此,查询语句的构造完全被搬离到web层实现,而业务层则只负责完成持久化和查询的封装即可,与查询条件构造完全解耦,非常完美!

Criteria 和 DetachedCriteria 的主要区别

在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的,而 DetachedCriteria 是离线的,创建时无需Session .

DetachedCriteria的创建

DetachedCriteria 提供了 2 个静态方法 ,进行DetachedCriteria 实例的创建。
forClass(Class)
forEntityName(Name)

Spring 的框架提供了对于离线查询的支持,非常的简单的使用那些方法

Spring 的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结果。Criteria的子类就是 DetachedCriteria 我们可以简单的使用就好了。

使用到了这些我们就不得不说 Restrictions

是产生查询条件的工具类。Restrictions表达式如下
HQL运算符 QBC运算符 含义
= Restrictions.eq() 等于equal
<> Restrictions.ne() 不等于 not equal

 Restrictions.gt() 大于greater than = Restrictions.ge() 大于等于 greater than or equal < Restrictions.lt() 小于less than <= Restrictions.le() 小 于 等 于 less than or equal is null Restrictions.isnull() 等于空值 is not null Restrictions.isNotNull() 非空值 like Restrictions.like() 字符串模式匹配 and Restrictions.and() 逻辑与 and Restrictions.conjunction() 逻辑与 or Restrictions.or() 逻辑或 or Restrictions.disjunction() 逻辑或 not Restrictions.not() 逻辑非 in(列表) Restrictions.in() 等于列表中的某一个值 not in(列表) Restrictions.not(Restrictions.in()) 不等于列表中任意一个值 between x and y Restrictions.between() 闭区间 xy中的任意值 not between x and y Restrictions.not(Restrictions..between()) 小于值X 或者大于值y

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

DetachedCriteria与Criteria的用方有哪些不同

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

下载Word文档

猜你喜欢

DetachedCriteria与Criteria的用方有哪些不同

这期内容当中小编将会给大家带来有关DetachedCriteria与Criteria的用方有哪些不同,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在常规的Web编程中,有大量的动态条件查询,即用户在网页上
2023-05-31

Log4j与Log4j2有哪些不同的地方

这篇文章将为大家详细讲解有关Log4j与Log4j2有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了
2023-05-31

PipedReader与PipedWriter有哪些不同的地方

这篇文章将为大家详细讲解有关PipedReader与PipedWriter有哪些不同的地方,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PipedWriter与PipedReader的区别1
2023-05-31

classpath与path有哪些不同的地方

这期内容当中小编将会给大家带来有关classpath与path有哪些不同的地方,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。详解path和classpath的区别path的作用path是系统用来指定可执行
2023-05-31

PipedInputStream与PipedOutputStream有哪些不同的地方

今天就跟大家聊聊有关PipedInputStream与PipedOutputStream有哪些不同的地方,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java 管道介绍在java中,
2023-05-31

ConcurrentHashMap与HashMap有哪些不同地方

本篇文章为大家展示了ConcurrentHashMap与HashMap有哪些不同地方,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。HashMap本质是数组加链表,根据key取得hash值,然后计算出
2023-05-31

nodejs与swoole的不同点有哪些

这篇“nodejs与swoole的不同点有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nodejs与swoole的不同
2023-06-29

Java与JavaScript有哪些不同点

这篇文章主要为大家展示了“Java与JavaScript有哪些不同点”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java与JavaScript有哪些不同点”这篇文章吧。对Java与JavaSc
2023-06-03

Java与C#的不同之处有哪些

Java与C#的不同之处有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、关于类的理解2、重载3、访问器(Accessors——Getters)和修改器(Mutato
2023-06-17

Kotlin语法 与 Java语法有哪些不同的地方

这篇文章给大家介绍Kotlin语法 与 Java语法有哪些不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Kotlin 与 Java基本语法对比Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的
2023-05-31

php与c++不同之处有哪些

php与c++不同之处有:1、PHP是在服务器端执行的脚本语言,而C++是C语言的继承;2、PHP中不支持C++中的重载;3、关于abstract和interface的使用不同;4、PHP是弱类型语言,所以PHP的多态性不像C++明显等等。
2018-04-18

LUA与PHP在WEB应用的性能有哪些不同点

这篇文章主要介绍LUA与PHP在WEB应用的性能有哪些不同点,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!解析LUA与PHP在WEB应用的性能对比是本文要介绍的内容,这几天用在WEB开发的LUA框架已经完成,框架中已
2023-06-15

Python中figure与axies绘图有哪些不同

这篇文章主要介绍了Python中figure与axies绘图有哪些不同,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录