4.基于in查询
eg:List<Student> list = session.createQuery(hql)
.setParameterList("Sid",new Integer[]{1,3,4})
.list();
5.基于投影的HQL查询
HQL投影查询是查询一个持久化类的一个或多个属性值
将每条查询结果封装成Object对象
将每条查询结果封装成Object数组
将每条查询结果通过构造函数封装成对象
eg: @Test
public void testPartCol(){
Session session = null;
try {
session = util.getSession();
//字段名要和数据库中的字段名对应
String hql = "select sid,sname from Student";
List<Object[]> list = session.createQuery(hql).list();
for(Object[] stu : list){
System.out.println("sid:"+stu[0]+",sname:"+stu[1]);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
util.close(session);
}
}
6.基于构造函数查询
--构造函数预先存在于类中
eg:
/**
* 投影查询 (对象)
*/
@Test
public void testPartCol2(){
Session session = null;
try {
session = util.getSession();
String hql = "select new Student(sname,sage) from Student";
List<Student> list = session.createQuery(hql).list();
for(Student stu : list){
System.out.println("姓名:"+stu.getSname()+",年龄:"+stu.getSage());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
util.close(session);
}
}
7.唯一结果查询
--当确定hql查询返回的结果有且只有一条时,可以使用该方法
eg: Student stu = (Student) session.createQuery(hql)
.setParameter("id",5)
.uniqueResult();
8.聚合函数查询
String hql ="select count(Sid) from Student";
eg:Long count = (Long) session.createQuery(hql).uniqueResult();
9.分页查询
String hql ="from Student";
eg:List<Student> list = session.createQuery(hql)
.setFirstResult(3)
.setMaxResults(3)
.list();
10.链式查询
String hql ="select h from House h";
eg:List<House> list = session.createQuery(hql)
.list();
11.导航(链式)查询
String hql ="from House h where h.stu.sid= :stuid ";
eg:List<House> list = session.createQuery(hql)
.setParameter("stuid",4)
.list();
12.内连接查询
String hql ="select h.title,stu.sname from House h inner join Student stu on h.stu.sid = stu.sid";
eg:List<Object[]> list = session.createQuery(hql)
.list();
for(Object[] objs : list){
System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);
}
13.外链接查询:
eg:String hql ="select h.title,stu.sname from House h left join Student stu on h.stu.sid = stu.sid";
List<Object[]> list = session.createQuery(hql)
.list();
for(Object[] objs : list){
System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);
}
eg:String hql ="select h.title,stu.sname from House h right join Student stu on h.stu.sid = stu.sid";
List<Object[]> list = session.createQuery(hql)
.list();
for(Object[] objs : list){
14.基于DTO查询:
DAO(Data Access Object):数据访问对象
DTO(Data Transfer Object):数据传输对象
注意:
①使用的dto类一定要写类全名
②如果DTO类中的属性和查找实体属性不一致时,一定要显示使用as进行别名转换
String hql ="select new com.ibeifeng.hibernate.model.HouseDto(h.title as htitle,stu.sname as uname) from House h left join Student stu on h.stu.sid = stu.sid";
eg: List<HouseDto> list = session.createQuery(hql)
.list();
相关异常:
java.lang.ClassCastException:
java.lang.Long cannot be cast to java.lang.Integer --无法转换为lang类型
eg:List<Student> list = session.createQuery(hql)
.setParameterList("Sid",new Integer[]{1,3,4})
.list();
5.基于投影的HQL查询
HQL投影查询是查询一个持久化类的一个或多个属性值
将每条查询结果封装成Object对象
将每条查询结果封装成Object数组
将每条查询结果通过构造函数封装成对象
eg: @Test
public void testPartCol(){
Session session = null;
try {
session = util.getSession();
//字段名要和数据库中的字段名对应
String hql = "select sid,sname from Student";
List<Object[]> list = session.createQuery(hql).list();
for(Object[] stu : list){
System.out.println("sid:"+stu[0]+",sname:"+stu[1]);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
util.close(session);
}
}
6.基于构造函数查询
--构造函数预先存在于类中
eg:
/**
* 投影查询 (对象)
*/
@Test
public void testPartCol2(){
Session session = null;
try {
session = util.getSession();
String hql = "select new Student(sname,sage) from Student";
List<Student> list = session.createQuery(hql).list();
for(Student stu : list){
System.out.println("姓名:"+stu.getSname()+",年龄:"+stu.getSage());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
util.close(session);
}
}
7.唯一结果查询
--当确定hql查询返回的结果有且只有一条时,可以使用该方法
eg: Student stu = (Student) session.createQuery(hql)
.setParameter("id",5)
.uniqueResult();
8.聚合函数查询
String hql ="select count(Sid) from Student";
eg:Long count = (Long) session.createQuery(hql).uniqueResult();
9.分页查询
String hql ="from Student";
eg:List<Student> list = session.createQuery(hql)
.setFirstResult(3)
.setMaxResults(3)
.list();
10.链式查询
String hql ="select h from House h";
eg:List<House> list = session.createQuery(hql)
.list();
11.导航(链式)查询
String hql ="from House h where h.stu.sid= :stuid ";
eg:List<House> list = session.createQuery(hql)
.setParameter("stuid",4)
.list();
12.内连接查询
String hql ="select h.title,stu.sname from House h inner join Student stu on h.stu.sid = stu.sid";
eg:List<Object[]> list = session.createQuery(hql)
.list();
for(Object[] objs : list){
System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);
}
13.外链接查询:
eg:String hql ="select h.title,stu.sname from House h left join Student stu on h.stu.sid = stu.sid";
List<Object[]> list = session.createQuery(hql)
.list();
for(Object[] objs : list){
System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);
}
eg:String hql ="select h.title,stu.sname from House h right join Student stu on h.stu.sid = stu.sid";
List<Object[]> list = session.createQuery(hql)
.list();
for(Object[] objs : list){
System.out.println("标题:"+objs[0]+",发布人:"+objs[1]);
}14.基于DTO查询:
DAO(Data Access Object):数据访问对象
DTO(Data Transfer Object):数据传输对象
注意:
①使用的dto类一定要写类全名
②如果DTO类中的属性和查找实体属性不一致时,一定要显示使用as进行别名转换
String hql ="select new com.ibeifeng.hibernate.model.HouseDto(h.title as htitle,stu.sname as uname) from House h left join Student stu on h.stu.sid = stu.sid";
eg: List<HouseDto> list = session.createQuery(hql)
.list();
相关异常:
java.lang.ClassCastException:
java.lang.Long cannot be cast to java.lang.Integer --无法转换为lang类型