Hibnate详细查询方法,看这一篇就够了

本文详细介绍了Hibernate的多种查询方式,包括OID查询、对象导航查询、HQL和QBC查询,以及SQL查询。讲解了每种查询方法的特点、用法,如get与load的区别、HQL的条件和分组统计查询、QBC的面向对象查询等,旨在全面覆盖Hibernate的数据查询需求。
摘要由CSDN通过智能技术生成


本文内容

  • OID查询
  • 对象导航查询
  • HQL查询
  • QBC查询
  • SQL查询

 

首发日期:2019-11-6


hibernate的查询方式:

hibernate有很多查询方式

  • OID查询
  • 对象导航查询:
  • HQL查询:
  • QBC查询:
  • SQL查询:

OID查询:

OID查询:基于唯一标识属性(主键)来查询

  • 使用方法:session.get(持久类.class,主键值)或session.load(持久类.class,主键值)
复制代码
public void test1() {
        Configuration cfg = new Configuration().configure();
        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        Person p1 = session.get(Person.class, 1L);//因为我用的是Long,所以这里给个1L
        Person p2 = session.load(Person.class, 2L);//不会立即发生sql语句
        System.out.println(p1);
        System.out.println(p2);//这里才发送p2的查询
    }
复制代码

 

 

get和load的区别:

load是延迟加载的,意思是当调用load的时候,并不立即发送SQL语句,只有当使用了这个对象的时候才去发送SQL语句。

而且,get对于不存在的对象的查询返回的是null,load会报错。

 

 


对象导航查询

对象导航查询:利用对象之间的关系来获取【前提--对象之间建立了关系,比如给某个学生选择了班级,那么就可以通过这个学生来查询到班级,而无法通过这个学生查询到没有跟他绑定的班级】

  • 使用方法:利用对象的关系【参照例子帮助了解,以一对多关系为例。】
复制代码
public void test2() {
        Configuration cfg = new Configuration().configure();
        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        Student student = session.get(Student.class, 1L);
        Grade grade = student.getGrade();
        System.out.println(grade);
        Grade grade2 = session.get(Grade.class, 1L);
        for (Student s : grade2.getStudents()) {
            System.out.println(s);
        }
}</span></pre><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

 

 


HQL查询:

HQL是hibernate版本的SQL语句,HQL与SQL相像,不过它的表名变成了类名,字段名变成了属性名。

  • 执行HQL查询:Query query = session.createQuery(HQL语句);
  • 获取结果:query.list()【获取结果集】、query.unique()【如果只查单行单列数据,用这个】

 

查询所有:

HQL中的"from 类名"相当于SQL中的“select * from 表名”

复制代码
public void test3() {
        Configuration cfg = new Configuration().configure();
        SessionFactory factory = cfg.buildSessionFactory();
        Session session = factory.openSession();
        Query query = session.createQuery("from Student ");
        List<Student> list = query.list();
        for(Student s :list) {
            System.out.println(s);
        }
}</span></pre><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>

 

别名查询

HQL中也给可以给类名指定一个别名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值