Hibernate查询多个表的数据的方法

来源:互联网 发布:mac 复制 ntfs 编辑:程序博客网 时间:2024/06/05 18:47

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;//班级idprivate 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集合