Hibernate的八大类HQL查询集合

Hibernate的八大类HQL查询集合:

一:属性查询(SimplePropertyQuery)

1,单一属性查询

*返回结果集属性列表,元素类型和实体类中相应的属性一致

2,多个属性查询,

*返回集合中的元素是object数组,

*其中数组元素的类型和对应属性在实体类中的类型一致

代码:

for(Iteratoriterator=list.iterator();iterator.hasNext();)

{

Object[]obj=(Object[])iterator.next();

System.out.println("sid:="+obj[0].toString()+"sname:="+obj[1]);

}

3,通过hql来动态实例化对象

代码:

Listlist=session.createQuery("selectnewStudent(sid,sname)fromStudent").list();

for(Iteratoriterator=list.iterator();iterator.hasNext();){

Studentstudent=(Student)iterator.next();

System.out.println("sid:="+student.getSid()+"sname:="+student.getSname());

}

4,采用别名查询

代码:

//Listlist=session.createQuery("selects.sid,s.snamefromStudentass").list();

Listlist=session.createQuery("selects.sid,s.snamefromStudents").list();

二:简单对象查询(SimplyObjectQuery)

1,返回对象集合(可以忽略select)

代码:

//Listlist=session.createQuery("fromStudent").list();

//Listlist=session.createQuery("fromStudentass").list();

Listlist=session.createQuery("fromStudents").list();

2,采用select查询对象

*必须要使用别名

代码:

//Listlist=session.createQuery("selectsfromStudentass").list();

Listlist=session.createQuery("selectsfromStudents").list();

3,查询单一对象的操作

代码:

Objectobj=session.createQuery("selectsfromStudentswheres.sid=:mysid")

.setParameter("mysid",12)

.uniqueResult();

4,分页查询

*setFirstResult(intfirstResult)

*Setthefirstrowtoretrieve.

*Ifnotset,rowswillberetrievedbeginnningfromrow0.

*firstResult-arownumber,numberedfrom0

代码:

Listlist=session.createQuery("selectsfromStudents")

.setFirstResult(5)

.setMaxResults(5)

.list();

三:简单条件查询(SimpleConditionQuery)

1,可以拼凑字符串

代码:

ListstuList=session.createQuery("selects.sid,s.snamefromStudentasswheres.snamelike'%1%'").list();

2,注意:可以采用?占位的方式来传递参数

*参数的索引从0开始

*传递的参数值不能用''号括起来

*注意方法链编程

代码:

/*

*Queryquery=ession.createQuery("selects.sid,s.snamefromStudentasswheres.snamelike?");

*query.setParameter(0,"%1%");

*ListstuList=query.list();

*/

ListstuList=session.createQuery("selects.sid,s.snamefromStudentasswheres.snamelike?")

.setParameter(0,"%1%")

.list();

3,通过参数名(:参数名)传参的方式进行查询

代码:

/*Objectobj=session.createQuery("selects.sid,s.snamefromStudentasswheres.snamelike:mynameands.sid=:myid")

.setParameter("myname","%1%")

.setParameter("myid",98)

.uniqueResult();//.list();

Object[]objs=(Object[])obj;

System.out.println("s.sid:="+objs[0].toString()+"s.sname:="+objs[1].toString());

*/

ListstuList=session.createQuery("selects.sid,s.snamefromStudentasswheres.snamelike:mynameands.sid=:myid")

.setParameter("myname","%1%")

.setParameter("myid",98)

.list();

4,传递多个参数的查询

*支持in查询,需要setParameterList("myids",newObject[]{12,13,14})的方式进行参数传递

代码:

ListstuList=session.createQuery("selects.sid,s.snamefromStudentasswheres.idin(:myids)")

.setParameterList("myids",newObject[]{12,13,14})

.list();

5,查询2009年2月入学的学员信息

*支持Sql函数查询

代码:

ListstuList=session.createQuery("selects.sid,s.sname,s.schoolDatefromStudentasswhereyear(s.schoolDate)=:myyearandmonth(s.schoolDate)=:mymonth")

.setParameter("myyear",2009)

.setParameter("mymonth",2)

.list();

6,查询2009-02-10到2009-02-15号入学的学员信息

*注意:在进行日期查询时

*setParameter("startDate",formatter.parse("2009-02-1000:00:00"))

*方法中第二个参数是一个Object对象(Date类型对象)

代码:

SimpleDateFormatformatter=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");

ListstuList=session.createQuery("selects.sid,s.sname,s.schoolDatefromStudentasswheres.schoolDatebetween:startDateand:endDate")

.setParameter("startDate",formatter.parse("2009-02-1000:00:00"))

.setParameter("endDate",formatter.parse("2009-02-1523:59:59"))

.list();

四:原生SQL语句查询(SqlQueryTest_4)

*这里用的是createSQLQuery().list();

代码:

ListstuList=session.createSQLQuery("select*fromStudent").list();

五:外置命名查询(NamedQueryTest_5)

*1.在映射文件中采用<query>标签来定义HQL语句,不必限定文件!!!注意:映射文件中的HQL语句不可以出错,否则会导致QuerySyntaxException,特别是要查询的实体类名写错的情况。(Errorinnamedquery:selectAllStudentsorg.hibernate.hql.ast.QuerySyntaxException:Studentsisnotmapped)。

*2.在程序中通过session.getNamedQuery(hql_name)得到查询语句

代码:

Listlist=session.getNamedQuery("selectAllStudents")

.setParameter("mysid",12).list();

六:对象导航查询(ObjectNavQueryTest_6)

代码:

Listlist=session.createQuery("selects.snamefromStudentasswheres.clsInfo.cnamelike:myname")

.setParameter("myname","%1%")

.list();

七:联合查询(JoinQueryTest_7)

1,联合查询*内连接查询

*获取已经参加班级报名的所有学生名号和其所在班级名称

代码:

Listlist=session.createQuery("selects.sname,c.cnamefromStudentassjoins.clsInfoasc").list();

2,联合查询*左连接查询

*获取所有班级名称和其学员姓名

*以班级信息表为主表,进行左外连接查询

代码:

Listlist=session.createQuery("selectc.cname,s.snamefromClassInfoascleftjoinc.studentSetass").list();

3,联合查询*右连接查询

*获取所有学员姓名和其所属班级名称

*以学员信息表为主表,进行右外连接查询

代码:

Listlist=session.createQuery("selects.sname,c.cnamefromClassInfoascrightjoinc.studentSetass").list();

八:(StateQueryTest_8)

1,聚合函数使用

代码:

//Listlist=session.createQuery("selectcount(*)fromStudent").list();

//longcount=(Long)list.get(0);

longcount=(Long)session.createQuery("selectcount(*)fromStudent").uniqueResult();

2,分组查询

代码:

Listlist=session.createQuery("selectc.cname,count(s)fromStudentassinnerjoins.clsInfoascgroupbyc.cnameorderbyc.cname").list();

相关推荐