HIbernate多表查询4种方法

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懒加载机制

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值