千家信息网

Hibernate中Criteria基本查询的示例分析

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章给大家分享的是有关Hibernate中Criteria基本查询的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。要对资料库管理系统进行操作,最基本的就是使用S
千家信息网最后更新 2025年01月31日Hibernate中Criteria基本查询的示例分析

这篇文章给大家分享的是有关Hibernate中Criteria基本查询的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

要对资料库管理系统进行操作,最基本的就是使用SQL(Standard Query Language)语句,大部份的资料库都支援标准的SQL语句,然而也有一些特定于资料库的SQL语句,应用程式配合SQL语句进行资料库查询时,若使用到特定于资料库的SQL语句,程式本身会有相依于特定资料库的问题。

使用Hibernate时,即使您不了解SQL的使用与撰写,也可以使用它所提供的API来进行SQL语句查询, org.hibernate.Criteria对SQL进行封装,您可以从Java物件的观点来组合各种查询条件,由Hibernate自动为您产生 SQL语句,而不用特别管理SQL与资料库相依的问题,就某个程度的意涵来看,这就像是在编译时期也可以得到对SQL语法的检查与验证。

以最基本的Criteria基本查询来说,如果您想要查询某个物件所对应的资料表中所有的内容,您可以如下进行查询:

Criteria criteria = session.createCriteria(User.class);  List users = criteria.list();            for(Iterator it = users.iterator(); it.hasNext(); ) {      User user = (User) it.next();      System.out.println(user.getId() +                               " \t " + user.getName() +                            "/" + user.getAge());      }

Criteria建立后,若不给予任何的条件,预设是查询物件所对应表格之所有资料,如果您执行以上的程式片段,并于设定档中设定了了Hibernate的"show_sql"属性,则可以在主控下看到以下的SQL语句之产生:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_

org.hibernate.Criteria实际上是个条件附加的容器,如果想要设定查询条件,则要使用 org.hibernate.criterion.Restrictions的各种静态方法传回 org.hibernate.criterion.Criteria实例,传回的每个org.hibernate.criterion.Criteria 实例代表着一个条件,您要使用org.hibernate.Criteria的add()方法加入这些条件实例,例如查询" age"大于20且小于40的资料:

Criteria criteria = session.createCriteria(User.class);  criteria.add(Restrictions.gt("age", new Integer(20)));  criteria.add(Restrictions.lt("age", new Integer(40)));  List users = criteria.list();            for(Iterator it = users.iterator(); it.hasNext(); ) {      User user = (User) it.next();      System.out.println(user.getId() +                                " \t " + user.getName() +                               "/" + user.getAge());      }

Restrictions的gt()方法表示大于(great than)的条件,而lt表示小于(less than)的条件,执行以上程式片段,观察所产生的SQL语句,将使用where与and子句产来完成SQL的条件查询:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.age>? and this_.age< ?

使用add()方法加入条件时,预设是使用and来组合条件,如果要用or的方式来组合条件,则可以使用Restrictions.or()方法,例如结合age等于(eq)20或(or)age为空(isNull)的条件:

Criteria criteria = session.createCriteria(User.class);  criteria.add(Restrictions.or(                     Restrictions.eq("age", new Integer(20)),                     Restrictions.isNull("age")                 ));  List users = criteria.list();

观察所产生的SQL语句,将使用where与or子句完成SQL的条件查询:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where (this_.age=? or this_.age is null)

您也可以使用Restrictions.like()方法来进行SQL中like子句的功能,例如查询"name"中名称为"just"开头的资料:

Criteria criteria = session.createCriteria(User.class);  criteria.add(Restrictions.like("name", "just%"));  List users = criteria.list();

观察所产生的SQL语句如下:

Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.name like ?

Restrictions的几个常用限定查询方法如下表所示:

方法说明
Restrictions.eq等于
Restrictions.allEq使用Map,使用key/value进行多个等于的比对
Restrictions.gt大于 >
Restrictions.ge大于等于 >=
Restrictions.lt小于 <
Restrictions.le小于等于 < =
Restrictions.between对应SQL的BETWEEN子句
Restrictions.like对应SQL的LIKE子句
Restrictions.in对应SQL的in子句
Restrictions.andand关系
Restrictions.oror关系
Restrictions.sqlRestrictionSQL限定查询

Criteria基本查询差不多就是这样。

感谢各位的阅读!关于"Hibernate中Criteria基本查询的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

查询 条件 语句 资料 方法 资料库 子句 程式 内容 实例 物件 观察所 组合 观察 示例 分析 就是 更多 片段 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库和数据库实例概念 江苏大型软件开发创新服务 求生之路不显示别人服务器 轻量服务器搭建socks5脚本 数据库中给列创建主键索引 视频展示平台服务器租用 二零二一年招聘软件开发旺季 查看samba服务器ip地址 浙江智能套料软件开发商 我的世界服务器军团推荐 服务器内存超频多少合适 ibm服务器需要授权吗 软件开发结构构架书 在线软件开发赚钱 计算机网络技术可以插本吗 上海智慧城管软件开发专业制作 软件老是显示服务器错误 铁路站段网络安全专项检查 数据库键盘输入获取 国际生物医学数据库 ie代理服务器是灰色的 我的世界服务器 挂 pad软件开发公司 蓝思网络技术有限公司招聘 中华总工会网络安全工程师培训 语音软件开发包 杭州煎饼网络技术有限公司总监 虹口区信息软件开发哪个好 是否值得去华为做软件开发 武汉市网络安全协会主席
0