转载

Hibernate——Query查询

原文地址

前两篇文章介绍了获取SessionFactory,Session,以及Session的三种状态及其之间的转换,本文势必要将大家最关心的问题做出介绍,也就是大家最关心的通过Hibernate提供的类和方法对数据库进行更深层次的查询。

本篇文章主要介绍Query的查询

1.首先介绍一下实体类

public class User {    //id字段,主键    private int id;    //用户名    private String username;    //密码    private String userpass;    //无参数构造方法    public User(){}    //有参数构造方法    public User(int id,String username,String userpass){     this.id=id;     this.username=username;     this.userpass=userpass;    }    public int getId() {     return id;    }    //相应的getter setter    public void setId(int id) {     this.id = id;    }    public String getUsername() {     return username;    }    public void setUsername(String username) {     this.username = username;    }    public String getUserpass() {     return userpass;    }    public void setUserpass(String userpass) {     this.userpass = userpass;    }   }    

2.介绍完实体类,便对数据库中的数据进行查询1)获取整个对象的所有字段

public static void main(String[] args) {     // TODO Auto-generated method stub     Session session=null;     Transaction tx=null;     session=HibernateSessionFactory.getSession();     tx=session.beginTransaction();     //查询整个对象的所有字段     String hql="from User";     Query query=session.createQuery(hql);     List<User> list=query.list();     Iterator its=list.iterator();     while(its.hasNext()){      User user=(User)its.next();      System.out.println(user.getId()+" "+user.getUsername()+" "+user.getUserpass());     }    }   Console 1 乔丹 123 2 罗德曼 123 

2)获取单一属性

public static void main(String[] args) {    // TODO Auto-generated method stub    Session session=null;    Transaction tx=null;    session=HibernateSessionFactory.getSession();    tx=session.beginTransaction();    //查询整个对象的所有字段    String hql="select id from User";    Query query=session.createQuery(hql);    List<java.lang.Integer> list=query.list();    Iterator its=list.iterator();    while(its.hasNext()){        int a=(java.lang.Integer)its.next();        System.out.println(a);    }       }   Console: 1 2  

3)查询多个属性查询多个属性时,返回的list集合元素类型为Object[]数组(即对象数组),这里注意的是集合元素为对象数组,不是集合为对象数组。

public static void main(String[] args) {    // TODO Auto-generated method stub    Session session=null;    Transaction tx=null;    session=HibernateSessionFactory.getSession();    tx=session.beginTransaction();    //查询整个对象的所有字段    String hql="select username,userpass from User";    Query query=session.createQuery(hql);    List<Object[]> list=query.list();   //iterator遍历 Iterator its=list.iterator();    while(its.hasNext()){        Object[] a=(Object[])its.next();        System.out.println(a[0].toString()+" "+a[1].toString());    }       }    

4)条件查询

String hql="from User where username=? and userpass=?";    Query query=session.createQuery(hql);    //第一种方式    //query.setString(0, "乔丹");    //query.setString(1,"123");    //第二种方式    query.setParameter(0,"乔丹",Hibernate.STRING);    query.setParameter(1, "123",Hibernate.STRING);    List<User> list=query.list();    for(User user:list){        System.out.println(user.getId());    }    

查询用户名为:乔丹,密码为123的成员。

两种方式,一种是setString的方式,另一种是setParameter的方式。

通过增强的for循环输出

Console:

1

当然还有自定义索引的条件查询方式

public static void main(String[] args) {    // TODO Auto-generated method stub    Session session=null;    Transaction tx=null;    session=HibernateSessionFactory.getSession();    tx=session.beginTransaction();    //查询整个对象的所有字段    String hql1="from User where username=:username and userpass=:userpass";    Query query1=session.createQuery(hql1);    //第一种方式    /*query.setString("username","乔丹");    * query.setString("userpass","123")    *     * */    //第二种凡是,第三个参数确定类型    query1.setParameter("username","乔丹",Hibernate.STRING);    query1.setParameter("userpass","123",Hibernate.STRING);    List<User> list1=query1.list();    for(User user:list1){        System.out.println(user.getId());    }       }   Console: 1  

Query查询方式还有很多,大多是在这上面进行的延伸,相比于Criteria查询方式,Query查询方式更加灵活,效率更高。

正文到此结束
Loading...