hibernate hql语句 投影查询的三种方式


投影查询有三种方式:

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();
}


原文链接:https://www.cnblogs.com/xusongfeng/p/9165674.html