注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

KSM的博客-只爱你一个

去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。

 
 
 

日志

 
 

Hibernate 6种查询  

2011-10-09 15:00:43|  分类: java笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

从其他地方看来的hibernate查询的6种方法。分别是

HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询

HQL查询

HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:

static void query(String name){
  Session s
=null;
  
try{
   s
=HibernateUtil.getSession();
   //from后面是对象,不是表名
   String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
   Query query=s.createQuery(hql);
   query.setString(
"name", name);
   List<Admin> list=query.list();
   for(Admin admin:list){
    System.out.println(admin.getAname());
   }
  }
finally{
   
if(s!=null)
   s.close();
  }
 }
适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架
 
 

对象化查询Criteria方法

 

static void cri(String name,String password){
  Session s
=null;
  
try{
   s
=HibernateUtil.getSession();
   Criteria c
=s.createCriteria(Admin.class);
   c.add(Restrictions.eq(
"aname",name));//eq是等于,gt是大于,lt是小于,or是或
   c.add(Restrictions.eq("apassword", password));

   List<Admin> list=c.list();
   
for(Admin admin:list){
    System.out.println(admin.getAname());
   }
  }
finally{
   
if(s!=null)
   s.close();
  }
 }

 

适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。

 

动态分离查询DetachedCriteria

 

static List dc(DetachedCriteria dc) {

  Session s 
= HibernateUtil.getSession();
  Criteria c 
= dc.getExecutableCriteria(s);
  List rs 
= c.list();
  s.close();
  
return rs;
 }

 

 

DetachedCriteria dc = DetachedCriteria.forClass(User.class);
  
int id = 1;
  
if (id != 0)
   dc.add(Restrictions.eq(
"id", id));
  Date age 
= new Date();
  
if (age != null)
   dc.add(Restrictions.le(
"birthday", age));
  List users 
= dc(dc);
  System.out.println(
"离线查询返回结果:" + users);
 

适用情况:面向对象操作,分离业务与底层,不需要字段属性摄入到Dao实现层。  缺点:适用面较HQL有限。

 

 

例子查询

static List example(User user) {
  Session s 
= HibernateUtil.getSession();
  List
<User> users = s.createCriteria(User.class).add(
    Example.create(user)).list();
  
// List<User>
  
// users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
  
// .createCriteria("child").add((Example.create(user))).list();
  return users;
 }
 
 

适用情况:面向对象操作。   缺点:适用面较HQL有限,不推荐。


sql查询

static List sql(String name) {

  Session s 
= HibernateUtil.getSession();
  Query q 
= s.createSQLQuery("select * from user").addEntity(User.class);
  /**Query q = s.createSQLQuery(" select * from login_user as u where u.login_name = :loginName order by u.login_name DESC ");
  *q.setString("loginName",name);
  *List<User> rs = q.list();
  */
  List<User> rs = q.list();
  s.close();
  
return rs;
 }
 

适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法   缺点:破坏跨平台,不易维护,不面向对象。

 

命名查询 将在下一篇文章中重点介绍几种NamedQuery;

  评论这张
 
阅读(2774)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018