hibernate初学6之查询方式

xiaoxiao2021-02-28  148

HQL(hibernate Query Language) —一种面向对象的查询。 HQL对关键字的大小不区分,但是对查询的对象就要区分大小写。在sql中,如果要加条件的话就是列,在HQL中,条件就是对象的属性,而且要给对象起别名。 1.hibernate 一般查询 1)限制查询起始与结果

Query query=session.createQuery("from News"); query.setFirstResult(1); query.setMaxResults(3); List list=query.list(); for(int i=0;i<list.size();i++) { News news=(News) list.get(i); System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone()); } 2)条件查询 Query query=session.createQuery("from News news where news.name='11'"); List list=query.list(); for(int i=0;i<list.size();i++) { News news=(News) list.get(i); System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone()); }

news为News对象的别名,name不是数据表中的字段,而是cus对象中的属性name 2.取表中的部分列 1)单一属性查询,集合中是对象而不是表的实例

List names=session.createQuery("select name from News").list(); for(int i=0;i<names.size();i++) { String name= (String) names.get(i); System.out.println(name); } 2)多个属性的查询,使用对象数组 List dept=session.createQuery("select deptno,dname from Dept").list(); for(int i=0;i<dept.size();i++) { Object[] object= (Object[]) dept.get(i); System.out.println(object[0]+":"+object[1]);

这里注意,查询多个属性,其集合元素是对象数组,数组元素的类型,跟实体类的属性的类型相关。 3)多个属性的查询使用List集合存储部分列

Query query=session.createQuery("select new list(news.name,news.phone) from News news"); List list=query.list(); for(int i=0;i<list.size();i++) { List temp=(List) list.get(i); System.out.println(temp.get(0)+":"+temp.get(1)); } ```这种方法查询得到的结果集合中的存储是表的实例。所以temp.get0)对应news.name 4)使用Map集合存储部门列 <div class="se-preview-section-delimiter"></div>

这里写代码片 “`

Query query=session.createQuery("select new map(news.name,news.phone) from News news"); List list=query.list(); for(int i=0;i<list.size();i++) { Map temp= (Map) list.get(i); System.out.println(temp.get("11")); }

这里也是表的实例,以Map的形式存储,其中的Key为数据记录中的键码

由于内连接与外连接在此处实现起来比较麻烦,所以此处不给出代码,读者有兴趣可以自行查阅资料。

3.带参数的查询 1)?作为参数

Query query=session.createQuery("from News news where news.name=?"); query.setParameter(0, "11"); List list=query.list(); for(int i=0;i<list.size();i++) { News news=(News) list.get(i); System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone()); } 2)参数名称 Query query=session.createQuery("from News news where news.name=:name"); query.setParameter("name", "11"); List list=query.list(); for(int i=0;i<list.size();i++) { News news=(News) list.get(i); System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone()); } 3)条件查询,使用?方式穿参 Query query=session.createQuery("from News news where news.name LIKE ?"); query.setParameter(0, "%1%"); List list=query.list(); for(int i=0;i<list.size();i++) { News news=(News) list.get(i); System.out.println(news.getNewsID()+":"+news.getName()+":"+news.getPhone()); } 也可以使用 :参数的形式 与上面极其类似,这是不再赘述

4嵌入原生sql测试

SQLQuery sqlquary=session.createSQLQuery("select * from News"); List news=sqlquary.list(); for(Iterator iter =news.iterator();iter.hasNext();) { Object[] obj=(Object[]) iter.next(); System.out.println(obj[0]+"---------------------"+obj[1]+"------"+obj[2]); }

这里不再是HQL了,是原生的sql语句,所以得到的查询结果对象不再是Query而是SQLQuery

转载请注明原文地址: https://www.6miu.com/read-36905.html

最新回复(0)