hibernate mysql 多表查询_Hibernate ORM框架——Hibernate分页查询and多表查询

package com.nf;

import java.util.List;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.query.Query;

import shuang.m2oo2m.Person;

import util.HibernateUtil;public classMain {public static voidmain(String[] args) {//多表连接//内连接//innerQuery();//左外连接1:以Person为主表//leftOuterJoin();//左外连接2:以ClassInfo为主表//leftOuterJoin2();

fetchJoin() ;

}private static voidinnerQuery() {

SessionFactory sf=HibernateUtil.getSessionFactory();

Session s=sf.openSession();

Transaction tx=s.beginTransaction();/*inner join p.ci中的p.ci是通过实体对象Person中的属性ci映射找到对应的班级信息而来*/String hql= "select p from Person p inner join p.ci c";

Query q=s.createQuery(hql);

List list =q.list();for(Person p: list){

System.out.println(p);

}

tx.commit();

s.close();

sf.close();/*结果

Person [pid=p1, name=p111]

Person [pid=p2, name=p222]

Person [pid=p3, name=p333]

Person [pid=p4, name=p444]

**/}private static voidleftOuterJoin() {

SessionFactory sf=HibernateUtil.getSessionFactory();

Session s=sf.openSession();

Transaction tx=s.beginTransaction();

String hql= "select p from Person p left join p.ci c";

Query q=s.createQuery(hql);

List list =q.list();for(Person p: list){

System.out.println(p);

}/*结果

Person [pid=p1, name=p111]

Person [pid=p2, name=p222]

Person [pid=p3, name=p333]

Person [pid=p4, name=p444]

Person [pid=p5, name=p555]

**/tx.commit();

s.close();

sf.close();

}/** 此方法演示的是,链接的时候,如果select多个实体

* 返回的是对象数组,而不是Person 的list集合

* 这样导致取数据的时候麻烦*/

private static voidleftOuterJoin2() {

SessionFactory sf=HibernateUtil.getSessionFactory();

Session s=sf.openSession();

Transaction tx=s.beginTransaction();

String hql= "select p,c from Person p left join p.ci c";

Query q=s.createQuery(hql);

List list =q.list();for(Object[] data: list){

System.out.println(data[0]);

System.out.println(data[1]);

}/*结果

Person [pid=p1, name=p111]

ClassInfo [cid=c111, name=banji1]

Person [pid=p2, name=p222]

ClassInfo [cid=c111, name=banji1]

Person [pid=p3, name=p333]

ClassInfo [cid=c222, name=banji2]

Person [pid=p4, name=p444]

ClassInfo [cid=c222, name=banji2]

Person [pid=p5, name=p555]

null

**/tx.commit();

s.close();

sf.close();

}/*返回的是整个Person类里有的所有属性*/

private static voidfetchJoin() {

SessionFactory sf=HibernateUtil.getSessionFactory();

Session s=sf.openSession();

Transaction tx=s.beginTransaction();

String hql= "select p from Person p left join fetch p.ci c";

Query q=s.createQuery(hql);

List list =q.list();for(Person p: list){

System.out.println(p);

System.out.println(p.getCi().getName());

}/*结果:

Person [pid=p1, name=p111]

banji1

Person [pid=p2, name=p222]

banji1

Person [pid=p3, name=p333]

banji2

Person [pid=p4, name=p444]

banji2

Person [pid=p5, name=p555]

**/tx.commit();

s.close();

sf.close();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值