分享

Hibernate HQL查询

 静女奇姝 2016-11-14
   在说说什么是投影查询:查询一个或多个属性,但不全部查询,这就是投影查询投影查询有三种方式:
1.直接查   2.查询返回对象      3.查询返回Map键值对
=======================================================
//投影查询方法1:直接使用select 属性  from 类名的方式查询
public void list1(){
   Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession();
   //开启事务Transaction tx = session.beginTransaction();
   Query query = session.createQuery("select name,title from Guestbook");
   List<Object[]> list = query.list();for(Object[] o:list){
      System.out.println("姓名:"+o[0]);}tx.commit();
   }

  /** 投影查询方法2  ---   使用select new 类名(属性名...) from 类名的方式,返回实体类* 注意:如何   使用实体类的方式,那么必须在实体类中有这样的构造方法*/
public void list2(){
    Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession();
    //开启事务Transaction tx = session.beginTransaction();
    Query query = session.createQuery("select new Guestbook(id,name,title) from Guestbook");
    List<Guestbook> list = query.list();
    for(Guestbook gb:list){
       System.out.println("编号:"+gb.getId()+",姓名:"+gb.getName()+",标题:"+gb.getTitle());
    }
   tx.commit();}

/** 投影查询方法3  ---   使用select new Map(属性名...) from 类名的方式,返回Map集合,通过下标获取属性值* 注意:如何使用实体类的方式,那么必须在实体类中有这样的构造方法*/
public void list3(){
   Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession();
   //开启事务
   Transaction tx = session.beginTransaction();
   //在遍历Map是就可以根据编号获取属性值
   //Query query = session.createQuery("select new Map(id,name,title) from Guestbook");
   //使用属性的别名,在遍历Map是就可以根据名称获取属性值
   Query query = session.createQuery("select new Map(gb.id as id,gb.name as name,gb.title as title) from Guestbook gb");
   List<Map> list = query.list();
   for(Map m:list){
       //注意:这里的编号不是Integer类型,而是String类型
       System.out.println("编号:"+m.get("id")+",姓名:"+m.get("name")+",标题:"+m.get("title"));
   }
   tx.commit();

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多