Hibernate_QL

Hibernate Query Language

Hiberante中所支持的查询有:

nOID检索方式

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

nHQL检索方式

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

nQBC检索方式

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

n本地SQL检索方式

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

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

1.Query查询(推荐使用)

[java] view plain copy
  1. Stringhql=”fromUsersasuser”;
  2. Stringhql=”fromUsers”;
  3. Stringhql=”fromUsersasu”;
  4. Stringhql=”fromUsersuser”;

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

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


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

[java] view plain copy
  1. Stringhql="fromUsersuwhereu.uid=:uidandu.uname=:unameandu.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. Queryquery=session.createQuery(
  2. "fromUseruwhereu.uname=:nameandu.uid>:uid")
  3. .setString("name","ysjian").setInteger("uid",1);

c.分页查找

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


d.模糊查询

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

[java] view plain copy
  1. Stringhql="fromUserInfowhereunamelike'%ysj%'";
  2. Queryquery=session.createQuery(hql);
  3. List<UserInfo>list=query.list();


e.不完整列查询

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


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

[java] view plain copy
  1. //在实体类中增加一个含有要查询属性名参数的构造方法
  2. Stringhql="selectnewcom.query.entity.Userinfo(uname,upass)fromUserInfo";
  3. Queryquery=session.createQuery(hql);
  4. f.sql语法查询
  5. Stringsql="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. Stringhql="selectffromFileinfof"+"wheref.userinfo.uidin(selectu.uidfrom
  2. Userinfouwhereu.state=1)";
  3. Queryquery=session.createQuery(hql);


h.连接查询

[java] view plain copy
  1. Stringhql="selectffromFileinfof,Userinfou"+"whereu.state=1andf.userinfo.uid=u.uid";
  2. Queryquery=session.createQuery(hql);


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

[java] view plain copy
  1. Stringhql="selectffromUserinfouinnerjoinu.fileinfosfwhereu.state=1andu.uid=3";
  2. Queryquery=session.createQuery(hql);


2.Criteria查询

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

你可能感兴趣的:(Hibernate)