Hibernate中利用Criteria进行数据库表数据的增加查询。

JavaWeb:Criteria类添加或条件 Criteria类添加或条件 简述 我们在用逆向工程Example类进行数据库where条件查询时,可以通过如下方法实现,以User类为实例,User类中有成员变量 id name age //创建UserExample对象 UserExample example = new UserExample(); //生成Criteria实例 //第一个条件 Criteria criteria1 = e... 阅读详情
       Hibernate 提供了操纵对象和相应的 RDBMS 表中可用的数据的替代方法。一种方法是标准的 API,它允许你建立一个标准的可编程查询对象来应用过滤规则和逻辑条件。


        Hibernate Session 接口提供了 createCriteria() 方法,可用于创建一个 Criteria 对象,使当您的应用程序执行一个标准查询时返回一个持久化对象的类的实例.

Criteria criteria=session.createCriteria(StudentInfoEntity.class);

1. 使用持久化注解(以JPA标准注解为主,如有需要使用hibernate本身提供的注解)将pojo转换为po
具体步骤(建项目请参考前一篇博文):
a)在src目录下建包,并配置好hibernate.cfg.xml(如图)


b)进入By database Scheam

c)去数据库创建相应表

d)注意如下配置选择


e)至此我们会在src/com包下生成StudentInfoEntity.java类

注解名

含义

@Entity

被@Entity注解修饰的类,说明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名如果想改变这种默认的orm规则,就要使用

@Table

@Table注释指定了Entity所要映射带数据库表,其中@Table.name()用来指定映射表的表名。

如果缺省@Table注释,系统默认采用类名作为映射表的表名。实体Bean的每个实例代表数据表中的一行数据,行中的一列对应实例中的一个属性。

 

@Column

@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性如下:

1)name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;

2)unique:是否唯一;

3)nullable:是否允许为空;

4)length:对于字符型列,length属性指定列的最大字符长度;

5)insertable:是否允许插入;

6)updatetable:是否允许更新;

7)columnDefinition:定义建表时创建此列的DDL;

8)secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。

 

@Basic

@Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 即为 @Basic

fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.

(1)、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。

(2)、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。

 

@Id

@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。@Id标注也可置于属性的getter方法之前。

f)创建测试类进行增删改查,增删改都和前一篇博文一样,这里我们介绍一些查询方法



2. 查询条件的限制
可以使用 Criteria 对象可用的 add() 方法去添加一个标准的限制。
//创建一个 Criteria 对象

Criteria criteria=session.createCriteria(StudentInfoEntity.class);
      
//增加查询条件(user_name为“张三”的学生信息)
       
criteria.add(Restrictions.eq("userName","张三"));
       
//得到结果集
        
List<StudentInfoEntity> list=criteria.list();

//在控制台打印结果集
        list.forEach(a-> System.
out.println("学生id:"+a.getId()+" 姓名:"+a.getUserName()+" 年龄:    "+a.getUserAge()+" 性别:"+a.getUserSex()+" 身高:"+a.getUserHeight()));

 

1. 基本查询

根据姓名查询特定学生信息
package com.pojo;
  
  import org.hibernate.Criteria;
  import org.hibernate.Session;
  import org.hibernate.SessionFactory;
  import org.hibernate.Transaction;
  import org.hibernate.cfg.Configuration;
  import org.hibernate.criterion.Restrictions;
  
  import java.util.List;
  
  public class queryByCondition {
    public static void main(String[] args) {
        //实例化Configuration
        Configuration config=new Configuration().configure();
        //创建会话工厂
        SessionFactory sf=config.buildSessionFactory();
        //创建会话
        Session session=sf.openSession();
        //创建一个 Criteria 对象
        Criteria criteria=session.createCriteria(StudentInfoEntity.class);
       //增加查询条件(user_name为“张三”的学生信息)
        criteria.add(Restrictions.eq("userName","张三"));
        //得到结果集
        List<StudentInfoEntity> list=criteria.list();
//在控制台打印结果集
        list.forEach(a-> System.out.println("学生id:"+a.getId()+"  姓名:"+a.getUserName()+"  年龄:"+a.getUserAge()+"  性别:"+a.getUserSex()+"  身高:"+a.getUserHeight()));
        //关闭会话
        session.close();
        //关闭会话工厂
        sf.close();
    }
}


Session session=sf.openSession();
  //创建一个 Criteria 对象
  Criteria criteria=session.createCriteria(StudentInfoEntity.class);
  //查询所有学生信息得到结果集
  List<StudentInfoEntity> list=criteria.list();
//在控制台打印结果集
list.forEach(a-> System.out.println("学生id:"+a.getId()+"  姓名:"+a.getUserName()+"  年龄:"+a.getUserAge()+"  性别:"+a.getUserSex()+"  身高:"+a.getUserHeight()));

//创建一个 Criteria 对象
Criteria criteria=session.createCriteria(StudentInfoEntity.class);
  //增加查询条件(年龄在20-30之间的所有学生信息)
//criteria.add(Restrictions.gt("userAge ", 20)).add(Restrictions.lt("userAge ", 30));
 criteria.add(Restrictions.between("userAge",new Integer(20),new Integer(30)));
 //得到结果集
 List<StudentInfoEntity> list=criteria.list();
                                                                      

//创建一个 Criteria 对象
 Criteria criteria=session.createCriteria(StudentInfoEntity.class);
  //增加查询条件(身高为null的学生信息)
 criteria.add(Restrictions.isNull("userHeight"));
 //得到结果集
 List<StudentInfoEntity> list=criteria.list();

//创建一个 Criteria 对象
 Criteria criteria=session.createCriteria(StudentInfoEntity.class);
  //增加查询条件(年龄等于25或者身高为null的学生对象)
 criteria.add(Restrictions.or(Restrictions.eq("userAge",new Integer(25)),
         Restrictions.isNull("userHeight")));
 //得到结果集
 List<StudentInfoEntity> list=criteria.list();


Session session=sf.openSession();
  //创建一个 Criteria 对象
  Criteria criteria=session.createCriteria(StudentInfoEntity.class);
  //根据id降序排列
criteria.addOrder(Order.desc("id"));
  //得到结果集
  List<StudentInfoEntity> list=criteria.list();
//在控制台打印结果集
list.forEach(a-> System.out.println("学生id:"+a.getId()+"  姓名:"+a.getUserName()+"  年龄:"+a.getUserAge()+"  性别:"+a.getUserSex()+"  身高:"+a.getUserHeight()));

//创建一个 Criteria 对象
 Criteria criteria=session.createCriteria(StudentInfoEntity.class);
  //增加查询条件(查询"张三","王五","田七"三人信息)
 String[] names={"张三","王五","田七"};
 criteria.add(Restrictions.in("userName",names));
 //得到结果集
 List<StudentInfoEntity> list=criteria.list();

4、 分页查询
这里有两种分页标准接口方法:

方法

描述

public Criteria setFirstResult(int firstResult)

firstResult属性设置查询起始行

public Criteria setMaxResults(int maxResults)

maxResults 属性设置需要查询的行数。

 

//创建一个 Criteria 对象
  Criteria criteria=session.createCriteria(StudentInfoEntity.class);
  //设置查询起始行
  criteria.setFirstResult(0);
  //设置需要查询的行数
  criteria.setMaxResults(5);
  //得到结果集
  List<StudentInfoEntity> list=criteria.list();                                                        

Hibernate框架之Query、Criteria、SQLQuery三个数据查询对象 Hibernate框架的作用是将持久化层的操作进行封装,也就是把数据库的操作进行了封装,我们可以不使用sql语句就能更新数据库。下面将介绍Query、Criteria、SQLQuery三个查询对象。 一、Query 通过Session对象获取,使用HQL语句。所谓HQL,就是Hibernate Query Language的缩写,就是Hibernate的查询语言。与SQL语句相似,但是面向的是对象... 阅读详情

相关推荐

hibernate系列十七:Criteria查询

Criteria查询是Hibernate提供的另一种查询方式,与HQL基于字符串的查询形式完全不同。Hibernate提供了org.Hibernate.Criteria接口、org.hibernate.criterion.Criterion接口和org.hibernate.criterion .Restrictions类等Criteria API,用于支持在运行时动态生成查询语句。 1.  条件

御前两把刀的专栏 1487

Hibernate中Criteria的完整用法

标题Hibernate中Criteria的完整用法 1,Criteria Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和DetachedCriteria 。 2,DetachedCriteria Spring 的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria) 方法可以很方便地根据DetachedCriteria 来返回查询结果。Detache

Fzzf 3518

SpringMVC+Hibernate4+MySQL实现数据库增加功能!

SpringMVC+Hibernate+MySQL实现简单数据库功能,关键是配置文件齐全,改下数据库配置即可用,绝对能跑通!适合初学者学习成长!

数据库:Criteria与原生SQL查询

Hibernate除了提供强大的HQL查询之外,还提供了一种称为Criteria的查询方法。HQL和SQL很相似,其特点是灵活和功能丰富,但缺点是使用者必须熟悉SQL的语法,而且在组合条件查询时,常常需要拼装Where条件,还得为条件提供参数。而Criteria查询更加面向对象,和Java代码结合得更好,在组合条件查询时往往更加方便。当然,Criteria也有其缺点,其可读性不如HQL高,功能也不如HQL多。

qq_55917018的博客 2538

多核系统核间通信(IPC)设计:从硬件机制到软件实现

在多核处理器与嵌入式系统设计中,核间通信(IPC)是实现计算资源协同工作的核心技术。其原理基于共享内存、硬件邮箱与中断等底层硬件机制,通过构建结构化的消息传递通道,实现核间高效、可靠的数据交换。该技术的核心价值在于打破多核间的壁垒,将分散的计算单元整合为有机整体,从而显著提升系统整体性能与响应能力。在工程实践中,IPC广泛应用于智能座舱、边缘AI网关、实时控制系统等场景,用于处理如仪表显示、AI推理、实时控制等复杂任务。本文聚焦于基于共享内存与VRING的消息队列实现,深入剖析缓存一致性、内存屏障等关键问题

weixin_27006759的博客 594

[Adaptive Autosar]深入理解--Time Synchronization

目录 1.TS典型应用场景 2.CP和AP时间同步对比 3.时间同步基础知识 4.TBR部分参数说明 5. TS功能说明 5.1 基本说明 5.2 时间纠正计算说明 5.3 时间验证 Time Synchronization 时间同步,后面简称TS 1.TS典型应用场景 时间同步,典型应用就是在自动驾驶领域,自动驾驶领域涉及到各个传感器的数据采集,如IMU采集当前车身姿态和运动信息,毫米波雷达-超声波雷达-环视摄像头-前视摄像头...等等传感器捕获的数据,在算法中需要精确知道每个数.

AgingMoon的博客 3997

hibernate criteria 添加条件(sql语句混用)

public List<Accident> findAllChecked(Accident entity) { if(entity==null) entity=new Accident(); Criteria criteria=accidentDao.getCriteria(entity); try {

benmin1的博客 4919

完整复现YOLOv8:包括训练、测试、评估、预测阶段【本文源码已开源,地址在文章末尾】

(这里主要是在colab.research.google.com实现的,本地的配置也是类似的方法)YOLOv8是一种用于目标检测的深度学习算法。主要参考:https://github.com/ultralytics/ultralytics/blob/main/README.zh-CN.md。yolov8的权重:https://github.com/ultralytics/assets/releases。yolov8的文档:https://v8docs.ultralytics.com/

源代码杀手的博客 1万+

Hibernate之Criteria查询

Hibernate中提供了三种查询方式,分别为HQL、Criteria查询、本地化SQL查询,实际应用中,有很多人忽略了Criteria的用处,觉得不如另外两种贴近SQL方式便捷,实际则未必,很多情况下Criteria更具有优势;本篇文章就对Criteria查询做一个全面的介绍,以期尽可能的将更多的Criteria强大的查询功能展现出来; 1、首先新建一个Maven Web Project项目,

yu102655的专栏 1万+

uniapp(微信小程序) - 实现uniapp小程序电子签名板,横屏手写姓名签名专用写字画板,客户专用签字板,手写签名签字画板组件,手写签名,(详细运行示例,一键复制开箱即用)

uniapp实现微信小程序的电子签名效果,uniapp微信小程序 电子签名 写字板,用uniapp实现微信小程序的电子签名,uniapp微信小程序canvans实现手写签名,记录一个uniapp写的小程序的手写板,横屏,用于签名,unniapp实现电子签名,uniapp怎么做横屏的手写签名,uniapp如何实现签字板,uniapp小程序平台下怎么做电子签名板组件,uniapp电子签名插件,uniapp最好用的电子写字板插件组件源码,实现uniapp 手写签名功能,手写板、签字板,uni-app插件市场最好的

✅ 精选推荐文章 1万+

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6102

Hibernate Criteria多表查询

Hibernate Criteria多表查询Hibernate有多种查询方式,如果想要多表查询,有3种方法1.HQL查询(写连接语句)2.Native SQL(手写原生SQL语句)3.Criteria查询本次内容就是介绍Criteria的多表查询这是我需要持久化的对象的字段图,我这里列举的是一个双向1对多这里是我生成的表结构然后以下是我的部分代码:Session session = sc.getC...

Junit的博客 4398

【Unity程序技巧】Unity中单例模式管理器

单例模式(Singleton Pattern)是 最简单的设计模式之一

秩沅 1657

20. Hibernate 中的 Criteria 查询

今天给大家介绍一个绝对纯正的OOPCriteria查询。什么是 Criteria 查询Criteria 实现复杂查询;

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 2010

CloudCompare 二次开发(9)——半径滤波

基于PCL对CloudCompare软件进行二次开发,实现的算法功能是半径滤波

点云侠的博客 1400

解锁激光加工密码:功率、频率、脉宽、占空比全解析

激光加工利用高能量激光束实现材料加工,具有无接触、高效率等特点。其核心参数包括功率(决定能量输出)、频率(控制脉冲重复)、脉宽(调节能量作用时间)和占空比(调控工作周期),这些参数相互协同影响加工效果。针对不同材料需采用差异化参数组合:金属材料需较高功率,塑料需低功率防过热,陶瓷需高频短脉宽减少热应力。实际操作中应通过小范围测试逐步优化参数,并注意解决烧损、切割不平整等常见问题。合理调节这些参数可实现高质量、高效率的激光加工。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 615

Hibernate的Criteria查询因某个字段为空,导致查询数据为空问题

今天,使用Hibernate的Criteria查询Oracle数据库表数据,发现只要表里面某个字段为空,查询不出来数据,这是为什么呢?下面解决方法介绍一下:(下面的表User_Info,只是举例说明使用) 一、查找原因,排除法 (1)是不是这个Criteria查询方法不支持? a.采用普通的Hibernate查询 Query qyeryObj = session.createQuery("FROM USER_INFO"); List list = queryObj.list();

clk_esunny的成长之路 2806

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Hibernate Criteria查询之多表连接分页

最近尝试用Hibernate的Criteria查询实现多表连接下的分页,发现一些Hibernate的奇怪问题:多表连接后的分页求总条数始终报错,检查生成的sql也不正确。研究许久找到问题所在,特贴如下: Mysql脚本如下: 学生 测试数据,请勿见笑:) [sql] view plain copy /*   Navicat MySQL Data Transfer      Sourc...

qq_40285302的博客 1891

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Hibernate的Criteria和DetachedCriteria 查询

最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法  设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。现在对 Hibernate的Criteria 的用法进行总结:    Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了

逍遥飞鹤的专栏 3569

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hibernate的多条件查询——Criteria Query的应用

hibernate的多条件查询——Criteria Query的应用

qq_44884300的博客 5985

Hibernate:Criteria多表关联查询的试用

本人近期刚做的一个项目中需要试用Criteria的都表查询功能,查询的功能是这样的: TableA、TableB、TableC、TableD四个表是有关联关系的,TableA与TableB为多对一关系,TableB与TableC为一对多关系,TableC与TableD为多对一关系,见图: 而我的业务是查TableA的内容,不过有一个条件在TableD中,所以这4张表都要用上,废话不多说了:

HA7419的专栏 3900

Hibernate使用Criteria查询

Hibernate使用Criteria查询 Hibernate属于ORMapping映射框架,所有的操作都应该以对象为主进行使用,那么Query的使用就不符合与这种要求了,所以在查询的基础上又扩充了一个基于对象模式的查询接口:Criteria接口,而这个接口的创建依靠Session接口: public Criteria createCriteria(Class persistentClass); ...

Nicholas_GUB的博客 464

了解hibernate的Criteria查询

hibernate提供的Criteria查询更加符合面向对象的做法。当访问college对象关联的studens时候,hibernate还是会发出一个查询语句,返回college下的所有student。如果要实现过滤功能,需要使用hibernate中的ResultTransformer。通过Criteria关联查询可以看出:一旦在实体映射文件中配置好关联关系后,当访问关联实体的时候,hibernate会发出查询语句再次查询关联的实体,除非我们自己去设置关联的实体对象。

aty 1486

Hibernate Criteria用法 关于Criteria多表连接 本人经验有限

在网上找一些资料自已经验有限看不太明白,自已也总结了下个人经验

zqx20032009的博客 1048
上一篇: ihibetnate学习之利用idea完成数据库表逆向生成实体类!
下一篇: Java API之IO创建文件、文件夹!
madi_Goly
博客等级 码龄16年 11粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值