-
选择-select子句,作用:指定只需要的查询信息,提高程序的运行效率 1.以Object[]形式返回选择的属性: 注意:hql的select查询语句中,如果指定了多个查询字段,则返回的是一个Object[]数组,然而如果只指定了一个查询字段,则返回的是一个Object对象。 String hql = "select s.name,s.tel from Seller s"; Query query = session.createQuery(hql); List<Object[]> sellers = query.list(); for(Object[] objs:sellers){ System.out.println("name:"+objs[0]); System.out.println("tel:"+objs[1]); }(如果是单个查询字段的话就只需要把上面的Object[]中的[]去掉,打印输出时不需要指明下标) 2.以List形式返回选择的属性 String hql = "select new list(s.name,s.tel,s.address) from Seller s"; ... List<List>lists=query.getResultList(); 3.以map形式返回选择的属性 注意:key为索引值,是字符串类型(map.get("0")),使用Map集合时考虑使用别名获取属性信息 String hql = "select new map(s.name,s.tel,s.address) from Seller s"; 4.以自定义类型返回选择的属性 (1)持久化类中定义对应的构造器 (2)select子句中调用定义的构造器 注意:默认构造器是需要的,因为,在Hibernate没有指定的查询的放回集合时候,Hibernate会自动去找默认构造器,如果不存在,则会出现异常 String hql = "select new Seller(s.name,s.tel,s.address) from Seller s"; 5.获取独特的结果-distinct关键字 distinct关键字 消除查询过程中重复的元素 String hql = "select distinct s.sex from Seller s";查看全部
-
from子句: from子句是HQL语句的最简形式,换句话说,HQL语句只需要from子句就可以执行查询了,这是为什么呢? 这是因为from子句指定了HQL语句查询的主体----映射配置的持久化类及其属性,当我们编写的HQL语句只有from子句的时候,HQL框架默认就是查询该持久化类的所有实例以及该持久化类映射配置的信息,当HQL框架将HQL解析成SQL时,就会查询该持久化类映射的数据表中的所有映射字段信息,并将返回的查询结果封装成该持久化类的list集合查看全部
-
***重点**Query接口简介***重点*** 1.org.hibernate.Query接口定义有执行查询的方法(该方法完成HQL语句的解析与执行过程,并返回查询的结果。就像SQL语句没有jdbc接口,它也就是普通的字符串变量,HQL语句也一样,编写好的HQL语句也就是一个普通的字符串变量,而hibernate框架就负责解析HQL语句,然后根据配置信息生成相应的SQL语句来执行数据库的查询操作,那么完成这个过程依靠的就是Query接口); 2.Query接口支持方法链编程风格,使得程序代码更为简洁(方法链编程:调用方法后,返回的结果依然是调用这个方法的对象,可以在调用方法后直接调用该对象的其他方法,这样可以使用一个程序语句完成多个方法的调用与执行。在Query接口中,方法链编程使用最多的场景是查询参数的动态设置,特别是多个参数的设置) 3.Query实例的创建: a.Session的createQuery()方法创建Query实例 b.createQuery方在调用时需要传递一个参数(即要查询的HQL语句),createQuery(hql) 4.Query执行查询 a.Query接口的list()方法执行HQL查询 b.list()方法返回结果数据类型为java.util.List,List集合中存放符合查询条件的持久化对象查看全部
-
**********初学HQL注意的问题*********** 1、HQL是面向对象的查询语言,其查询主体是持久化类及其属性,而SQL查询主体是数据库表与表的字段;HQL对Java类与属性大小写不敏感、SQL语句对大小写敏感; 2、HQL与SQL在形式上非常相似,特别是HQL在设计上尽量符合之前SQL开发人员的开发习惯,在使用上非常容易与SQL混淆,但是我们不能被表象所迷惑,要认清本质; 3、HQL对关键字不区分大小写,比如之前提到的几个SQL子句其中的关键字,from,where,group by,having,order by...等,只要拼写正确,大小写并不重要,但是为了代码的可读性与美观性,习惯上对HQL的所有关键字小写查看全部
-
hibernate默认的是懒加载状态,默认状态下是不查询外键信息所对应的数据的,只有当我们需要的时候才会根据具体的需要进行查询。查看全部
-
在配置文档中设置了show_sql,则会在控制台里打印出sql语句.此sql语句就是list()方法解析HQL语句之后的sql语句. HQL语句中可以直接使用"from 类名"就可以查询到此类对应数据库表中的所有信息.不需要像sql那样"select*from 表名",直接"form 类名"即可. list()方法返回的是HQL语句所查询的类的持久化对象的集合.所以一般定义一个带泛型的List集合来存储. Query query=session.createQuery("from Student"); List<Student> list=query.list(); for(List l:list){ System.out.println(l); } 注意:HQL是面向对象的查询,查询的是类,不像sql一样,直接查询表.因此在from 后面加的是类名(注意大小写).list()方法会根据查询的类名然后去映射文件中找到相应的数据库表,此时便把HQL语句解析成sql语句.再查询到相应的记录,最后返回记录的持久化对象的集合.查看全部
-
hql中查询一个字段 返回的是List<Object>对象,查询多个字段返回的是List<Object[]>,查询所有字段返回的是List<实体类>对象,建议多使用别名来区分不同表中的相同字段 String hql="select s.name,s.tel,s.address,s.star from Seller s "; Query query=session.createQuery(hql); List<Object[]> list=query.list(); for (Object[] objects : list) { System.out.println(" name : "+objects[0]); System.out.println(" tel : "+objects[1]); System.out.println(" address : "+objects[2]); System.out.println(" star : "+objects[3]); System.out.println(""); }查看全部
-
HQL语句中可以直接使用"from 类名"就可以查询到此类对应数据库表中的所有信息.不需要像sql那样"select*from 表名",直接"form 类名"即可. list()方法返回的是HQL语句所查询的类的持久化对象的集合.所以一般定义一个带泛型的List集合来存储. Query query=session.createQuery("from Student"); List<Student> list=query.list(); for(List l:list){ System.out.println(l); } 注意:HQL是面向对象的查询,查询的是类,不像sql一样,直接查询表.因此在from 后面加的是类名(注意大小写).list()方法会根据查询的类名然后去映射文件中找到相应的数据库表,此时便把HQL语句解析成sql语句.再查询到相应的记录,最后返回记录的持久化对象的集合. 对于Hiberante5.2.4,query.list()方法已经弃用: public class SelletTest { private Session session; private Transaction transaction; @Before public void setUp() { session = HibernateSessionFactory.openSession(); transaction=session.beginTransaction(); } @Test public void selletTest() { String hql = "from Seller"; Query query = session.createQuery(hql, Seller.class); // 注:hibernate5.2.4已经弃用了query.list()方法 List<Seller> sellers = query.getResultList(); for (Seller seller : sellers) { System.out.println(seller); } } @After public void destroy(){ } })查看全部
-
*****HQL语句形式******* select子句:用来指定查询结果中的对象和属性,并指定以何种数据类型返回 (在最前面) from子句:用来指定hql语句的查询目标,即映射配置的持久化类及其属性 where子句:逻辑表达式,用来设置查询条件,限制返回结果和范围 group by子句:分组查询语句 having子句:对分组进行限制条件设置 order by子句:用来指定查询结果中的实例对象的排序 注:From子句在HQL语句中不可或缺的组成部分,一个最简单的HQL语句形式只要有from就可以了,其他的子句都可以省略,这点与SQL语句不同查看全部
-
rom子句中别名的引用: 1.为被查询的类指定别名 2.在HQL语句其他部分通过别名引用该类 3.别名命名习惯,参考Java变量的命名习惯 为类指定别名:from Seller as s/from Seller s,要保留代码的可读性 from子句中别名的应用 1.为被查询的类指定别名 2.在HQL语句其他部分通过别名引用该类 3.别名命名习惯 from Seller 别名:seller 单字母:s查看全部
-
1.[not] in (列表)是一个候选值列表,这个候选值列表可以明确的指出也可以是一个子查询。只有属性值存在才会返回一个true,否则不存在返回一个false值。<br> 2.[not] between 值1 and 值2.只要属性值介于两个值之间就返回一个true否则返回一个false。 最后可以通过not运算符对我们的结果进行取反。查看全部
-
HQL语句形式
【1】select...指定查询结果中的对象和属性,并指定以何种数据类型来返回,位置在HQL语句中排在最前面。
【2】from...指定HQL语句的查询目标,必须项(映射配置的持久化类及其属性)
【3】where...逻辑表达式,设置查询的条件,限制返回查询结果的范围
【4】group by...分组查询子句
【5】having...对分组条件进行限制
【6】order by...指定查询结果中实例对象的排序
查看全部 -
以Object[]形式返回选择的属性 1.select子句中未指定返回数据类型,默认为Object[] HQL的select查询语句中,如果指定了多个查询字段,则返回的是一个Object[]数组;如果只指定了一个查询字段,则返回的是一个Object对象。 e.g. public void testSelect(){ String hql="select s.name,s.tel,s.address from Seller s"; Query query=session.createQuery(hql); List<Object[]> lists=query.list(); for (Object[] list : lists) { System.out.println("name:"+list[0]); System.out.println("tel:"+list[1]); System.out.println("address"+list[2]); } } //如果是单个查询字段的话就只需要把上面的Object[]中的[]去掉,打印输出时不需要指明下标
查看全部 -
HQL定义: 1、HQL:Hibernate Query Lauguage,Hibernate查询语言; 2、HQL是面向对象的查询语言(即以面向对象的角度进行查询),它查询的主体是映射配置的持久化类及其属性,与SQL查询主体是数据库表是完全不同的,除此之外,从数据库查询方面的功能上来讲,SQL能实现的数据库查询功能,HQL几乎可以同样实现。实际上作为一个ORM对象关系映射框架,Hibernate框架会将编写好的HQL语句解析成SQL语句来完成最终的数据库查询操作。 3、HQL提供了丰富灵活的查询特性,是Hibernate官方推荐查询方式。查看全部
-
查询单个对象: query接口的uniqueResult方法 1.该方法的返回是实例对象而不是返回集。 2.需要注意的是我们必须要通过where将查询得到的记录只剩下一条或者查询不到。如果有一条以上就会发生异常。查看全部
举报