Hibernate查询

大概就这5种查询方式:

package com.cstp.hibernate;

import java.util.List;
import java.util.logging.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;

public class QueryUser {

@SuppressWarnings("unchecked")
public static void main(String[] args) {
     Logger log = Logger.getAnonymousLogger();
   Configuration cfg = new Configuration().configure();//from xml
        SessionFactory factory = cfg.buildSessionFactory();
  
   Session session = factory.openSession();
   log.info("==========1=============");
//=================1========================
   SQLQuery sq = session.createSQLQuery("select * from test");
   List<Object[]> list1 = sq.list();
   //list1 的结构([username,password],[username,password],[username,password],…)
   for(Object[] obj:list1){
    for(Object o:obj){
    log.info(o.toString());
   }
    log.info("************");
   }
   log.info("==========2=============");
//=================2========================
   Criteria ct=session.createCriteria(com.cstp.hibernate.User.class);
   ct.add(Restrictions.eq("username", "chenlong"));
   List<User> list2 = ct.list();
   for(User user:list2){
    log.info("username:"+user.getUsername() +"tpassword:"+ user.getPassword());
   }
   log.info("===========3============");
   //=================3========================  
   DetachedCriteria dc=DetachedCriteria.forClass(com.cstp.hibernate.User.class);
   dc.add(Restrictions.eq("password", "123"));
   List<User> list3 = dc.getExecutableCriteria(session).list();
   for(User user:list3){
    log.info("username:"+user.getUsername() +"tpassword:"+ user.getPassword());
   }
   log.info("============4===========");
//=================4========================  
   //Query query = session.createQuery("from User test");
   Query query = session.createQuery("from User");//2种写法都可以
  
   List<User> list4 = query.list();
   for(User user:list4){
    log.info("username:"+user.getUsername() +"tpassword:"+ user.getPassword());
   }
   log.info("============5===========");
//=================5 取得一个已被填充了属性的对象,符合条件的有多条,取第一条========================

   User user = (User) session.load(User.class, new String("402890ac232ba99801232ba999a70001"));
   log.info("username:"+user.getUsername() +"tpassword:"+ user.getPassword());
}

}
运行结果:

2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ==========1=============
Hibernate: select * from test
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 402890ac232ba99801232ba999a70001
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: chenlong
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 123
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 12:00:18.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 12:00:18.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ************
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 402890ac232ba9e001232ba9e1fb0001
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: hww
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 123
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 12:00:36.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 12:00:36.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ************
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 402890ac232baa3c01232baa3e250001
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: liwei
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 333333
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 12:01:00.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 12:01:00.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ************
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 402890ac232c9eec01232c9eee280001
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: zhu
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 123456
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 16:28:16.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: 2009-08-18 16:28:16.0
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ************
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ==========2=============
Hibernate: select this_.id as id0_0_, this_.username as username0_0_, this_.password as password0_0_, this_.createTime as createTime0_0_, this_.expireTime as expireTime0_0_ from test this_ where this_.username=?
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:chenlong password:123
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ===========3============
Hibernate: select this_.id as id0_0_, this_.username as username0_0_, this_.password as password0_0_, this_.createTime as createTime0_0_, this_.expireTime as expireTime0_0_ from test this_ where this_.password=?
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:chenlong password:123
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:hww password:123
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ============4===========
Hibernate: select user0_.id as id0_, user0_.username as username0_, user0_.password as password0_, user0_.createTime as createTime0_, user0_.expireTime as expireTime0_ from test user0_
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:chenlong password:123
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:hww password:123
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:liwei password:333333
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:zhu password:123456
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: ============5===========
2009-8-18 19:27:28 com.cstp.hibernate.QueryUser main
信息: username:chenlong password:123

1方式:尽管sql语句写法灵活,但是结果显然不好。

2方式,3方式:只能加where限制条件,不能固定自己想查哪些字段,就是select * from 。。。(但是也没影响,不用的字段值放那不用也行)。

4方式:用的HQL语言:sql语句也灵活。

HQL 语法与SQL一致,区别在于:
   1 如果查询一个对象的结果集,可以省略select部分,只用from
   2 from 的内容可以是Mapping配置中的类名也可以是Mapping配置中的表名
   3 使用group by 的时候,select不可以省略
   4 分组查询结果不会映射成对象

5方式:要取得数据库的一条记录作为对象也很不错。

此条目发表在 Hibernate 分类目录,贴了 , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>