Hibernate_QL

Hibernate Query Language

Hiberante中所支持的查询有:

 

OID检索方式

Ø OID对象标始符,按照对象的OID来检索对象。Session的get()和load()方法提供了这种功能。如果在应用程序中事先知道了OID,就可以使用这种检索对象的方式。

n  HQL检索方式

Ø 使用面向对象的HQL查询语言。Session的find()方法用于执行HQL查询语句。此外,Hibernate还提供了Query接口,它是Hibernate提供的专门的HQL查询接口,能够执行各种复杂的HQL查询语句。

n  QBC检索方式

Ø 使用(Query ByCriteria)API来检索对象。这种API封装了基于字符串形式的查询语句,提供了更面向对象的接口。

本地SQL检索方式

Ø 使用本地数据库的SQL查询语句。Hibernate会负责把检索到的JDBC ResultSet结果集映射成为对象图。

 

这里重点写写HQL和QBC,举一些常用的方法,具体还要到API中去查询了:

 

1.    Query查询(推荐使用)

[java]  view plain copy
  1. String hql =”from Users as user”;  
  2. String hql =”from Users ”;  
  3. String hql =”from Users as u”;  
  4. String hql =”from Users user”;  

a.设置占位符(必须一一对应)

[java]  view plain copy
  1. String hql ="from Users u where u.uid=? and u.uname=?";  
  2. Query query = session.createQuery(hql);//相当于JDBC中的预编译  
  3. query.setString(01+"");//下标从零开始  
  4. query.setString(1,"ysjian");  
  5. //但确定结果只有一个时可以用uniqueResult(),如果不止一个,会抛异常  
  6. Usersuser = (Users)query.uniqueResult();  


b.设置名称(要求名称对应就可以格式:u.uname=:uname)

  

[java]  view plain copy
  1. String hql = "from Users u where u.uid=:uid andu.uname=:uname and u.age  > :min";  
  2. Queryquery = session.createQuery(hql);  
  3. query.setString(“uname”, "ysjian");  
  4. query.setString(“uid”,1+"");  
  5. query.setInteger(“min”,22);  

还可以这么设置:

 

[java]  view plain copy
  1. Query query =session.createQuery(  
  2.              "from User u where u.uname = :name andu.uid > :uid")  
  3.              .setString("name","ysjian").setInteger("uid"1);  

c.分页查找

[java]  view plain copy
  1. String hql = "from Users u ";  
  2. Queryquery = session.createQuery(hql);  
  3. query.setFirstResult(0);//从第一个开始  
  4. query.setMaxResults(10);//取十个  


d.模糊查询

       //模糊查询,与sql语句查询语法一致

[java]  view plain copy
  1. String hql = "from UserInfowhere uname like '%ysj%'";            
  2. Query query =session.createQuery(hql);  
  3. List<UserInfo> list = query.list();  


e.不完整列查询

[java]  view plain copy
  1. <span style="WHITE-SPACE: pre"> </span>String hql = "select uname,upass fromUserInfo";  
  2.         Queryquery = session.createQuery(hql);  
  3.         List<Object[]>list = query.list();  
  4.               //当查询不完整列时返回的List集合装的是Object[]  
  5.         for (Object[] object : list) {  
  6.                     for(Object object2 : object) {  
  7.                              System.out.print(object2+"-->");  
  8.                     }  
  9.                     System.out.println();  
  10.          }  
  11.          HibernateSessionFactory.closeSession();  


à不完整查询返回对象的解决方案

     

[java]  view plain copy
  1.   //在实体类中增加一个含有要查询属性名参数的构造方法  
  2. String hql = "select new com.query.entity.Userinfo( uname,upass) fromUserInfo";  
  3.            Queryquery = session.createQuery(hql);  
  4. f.sql语法查询  
  5. String sql = "select * fromuserinfo";  
  6.        SQLQuerysqlQuery = session.createSQLQuery(sql);//创建sql查询  
  7.        sqlQuery.addEntity(UserInfo.class);//给对应的实体对象  
  8. List<UserInfo> list =sqlQuery.list();  

g.子查询

[java]  view plain copy
  1. String hql ="select f from Fileinfo f "+ "wheref.userinfo.uid in(select u.uid from  
  2. Userinfo u where u.state=1)";  
  3. Query query =session.createQuery(hql);  


h.连接查询

[java]  view plain copy
  1. String hql = "select ffrom Fileinfo f, Userinfo u " +"where u.state = 1 and f.userinfo.uid=u.uid";  
  2. Query query = session.createQuery(hql);  


------------------------------------------------------------------------------------

[java]  view plain copy
  1. String hql = "select ffrom Userinfo u  inner join u.fileinfos f where u.state=1 and u.uid=3";  
  2. Query query = session.createQuery(hql);  


2.    Criteria查询

[java]  view plain copy
  1. //uname是Users类中的属性,查找uname为ysjian的对象  
  2.         // criteria.add(Restrictions.eq("uname","ysjian"));  
  3.         // Object obj = criteria.uniqueResult();  
  4.         // System.out.println(obj);  
  5.   
  6.         // 表示查找uid大于2的对象,不包括2,Restriction是约束的意思  
  7. //      criteria.add(Restrictions.gt("uid", 2));  
  8.         // 表示查找uid小于3,不包括3,的对象,Restriction是约束的意思  
  9.         criteria.add(Restrictions.lt("uid"5));  
  10.         //分页查找  
  11.         criteria.setFirstResult(0);  
  12.         criteria.setMaxResults(2);  
  13. //模糊查找  
  14.         criteria.add(Restrictions.ilike("uname""%ysj%00%"));  
  15.         criteria.add(Restrictions. like("uname""%ysj%00%"));  
  16.         //排序查找  
  17.         criteria.add(Restrictions.like("upass""0",MatchMode.END));//以0结尾的  
  18. //      criteria.add(Restrictions.like("upass", "0",MatchMode.START));//以0开始的  
  19. //      criteria.add(Restrictions.like("upass", "0",MatchMode.ANYWHERE));//包含0的  
  20. //      criteria.add(Restrictions.like("uname", "yyy",MatchMode.EXACT));//精确查询  
  21.         criteria.addOrder(Order.desc("uid"));//添加以uid降序排列  
  22.         List<Userinfo> list = criteria.list();  
  23.         List<Users> list = criteria.list();  
  24.         for (Users users : list) {  
  25.             System.out.println(users);  
  26.         }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值