Hibernate中的核心接口query接口用法

Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句。

Query接口的用法:

通过SessionFactory获得了session对象后,除了可以通过get(类名.class, id)方法得到相应的对象,还可以通过获得Query对象来取得需要的对象 

<span style="font-size:24px;">Query query = session.createQuery("查询语句如from UserBean");</span>

Query对象在Session对象关闭之前有效,否则会抛出SessionException异常。因为Session对象就想JDBC中的Connection 对象,即数据库的一次连接。关闭Connection对象,Statement对象就不能再使用,所以关闭Session后就不能再使用Query对象了。

Query接口的方法:


Query接口的常用方法:

1,setxxx():用于设置HQL语句中问号或者变量的值;

设置HQL语句中问号或者变量的值有两种使用方式:

A,setString(int position,String value);设置HQL中的“?”的值,其中position代表“?”在HQL中的位置,value是要为“?”设置的值

例:

Query query=session.createQuery("from UserInfoPO u where u.age>? and u.useName like ?");
  query.setInteger(0, 22);     //使用"?",第一个下标是从0开始的,给第一个问号赋值22
  query.setString(1, "%志%");   //设置第二个问号的值为“%志%”


B,setString(String paraName,String value);设置HQL中“:”后所跟变量的值;其中 paraName代表HQL中“:”后边的变量名,value是该变量的值:

例:

 Query query=session.createQuery("from UserInfoPO u where u.age>:minAge and u.useName like:useName");
    query.setInteger("minAge", 22);       //设置minAge的值
    query.setString("userName", "%志%");   //设置useName的值

2,list();返回查询结果,并把查询结果转换成list对象;

也可以用query.uniqueResult();//得到一个单个的对象 

 Query query=session.createQuery("from UserInfoPO u where u.age>:minAge and u.useName like:useName");
            query.setInteger("minAge", 22);       //设置minAge的值
            query.setString("userName", "%志%");   //设置useName的值
            List<UserInfoPO> list=query.list();
            
           for(int i=0;i<list.size();i++){
        	   ui=(UserInfoPO)list.get(i);
        	   System.out.println(ui.getUserName());
           }

3,executeUpdate();执行更新和删除语句

 Query query=session.createQuery("delete from UserInfoPO");
  query.executeUpdate();  //删除数据

分页查询:
query.setFirstResult(位置如0);//表示从哪个位置开始查询,返回query对象
query.setMaxResult(记录条数);//表示当页共几条记录,返回一个集合
session.createQuery("select count(*) from 类名").uniqueResult();//得到记录总数


介绍一些有关Query的查询语句

使用HQL删除数据:

   String hql = "delete user where age>18"; 
   Query query = session.createQuery(hql); 
   int ref = query.executeUpdate(); 
 
更新数据 :

   Transaction tx= session.beginTransaction(); 
   Query query = session.createQuery("update User set name='momor' where name='bbb'"); 
   query.executeUpdate(); 
   tx.commit(); 
   session.close(); 
也可以在where子句上进行表达式,and、or:
Query query = session.createQuery("from User user where (user.age / 10 = 3)"); 
Query query = session.createQuery("from User user where (user.age > 20) and (user.name = 
'caterpillar')"); 
is not nullL与is null则可以测试字段值是否为空值:

Query query = session.createQuery("from User user where user.name is not null"); 
between可以测试字段值是否在指定的范围之内:

Query query = session.createQuery("from User user where user.age between 20 and 30");

可以使用in或not in来测试字段值是否在您指定的集合中:

Query query = session.createQuery("from User user where user.name in('caterpillar', 'momor')");
like或not like可以让您进行模糊条件搜寻,例如想搜寻名称中含有cater开头的数据:

Query query = session.createQuery("from User user where user.name like 'cater%'"); 
对查询结果使用order by进行排序,可使用desc反排序:

Query query = session.createQuery("from User user order by user.age"); 
Query query = session.createQuery("from User user order by user.age desc, user.name"); 

代码应用:

 public static void query(String name) {
       Session session = null;
       try {
           session = HibernateSessionFactory.getSession();
          //定义hql语句,目的是:通过name查询所有
           String queryString = "from User as user where user.name=:n";     
           Query query = session.createQuery(queryString);
           query.setString("n", name);
          //查询出所有的name相同的
           List<User> list = query.list();// 得到所有的结果集
           for (User u : list) {
              System.out.println(u.toString());
           }
       } finally {
           if (session != null) {
              session.close();
           }
       }
    }














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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值