分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Hibernate的批量查询

发布时间:2023-09-06 02:05责任编辑:胡小海关键词:Hibernate

 Hibernate的查询大致分为以下三种场景,

  1.  HQL查询-hibernate Query Language(多表查询,但不复杂时使用)

     2.  Criteria查询(单表条件查询)

  3.  原生SQL查询(复杂的业务查询)

 

接下来解释三种使用方法: 

 1.HQL查询-hibernate Query Language(多表查询,但不复杂时使用)  Hibernate独家查询语言,属于面向对象的查询语言

   注意:HQL语言中不会出现SQL中的表和列,HQL使用的都是JavaBean的类名和属性名。

1.HQL基本查询

(1)查询所有的基本语句

 ???@Test ???// HQL查询所有数据 ???public void fun1() { ???????// 1 获得session ???????Session session = HibernateUtil.openSession(); ???????// 2.书写HQL语句 ???????String hql = "from cn.qlq.domain.Customer";// from 类名全路径 ???????// 3.根据hql创建查询对象 ???????Query query = session.createQuery(hql); ???????// 4.根据查询对象获取查询结果 ???????List<Customer> customers = query.list(); ???????System.out.println(customers); ???}

结果:

Hibernate: ????select ???????customer0_.cust_id as cust_id1_0_, ???????customer0_.cust_name as cust_nam2_0_, ???????customer0_.cust_source as cust_sou3_0_, ???????customer0_.cust_industry as cust_ind4_0_, ???????customer0_.cust_level as cust_lev5_0_, ???????customer0_.cust_linkman as cust_lin6_0_, ???????customer0_.cust_phone as cust_pho7_0_, ???????customer0_.cust_mobile as cust_mob8_0_ ????from ???????cst_customer customer0_[Customer [cust_id=1, cust_name=XXXXXXXXXX], Customer [cust_id=2, cust_name=联想]]

改进:如果整个项目中只有一个类的名字可以省略包路径,也就是可以只写类名:

 ???@Test ???// HQL查询所有数据 ???public void fun1() { ???????// 1 获得session ???????Session session = HibernateUtil.openSession(); ???????// 2.书写HQL语句// ???????String hql = "from cn.qlq.domain.Customer";// from 类名全路径 ???????String hql = "from Customer";// 如果整个项目中只有这一个类名可以直接写名字 ???????// 3.根据hql创建查询对象 ???????Query query = session.createQuery(hql); ???????// 4.根据查询对象获取查询结果 ???????List<Customer> customers = query.list(); ???????System.out.println(customers); ???}

(2)根据主键查询单个

 ???@Test ???// HQL查询单个数据 ???public void fun2() { ???????// 1 获得session ???????Session session = HibernateUtil.openSession(); ???????// 2.书写HQL语句// ???????String hql = "from cn.qlq.domain.Customer";// from 类名全路径 ???????String hql = "from Customer where cust_id = 1";// where后面是Customer的属性名称而不是列名 ???????// 3.根据hql创建查询对象 ???????Query query = session.createQuery(hql); ???????// 4.根据查询对象获取查询结果 ???????Customer customer = (Customer) query.uniqueResult(); ???????System.out.println(customer); ???}

 2.HQL条件查询:

 (1)?占位符查询

  类似于JDBC的占位符,只是hibernate的?下标从0开始,而JDBC的下标从1开始,基本上所有的编程索引都从0开始,唯独JDBC从1开始。。。。

 ???@Test ???// HQL的?占位符查询 ???public void fun3() { ???????// 1 获得session ???????Session session = HibernateUtil.openSession(); ???????// 2.书写HQL语句// ???????String hql = "from cn.qlq.domain.Customer";// from 类名全路径 ???????String hql = "from Customer where cust_id = ?";// 如果整个项目中只有这一个类名可以直接写名字 ???????// 3.根据hql创建查询对象 ???????Query query = session.createQuery(hql);// ???????query.setLong(0, 1l);//类似于JDBC的占位符,只是JDBC的占位符下标从0开始,hibernate从1开始 ???????query.setParameter(0, 1l);//这种写法不用管类型 ???????// 4.根据查询对象获取查询结果 ???????Customer customer = (Customer) query.uniqueResult(); ???????System.out.println(customer); ???}

 (2)命令占位符   :name格式的查询,固定格式,name随便起,习惯性的起做和条件名字一样

 ???@Test ???// HQL的命令占位符查询 ???public void fun4() { ???????// 1 获得session ???????Session session = HibernateUtil.openSession(); ???????// 2.书写HQL语句// ???????String hql = "from cn.qlq.domain.Customer";// from 类名全路径 ???????String hql = "from Customer where cust_id = :cust_id";// :cust_id的名字随便起,只不过习惯性的起做一样 ???????// 3.根据hql创建查询对象 ???????Query query = session.createQuery(hql);// ???????query.setLong(0, 1l);//类似于JDBC的占位符,只是JDBC的占位符下标从0开始,hibernate从1开始 ???????query.setParameter("cust_id",1l); ???????// 4.根据查询对象获取查询结果 ???????Customer customer = (Customer) query.uniqueResult(); ???????System.out.println(customer); ???}

3.HQL分页查询

   分页查询类似于mysql的limit关键字,limit start,pageSize。。。。。。

 ???@Test ???// HQL分页查询 ???public void fun5() { ???????// 1 获得session ???????Session session = HibernateUtil.openSession(); ???????// 2.书写HQL语句// ???????String hql = "from cn.qlq.domain.Customer";// from 类名全路径 ???????String hql = "from Customer";// :cust_id的名字随便起,只不过习惯性的起做一样 ???????// 3.根据hql创建查询对象 ???????Query query = session.createQuery(hql); ???????/** ????????* 类似于 limit start,pageSize; ????????* 假设页大小是2 ????????* 页号 起始值 ?页大小 ????????* 1 ??0 ???2 ????????* 2 ??2 ???2 ????????*/ ???????//例如取第二页数据 ???????query.setFirstResult(2); ???????query.setMaxResults(2); ???????// 4.根据查询对象获取查询结果 ????????List<Customer> customers = query.list(); ???????System.out.println(customers); ???}

结果:

Hibernate: ????select ???????customer0_.cust_id as cust_id1_0_, ???????customer0_.cust_name as cust_nam2_0_, ???????customer0_.cust_source as cust_sou3_0_, ???????customer0_.cust_industry as cust_ind4_0_, ???????customer0_.cust_level as cust_lev5_0_, ???????customer0_.cust_linkman as cust_lin6_0_, ???????customer0_.cust_phone as cust_pho7_0_, ???????customer0_.cust_mobile as cust_mob8_0_ ????from ???????cst_customer customer0_ limit ?, ????????[Customer [cust_id=3, cust_name=博客园], Customer [cust_id=4, cust_name=仍然]]

2.Criteria查询(单表条件查询)

Hibernate的批量查询

原文地址:https://www.cnblogs.com/qlqwjy/p/9357369.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved