HIbernate多表查询4种方法
hibernate的4种查询方法中并不全部常用请按照个人的项目要求进行修改
ps:以下方法名均为本人自拟请勿用于正式文件
- 新建查询类方法
- 直接插入方法
- 直接查询方法
- 直接查询方法缩减版
新建查询类方法
本方法是利用已知的查询内容,在entity(实体类所在package)层新建一实体类来存储查询内容。
例如:有两个实体类,班级和学校,其中学校对班级为一对多关系
//hibernate hql语句 Tclass 为实体类名
String hql = "from Tclass t inner join t.school";
//Classes为新建的实体类,其中含有要查询的学校与班级的
List<Classes> list = new ArrayList<Classes>();
//数据库连接语句
Session session = HibernateSessionFactory.getSession();
//运行hql语句获得查询结果
Query q = session.createQuery(hql);
//将查询结果进行迭代处理
Iterator it = q.iterate();
//获取迭代器返回值,并对Classes进行赋值处理,最后将Classes存集合当中
while(it.hasNext()){
Object[] obj = (Object[]) it.next() ;
System.out.println(".....");
Classes cl = new Classes() ;
Tclass tc = (Tclass) obj[0] ;
School sch = (School) obj[1] ;
cl.setCid(tc.getCid()) ;
cl.setCname(tc.getCname()) ;
cl.setSid(sch.getSid()) ;
cl.setSname(sch.getSname()) ;
list.add(cl) ;
}
此后获取List 的返回值进行输出,此方法利用hibernate的懒加载机制
优点:清楚明了的显示你需要的字段的数据
缺点:过程繁琐,代码复用性差
直接插入方法
此方法是利用实体类中已有的连接方法进行赋值输出
例如:有两个实体类,班级和学校,其中学校对班级为一对多关系
//hibernate hql语句 Tclass 为实体类名
String hql = "from Tclass t inner join t.school";
List<Tclass> list = new ArrayList<Tclass>();
//数据库连接语句
Session session = HibernateSessionFactory.getSession();
//运行hql语句获得查询结果
Query q = session.createQuery(hql);
//将查询结果进行迭代处理
Iterator it = q.iterate();
//获取迭代器返回值,直接将school添加到tclass中已经存在的get方法中
while(it.hasNext()){
Object[] obj = (Object[]) it.next() ;
System.out.println("....");
Tclass tc = (Tclass) obj[0] ;
School sch = (School) obj[1] ;
tc.setSchool(sch) ;
list.add(tc) ;
}
此后获取List 的返回值进行输出
优点:代码内容明显清楚
缺点:依旧使用hibernate 的懒加载机制
直接查询方法
此方法是利用实体类中已有的连接方法直接进行输出
例如:有两个实体类,班级和学校,其中学校对班级为一对多关系
//hibernate hql语句 Tclass 为实体类名
String hql = "from Tclass t inner join fetch t.school";
List<Tclass> list = new ArrayList<Tclass>();
//数据库连接语句
Session session = HibernateSessionFactory.getSession();
//运行hql语句获得查询结果
Query q = session.createQuery(hql);
//直接返回集合
return q.list();
此后获取List 的返回值进行输出
优点:代码内容明显清楚,不经过hibernate懒加载机制,提高了代码的效率
直接查询方法缩减版
此方法是利用实体类中已有的连接方法直接进行输出
例如:有两个实体类,班级和学校,其中学校对班级为一对多关系
//hibernate hql语句 Tclass 为实体类名
String hql = "from Tclass";
List<Tclass> list = new ArrayList<Tclass>();
//数据库连接语句
Session session = HibernateSessionFactory.getSession();
//运行hql语句获得查询结果
Query q = session.createQuery(hql);
//直接返回集合
return q.list();
此后获取List 的返回值进行输出
优点:代码内容明显清楚
缺点:使用hibernate懒加载机制