1.投影查询
a.注意:基于投影的查询,通过列表中存储一个对象的数组
public void test08(){
Session session=null;
try {
session=HibernateUtil.openSession();
/**
* 基于投影的查询,通过列表中存储一个对象的数组
*/
List<Object[]> stus=session.createQuery("select stu.sex,count(*) from Student stu group by stu.sex").list();
for(Object[] obj:stus){
System.out.println(obj[0]+":"+obj[1]);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(session!=null) session.close();
}
}
2.基于in的查询
特别注意:使用in的查询,必须在其他查询之后,
@Test
public void test10(){
Session session=null;
try {
session=HibernateUtil.openSession();
List<Student> stus=session.createQuery("select stu from Student stu where stu.name like ? and stu.classroom.id in (:ids) ")
.setParameter(0,"%张%")
.setParameterList("ids", new Integer[]{1,2})
.list();
for(Student spe:stus){
System.out.println(spe.getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(session!=null) session.close();
}
}
3.分页查询
使用setFirstResult和setMaxResults完成分页查询
public void test11(){
Session session=null;
try {
session=HibernateUtil.openSession();
List<Student> stus=session.createQuery("select stu from Student stu where stu.classroom.id in (:ids) ")
.setParameterList("ids", new Integer[]{1,2})
.setFirstResult(0).setMaxResults(15)
.list();
for(Student spe:stus){
System.out.println(spe.getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(session!=null) session.close();
}
}
4.查询空对象
public void test12(){
Session session=null;
try {
session=HibernateUtil.openSession();
/**
* 可以通过is null 来查询为空的对象,和sql一样不能使用=;来查询空的对象
*/
List<Student> stus=session.createQuery("select stu from Student stu where stu.classroom is null")
.setFirstResult(0).setMaxResults(15)
.list();
for(Student spe:stus){
System.out.println(spe.getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(session!=null) session.close();
}
}
5.join 查询
使用join完成关联查询
public void test13(){
Session session=null;
try {
session=HibernateUtil.openSession();
/**
* 使用对象的导航可以完成连接,但是是基于笛卡尔积的连接效率不高
* 可以直接使用join来连接
*/
List<Student> stus=session
.createQuery("select stu from Student stu left join stu.classroom cla where cla.id=2")
.setFirstResult(0).setMaxResults(15)
.list();
for(Student spe:stus){
System.out.println(spe.getName());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(session!=null) session.close();
}
}