【郑州校区】Hibernate检索方式概述 Hibernate提供以下几种检索对象方式: 1导航对象图检索方式,根据已加载的对象导航到其它对象 2.OID检索方式,按照对象的OID来检索对象 3.HQL检索方式,使用面向对象的HQL查询语言 4.QBC检索方式,使用QBC(Query by Criteria)API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口 5.本地SQL检索方式,使用本地数据库的SQL查询语句 1.1. 导航对象图检索方式 Customer c=session.get(Customer.class,2); c.getOrders().size() 通过在hibernate中进行映射关系,在hibernate操作时,可以通过导航方式得到 其关联的持久化对象信息。 1.2. OID检索方式 Session.get(Customer.class,3); Session.load(Order.class,1); Hibernate中通过get/load方法查询指定的对象,要通过OID来查询。 1.3. HQLHQL是我们在hibernate中是常用的一种检索方式。 HQL(Hibernate Query Language)提供更加丰富灵活、更为强大的查询能力 因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语 句的查询方式,同时也提供了更加面向对象的封装。完整的HQL语句形式如下: Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。 基本步骤: 1. 得到Session 2. 编写HQL语句 3. 通过session.createQuery(hql)创建一个Query对象 4. 为Query对象设置条件参数 5. 执行list查询所有,它反胃的是List集合 uniqueResut()返回一个查询结果。 数据准备基本检索From 类名; 排序检索条件检索分页检索分组统计检索分组 group by 统计 count max min avg sum 投影检索我们主要讲解是关于部分属性查询,可以使用投影将部分属性封装到对象中。 注意:我们必须在PO类中提供对应属性的构造方法,也要有无参数构造。 命名检索我们可以将hql语句先定义出来,在使用时通过session.getNamedQuery(hqlName);得到一个Query,在执行. 问题:hql定义在什么位置? 1.如果你有hbm配置文件,那么当前的hql操作是对哪一个实体进行操作,就在哪一个 实体的配置文件中声明。 2.如果是使用注解来描述PO的配置 我们直接在PO类中使用 如何使用? 1.4. QBCQBC(query by criteria),它是一种更加面向对象的检索方式。 QBC步骤: 1.通过Session得到一个Criteria对象 session.createCriteria() 2.设定条件 Criterion实例 它的获取可以通过Restrictions类提供静态。 Criteria的add方法用于添加查询条件 1. 调用list进行查询 criterfia.list. 基本检索排序检索注意在criteri.addOrder()方法的参数使用的Order是hibernate中的对象 条件检索分页检索统计分组检索Count sum avg max min 离线条件检索 1.5. 本地SQL本地sql也支持命名查询。 可以将sql语句定义在hbm文件中,也可以使用注解。 本地命名sql注解定义 如果执行这个命名的sql会产生异常 出现问题的原因:是hibernate不知道执行select * from t_customer后如果将结果封装。 1.6. 多表操作 SQL多表操作1.交叉连接 CROSS JOIN 会产生迪卡尔积SELECT * FROM t_customer CROSS JOIN t_order; 2.内连接 INNER JOIN ON SELECT * FROM t_customer AS c INNER JOIN t_order AS o ON c.id=o.c_customer_id; 使用内连接它只能将有关联的数据得到。 隐式内连接 使用 "逗号"将表分开,使用WHERE来消除迪卡尔积 SELECT * FROM t_customer AS c ,t_order o WHERE c.id=o.c_customer_id; 3.外连接 左外LEFT OUTER JOIN 右外RIGHT OUTER JOIN OUTER可以省略 SELECT * FROM t_customer c LEFT OUTER JOIN t_order o ON c.id=o.c_customer_id; HQL多表操作 Hql多表操作分类: 1. 交叉连接 2. 内连接 a) 显示内连接 b) 隐式内连接 c) 迫切内连接 3. 外连接 左外连接 迫切左外连接 右外连接 注意:在hibernate中有迫切连接的概念,而sql中没有。 内连接显示内连接 显示内连接使用的是inner join with 隐式内连接 隐式内连接也我们在sql中操作不一样,它是通过”.”运算符来关联 迫切内连接 迫切内连接得到的结果是直接封装到PO类中,而内连接得到的是Object[]数组,数组中封装的是PO类对象。 外连接传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话 0371-56061160/61/62 来校路线 地铁一号线梧桐街站A口出
|