Hibernate的查询方式具有面向对象的思想
在查询的时候,都是动过gei(id)的方式查询一条数据,然后Hibernate自动设置进去到POJO类对象,返回一个代理类给我们
这里有两个类,就不写get()和set()方法了
学生类
public class Student {
private int id;
private String name;//姓名
private String stuCode;//学号
private String gender;//性别
private String age;//年龄
private int classId;//班级id
}
班级类
public class ClassInfo {
private int Id;//班级id
private String classCode;//班级编号
}
这种情况,如果一次要拿到学生的信息和班级信息
需要查询两次
第一次
Student stu = studentDao.get(id);
第二次
ClassInfo ci = classInfoDao.get(stu.getClassId());
或者
String hql = "SELECT s.name, s.stuCode, c.classCode FROM student AS s, classInfo AS c WHERE s.classId=c.id";
根据这个查询语句,调用query.list()方法得到一个List集合,
这个List中的每个对象都是Object类型,里面包含了查询出来的所有值。
但是Hibernate还支持另一种方式,就是增加一个新的映射类
这个新的映射类的属性,应该包含素有你需要查找的字段以及get()和set()方法
更重要的是,需要新增一个构造函数,这个构造函数的参数为你需要查询出来的属性,并且在构造函数里面为其赋值。
例如 【此处省略get()set()】
public class StuAndClass {
//有参构造
StuAndClass(String name, String stuCode, String classCode){
this.name = name;
this.stuCode = stuCode;
this.classCode = classCode;
}
//用于接收查询结果的属性
private String name;//姓名
private String stuCode;//学号
private String classCode;//班级编号
}
然后查询的时候
String hql = "SELECT new com.test.StuAndClass(s.name, s.stuCode, c.classCode) FROM Student AS s, ClassInfo AS c WHERE s.classId = c.id";
通过 query.list() 方法,得到 StuAndClass 的List集合