Hibernate查询方式、对象导航查询、OID查询、HQL查询、QBC、元素SQL_CodeLiboy的博客-程序员秘密

技术标签: 元素SQL  QBC  HQL查询  对象导航查询  OID查询  

-》对象导航查询
        通过企业Id,查询到企业,然后根据这个企业查询所有的员工

测试类:

package test;
 
import java.util.Iterator;
import java.util.List;
 
import junit.framework.TestCase;
 
import org.hibernate.Session;
 
import com.java.hibernate.HibernateUtils;
import com.java.hibernate.Student;
 
public class ObjectNavQueryTest extends TestCase {
 
	public void testQuery() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
 
			List students = session.createQuery("from Student s where s.classes.name like '%2%'").list();
			for (Iterator iter=students.iterator(); iter.hasNext();) {
				Student student = (Student)iter.next();
				System.out.println(student.getName());
			}
 
			session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		} finally {
			HibernateUtils.closeSession(session);
		}
	}
 


 -》OID查询
        就是通过Id查询记录,调用session的get方法

 @Test
    public void testSelectOID(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory创建Session对象
            //理解:类似于jdbc的连接数据库
            session = HibernateUtils.getSessionObject();
            //2.开启事务
            transaction = session.beginTransaction();
            //3.写具体的crud操作
            //查询cid=3的客户
            Customer customer = session.get(Customer.class, 3);
            //4.提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滚事务
            transaction.rollback();
        } finally {
            //6.关闭资源     在使用了与本地线程绑定的session对象之后,就不需要手动关闭session了
            session.close();
        }
    }


 -》HQL查询(不写表名是实体名称,不写字段名写属性名称)
        -》查询所有
        -》条件查询
            where
            like 
            设置参数,0开始
        -》分页查询
        -》排序
            from 实体名称 order by 实体属性名称  asc|desc
        -》聚合函数
            常用的聚合函数:
                count、sum、avg、max、min
            hql聚合函数语句写法
                select count(*) from 实体类名称
    -》QBC

QBC查询所有

  @Test
    public void testSelectQBC01(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory创建Session对象
            //理解:类似于jdbc的连接数据库
            session = HibernateUtils.getSessionObject();
            //2.开启事务
            transaction = session.beginTransaction();
            //3.写具体的crud操作
            //查询所有的客户
            //3-1.创建Criteria对象
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.调用方法得到结果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滚事务
            transaction.rollback();
        } finally {
            //6.关闭资源     在使用了与本地线程绑定的session对象之后,就不需要手动关闭session了
            session.close();
        }
    }

QBC条件查询

 @Test
    public void testSelectQBC02(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory创建Session对象
            //理解:类似于jdbc的连接数据库
            session = HibernateUtils.getSessionObject();
            //2.开启事务
            transaction = session.beginTransaction();
            //3.写具体的crud操作
            //条件查询
            //3-1.创建Criteria对象
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.使用Criteria对象里面的方法设置条件值
            //使用add方法设置条件值,在add方法里面使用Restrictions类的方法实现条件设置
            //静态方法中,参数1:实体类属性名    属性2:实体类属性名对应的条件值
            criteria.add(Restrictions.eq("cid", 3));
            criteria.add(Restrictions.eq("custName", "三点连线"));
            //3-3.调用方法得到结果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滚事务
            transaction.rollback();
        } finally {
            //6.关闭资源     在使用了与本地线程绑定的session对象之后,就不需要手动关闭session了
            session.close();
        }
    }

QBC模糊查询

 @Test
    public void testSelectQBC03(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory创建Session对象
            //理解:类似于jdbc的连接数据库
            session = HibernateUtils.getSessionObject();
            //2.开启事务
            transaction = session.beginTransaction();
            //3.写具体的crud操作
            //模糊查询
            //3-1.创建Criteria对象
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.使用Criteria对象里面的方法设置条件值
            //使用add方法设置条件值,在add方法里面使用Restrictions类的方法实现条件设置
            //静态方法中,参数1:实体类属性名    属性2:实体类属性名对应的条件值
            criteria.add(Restrictions.like("custName", "%点%"));
            //3-3.调用方法得到结果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滚事务
            transaction.rollback();
        } finally {
            //6.关闭资源     在使用了与本地线程绑定的session对象之后,就不需要手动关闭session了
            session.close();
        }
    }

QBC排序查询

 @Test
    public void testSelectQBC04(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory创建Session对象
            //理解:类似于jdbc的连接数据库
            session = HibernateUtils.getSessionObject();
            //2.开启事务
            transaction = session.beginTransaction();
            //3.写具体的crud操作
            //排序查询
            //3-1.创建Criteria对象
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.使用Criteria对象里面的方法设置条件值
            //使用add方法设置条件值,在add方法里面使用Restrictions类的方法实现条件设置
            //静态方法决定排序规则,参数:设置根据那个属性进行排序
            criteria.addOrder(Order.asc("cid"));
            //3-3.调用方法得到结果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滚事务
            transaction.rollback();
        } finally {
            //6.关闭资源     在使用了与本地线程绑定的session对象之后,就不需要手动关闭session了
            session.close();
        }
    }

QBC离线查询

 @Test
    public void testSelectQBC07(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory创建Session对象
            //理解:类似于jdbc的连接数据库
            session = HibernateUtils.getSessionObject();
            //2.开启事务
            transaction = session.beginTransaction();
            //3.写具体的crud操作
            //离线查询
            //使用场景,servlet调用service,service调用dao(对数据库crud操作--使用hibernate框架时,最终使用session里面的方法实现数据操作)
            //3-1.创建对象
            DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
            //3-2.最终执行时才用到session
            Criteria criteria = detachedCriteria.getExecutableCriteria(session);
            //3-3.调用方法得到结果
            List<Customer> list = criteria.list();
            for (Customer customer : list) {
                System.out.println("cid = " + customer.getCid() + "    custName = " + customer.getCustName());
            }
            //4.提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滚事务
            transaction.rollback();
        } finally {
            //6.关闭资源     在使用了与本地线程绑定的session对象之后,就不需要手动关闭session了
            session.close();
        }
    }

QBC统计查询

  @Test
    public void testSelectQBC06(){
        Session session = null;
        Transaction transaction = null;
        try {
            //1.使用SessionFactory创建Session对象
            //理解:类似于jdbc的连接数据库
            session = HibernateUtils.getSessionObject();
            //2.开启事务
            transaction = session.beginTransaction();
            //3.写具体的crud操作
            //3-1.统计查询
            Criteria criteria = session.createCriteria(Customer.class);
            //3-2.设置所要做的操作
            criteria.setProjection(Projections.rowCount());
            //3-3.调用方法得到结果
            Object object = criteria.uniqueResult();
            Long count = (Long)object;
            int a = count.intValue();
            System.out.println("object = " + a);
            //4.提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //5.回滚事务
            transaction.rollback();
        } finally {
            //6.关闭资源     在使用了与本地线程绑定的session对象之后,就不需要手动关闭session了
            session.close();
        }
    }


        使用hibernate api查询,本质是使用Criteria对象实现
    -》元素SQL
        使用nativeQuery查询

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qqmlxy1/article/details/82777545

智能推荐

计算机视觉——百度百科_ctrigger的博客-程序员秘密

计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。这里所 指的信息指Shannon定义的,可以用来帮助做一个“决定”的信息。因为感知可以看作是...

MAC系统中安装labelme_YH.Kong的博客-程序员秘密_clang命令需要使用命令行开发者工具

1.安装 Anaconda安装 Anaconda ,点击链接下载。一直 “下一步” 就行,可以下载最新的。ps:安装到空间大一点的盘上。2. 打开 labelme 的 GitHub 网页(链接)。往下拉,找到 Installation 标题下的 Anaconda 标题。(如果GitHub打不开,先跳转到第3步)3. 进入mac 终端输入刚才打开的网址 Anaconda 标题下关于 python3 的部分(如果GitHub打不开,就输入下面的代码。注意 python 版本就用 3.6 就好,太高

application so that it contains a single, compatible version of com.google.gson.GsonBuilder 报错解决办法_whcyaaa的博客-程序员秘密

启动eureka-server模块报错(Gson包冲突):Description:An attempt was made to call a method that does not exist. The attempt was made from the following location: java.lang.invoke.MethodHandleNatives.resolve(Native Method)The following method did not exist:

web app 中物理返回键的监听_bug收集的博客-程序员秘密

使用Vue + Vant 进行web app 的开发,需要处理 android 自带的物理返回键,对不同页面,点击物理返回键进行不同的处理&nbsp;那如何监听到物理返回键,并进行相应的处理?&nbsp;&nbsp;app网页返回键 vs 手机物理返回键&nbsp;网页上的返回键是返回上一个页面的意思,手机上的返回键是返回上一个操作。&nbsp;并且手机上的返回键还有很多其它功能,在使用某些软件可以双击返回键退出app&nbsp;&nbsp;Vue 中监听物理返回键&nbsp;

js通过url地址访问文件做下载,并不是打开文件_小疯子丫的博客-程序员秘密

let url = 'http://127.0.0.1:8080/hhh.json'let name = url.substring(url.lastIndexOf("/") + 1)let downLoad = async () =&gt; { let responsePromise = await fetch(url) let blob = await responsePromise.blob() let objectURL = window.URL.createObjectURL(bl

【java毕业设计】基于java+SSH+jsp的物资租赁系统设计与实现(毕业论文+程序源码)——物资租赁系统_毕业设计方案专家的博客-程序员秘密

大家好,今天给大家介绍基于java+SSH+jsp的物资租赁系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。文章目录:本系统为租赁站提供了一个方便快捷的物资管理系统,方便出租物资的管理。系统功能主要包括:用户管理,包括管理员信息查看、管理员密码修改;正常订单管理:包括新增正常订单、修改有误订单、删除错误订单;资金结算管理:费用统计;材料租赁管理:包括订单出租查询、器材回收管理、日租金管理、仓库库存管理。本系统开发工具采用Myeclipse,数据库设计采用MySQL数据库,开发模式采用JSP为

随便推点

MediaPlayer播放音频_Gaoxry的博客-程序员秘密

Android提供了常见的音频、视频的编码、解码机制。借助于多媒体类MediaPlayer的支持,开发人员可以很方便在在应用中播放音频、视频。本篇博客主要讲解在Android平台下如何播放一个音频文件。本篇博客主要内容如下:MediaPlayer MediaPlayer的音频源 使用MediaPlayer播放音乐 MediaPlayer使用技巧 Demo--一个简单的MP3播放器MediaPlayer上面提到过,Android下对于音频、视频的支持均需要使用到MediaPlayer,它

Flask模板教程 一_小白爱写代码的博客-程序员秘密

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、模板的基础语法1.数据传递2.模板继承前言Template是MVC中的View,MTV中的Template主要用来做数据展示,本次讲的是Flask中的模板概念一、模板的基础语法1.数据传递模板语言动态生成的html{{ var }} 变量的接收从views传递过来的数据前面定义出来的数据@blue.route('/test/')def test(): name='666' return re

如何调整 Kubernetes 资源限制_新钛云服的博客-程序员秘密

新钛云服已为您服务1438天Kubernetes 资源限制往往是一个难以调整的配置,因为你必须在太严格或者太宽松的限制之间找到最佳的平衡点。通过本文,你可以学习到如何设置正确的 Kubernetes 资源限制:从检测到无限制的容器,到找出你应该在集群中正确配置的 Kubernetes 资源限制。我们假设你使用 Prometheus 来监控你的 Kubernetes 集群。...

LabVIEW学习分享(7)_不吃鱼的小脸猫的博客-程序员秘密

LabVIEW实用总结–多态开关设计小树不修不直溜,人不学习哏揪揪!又到了秋天开学季,也是各大公司的招工旺季,新赛季、新征程。虽然近期的男篮世界杯,让我的许多同事憋气窝火,但比赛的结果再次警醒天朝子民,绝对不要再固步自封、依靠运气,要开眼看世界、认清自己的实力,扎实练好基础,才能有所作为(^-^)V。话不多数,点到为止,且行且珍惜。本文中分享近期本小学生在学习LabVIEW过程中发现并初步解决...

博士毕业最高201万!华为顶级薪酬招“天才少年”_AI科技大本营的博客-程序员秘密

整理 | Jane出品 | AI科技大本营(ID:rgznai100)7 月 23 日,华为总裁办首次向大众公开 2019 届 8 名实行年薪制的顶尖学生的薪酬方案,最高...

在OnCtreate方法或者adapter中获取控件的宽高和位置_yuyan19850204的博客-程序员秘密

private void getViewLeftOffset(final View view) { ViewTreeObserver vto = view.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override

推荐文章

热门文章

相关标签