1.Criteria介绍

Criteria与Session绑定,其生命周期跟随着Session结束而结束,使用Criteria时进行查询时,每次都要于执行时期动态建立物件,并加入各种查询条件,随着Session的回收,Criteria也跟着回收。

org.hibernate.Criteria实际上是个条件附加的容器,如果想要设定查询条件,则要使用org.hibernate.criterion.Restrictions的各种静态方法传回org.hibernate.criterion.Criteria实例,传回的每个org.hibernate.criterion.Criteria实例代表着一个条件。

2.Criterion介绍

Criterion 是 Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来添加查询条件。Criterion 的实例可以通过 Restrictions 工具类来创建,Restrictions 提供了大量的静态方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件。除此之外, Restrictions 还提供了方法来创建 conjunction 和disjunction 实例,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合。

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

Restrictions.eq --> equal,等于.

Restrictions.allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq 的效果

Restrictions.gt --> great-than > 大于

Restrictions.ge --> great-equal >= 大于等于

Restrictions.lt --> less-than, < 小于

Restrictions.le --> less-equal <= 小于等于

Restrictions.between --> 对应SQL的between子句

Restrictions.like --> 对应SQL的LIKE子句

Restrictions.in --> 对应SQL的in子句

Restrictions.and --> and 关系

Restrictions.or --> or 关系

Restrictions.isNull --> 判断属性是否为空,为空则返回true  相当于SQL的 is null

Restrictions.isNotNull --> 与isNull相反     相当于SQL的 is not null

Restrictions.sqlRestriction --> SQL限定的查询

Order.asc --> 根据传入的字段进行升序排序

Order.desc --> 根据传入的字段进行降序排序

MatchMode.EXACT --> 字符串精确匹配.相当于"like 'value'"

MatchMode.ANYWHERE --> 字符串在中间匹配.相当于"like '%value%'"

MatchMode.START --> 字符串在最前面的位置.相当于"like 'value%'"

MatchMode.END --> 字符串在最后面的位置.相当于"like '%value'"

4.实例应用

(1)多个条件("与"的方式进行查询)

//利用hibernate对数据库中的StudentEntity表进行查询,将查询结果放入一个集合返回
public static List<StudentEntity> queryStudentByUserInput(String studentname, String realAddress, String riskrank){
//1.创建一个session对象
Session session1=HibernateTools.getSession();
//2.通过session的createCriteria创建一个Criteria 对象
Criteria criteria=session1.createCriteria(StudentEntity.class);
//3. Criteria.add 增加约束(连续加入两个条件,达到"与"的效果),Restrictions.like()方法中的参数1为数据库表的实体类的成员变量,参数2为筛选内容,参数3为匹配方式
criteria.add(Restrictions.like("name",studentname,MatchMode.ANYWHERE))
.add(Restrictions.like("address","天",MatchMode.ANYWHERE));
//4.调用list()方法返回查询结果的集合
List<StudentEntity> studentinfolist=criteria.list();
//开启一个新的事务Transaction
session1.beginTransaction();
//提交事务,此处才是真正与数据库交互的语句
session1.getTransaction().commit();
HibernateTools.closeSession();
return studentinfolist;
}

(2)多个条件("或"的方式进行查询)

//利用hibernate对数据库中的StudentEntity表进行查询,将查询结果放入一个集合返回
public static List<StudentEntity> queryStudentByUserInput(String studentname, String realAddress, String riskrank){
//1.创建一个session对象
Session session1=HibernateTools.getSession();
//2.通过session的createCriteria创建一个Criteria 对象
Criteria criteria=session1.createCriteria(StudentEntity.class);
//3. Criteria.add 增加约束(连续加入两个条件,达到"或"的效果)[筛选条件为:name属性中有"l"的,或address属性中有"天"或"金"]
criteria.add(Restrictions.or(Restrictions.like("name", "l",MatchMode.ANYWHERE),
Restrictions.or(Restrictions.like("address", "天",MatchMode.ANYWHERE),Restrictions.like("address", "金",MatchMode.ANYWHERE))));
//4.调用list()方法返回查询结果的集合
List<StudentEntity> studentinfolist=criteria.list();
//开启一个新的事务Transaction
session1.beginTransaction();
//提交事务,此处才是真正与数据库交互的语句
session1.getTransaction().commit();
HibernateTools.closeSession();
return studentinfolist;
}

参考文献:https://my.oschina.net/u/2266102/blog/425601(极具参考价值)

Hibernate 查询数据库中的数据的更多相关文章

  1. 通过查询数据库中的数据匹配在页面上:(set单条数据属性是在页面上的显示与foreach的不同) 通过ID修改提取位置表信息

    ACTION   OpenModifyExtractPositionById // set单条数据属性 /* * 通过ID修改提取位置表信息 */ public String OpenModifyEx ...

  2. JDBC查询数据库中的数据

    只用JDBC技术查询表中的全部内容时,需要使用查询全部的SQL语句,把查询结果放到List集合中. package qddx.JDBC; import java.util.*; import java ...

  3. MySQL查询数据库中所有数据表的数据条数

    select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = '数据库名称' order by ta ...

  4. oracle 查询数据库中 有数据的表

    select table_name from ALL_TABLES where TABLESPACE_NAME='xxx' and NUM_ROWS > 0 order by  table_na ...

  5. 怎样在C#中从数据库中读取数据(数据读取器)

    实现在C#中通过语句,查询数据库中的数据 SqlConnection con = null; //创建SqlConnection 的对象 try    //try里面放可能出现错误的代码        ...

  6. EasyUI动态显示后台数据库中的数据

    最近在完成一个项目,采用SSM框架搭建完成,前端使用EasyUI搭建页面: 其中涉及到一个查询显示功能:查询数据库中的数据,动态显示在页面之中,刚开始这部分十分有疑问,所以虚心向同学学习,现总结至博客 ...

  7. 记录使用Hibernate查询bean中字段和数据库列类型不匹配问题

    今天在工程中遇到Hibernate查询的时候,bean中的字段和数据库中的字段不符合(bean中有pageTime字段,但是数据库中没有此列)报错问题. 具体问题环境: 在auto_off表中,off ...

  8. 在数据库中添加数据以后,使用Mybatis进行查询结果为空

    在数据库中添加数据以后,使用Mybatis进行查询结果为空,这是因为数据库中添加数据忘记commit的缘故.

  9. 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表

    最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...

随机推荐

  1. 高性能mysql第三版(文摘)

    第1章 mysql架构与历史 1.1处理和存储相分离,用户可以选择合适的存储引擎 1.2并发控制 表锁:开销小 行级锁:开销大 1.3事务 acid特性:原子性,一致性,隔离性,持久性 1.4 多版本 ...

  2. Linux 基础教程 36-查看系统性能

    uptime     uptime命令功能比较简单,主要功能如下所示: 查看服务器的开机时长 查看CPU负载 基本用法 uptime 用法示例 [root@localhost ~]# uptime 1 ...

  3. Altera FPGA 开启引脚片上上拉电阻功能

    本博文以矩阵键盘实验为例,介绍了如何开启FPGA管脚的片上上拉电阻. Cyclone IV E FPGA的通用输入输出管脚都支持内部弱上拉电阻,但是时钟输入脚不支持.所以,当需要上拉电阻的信号(如本例 ...

  4. python面试题之如何计算一个字符串的长度

    在我们想计算长度的字符串上调用函数len()即可 >>> len('hhhhhhhhjg') 10 所属网站分类: 面试经典 > python 作者:外星人入侵 链接:http ...

  5. nginx 托管.net core的service文件

    在 /etc/systemd/system/ 中新建一个服务文件site1.service vim /etc/systemd/system/site1.service [Unit] Descripti ...

  6. RoadFlow ASP.NET Core工作流配置文件说明

    工作流配置文件及说明如下: { "Logging": { "LogLevel": { "Default": "Warning&qu ...

  7. AT指令框架的实现

    AT指令概述 AT指令是应用于终端设备与PC应用之间的连接与通信的指令.AT 即Attention.每个AT命令行中只能包含一条AT指令:对于AT指令的发送,除AT两个字符外,最多可以接收1056个字 ...

  8. Js 事件详解

    1.事件流 1.1 事件流 描述的是在页面中接受事件的顺序 1.2 事件冒泡 由最具体的元素接收,然后逐级向上传播最不具体的元素的节点(文档) 1.3 事件捕获 最不具体的节点先接收事件,而最具体的节 ...

  9. Android 与 iOS 推送 Push Notification 的区别

    Android 安卓使用 GCM (Google Cloud Messaging) 接收推送,然后应用根据实际情况决定做什么反应,比如显示一个 Notification. 所以安卓下,推送 Push ...

  10. Http协议中关于Content-Length的解读【出现坑爹的视频中断】

    最近公司的视频设备在下载视频的时候,出现了很诡异的现象,在新旧服务器一样的tpp包,下载下来后,新服务器无法解析,旧服务器没问题.且tpp包并没有改动. 后面找了挺久,终于发现了视频下载的时候是断点续 ...