hibernate查询语句总结

HQL查询方式是Hibernate3中极力推荐使用的功能强大的数据检索方式

  1. Query对象
创建一个新的Query实例
可以调用session的createQuery方法(创建一个HQL查询)
Query hqlQuery = session.createQuery("from User");
或者createSQLQuery方法(创建一个本地SQL查询)
Query sqlQuery = session.createSQLQuery(    "select {u.*} from USERS {u}", "u",User.class);
list()方法执行查询并返回一个List集合:
List result = session.createQuery("from User").list();

Query接口支持查询结果分页

Query query = session.createQuery(“
                                          from User u order by u.name asc");
//从第一行开始,提取前10个对象(记录)
query.setFirstResult(0);
query.setMaxResults(10);//当前页显示多少页
List result = query.list();

list()方法执行查询并返回一个List集合:
List result = session.createQuery("from User").list();
如果知道返回的集合中只有一个对象,可以用result.get(0)取出对象,或者使用以下方法进行
User user = (User) session.createQuery(
    "from User  u order by u.account desc“) 
    .setMaxResults(1)
    .uniqueResult();

绑定任意参数
Query接口提供了许多方法用于参数绑定,例如setString()、setDate()、setInteger() 等
一个特别有用的方法是setEntity(),它可以让你绑定一个持久对象:
Query query = session.createQuery("from Item item 
                          where item.seller = :seller")
 query.setEntity("seller", seller)
 query.list();

基本对象查询(cont.)
使用别名
可以给被查询的类赋一个别名。例如:
from User as u    或者
from User u 
有了别名,就可以在同一个查询的其它部分来引用被查询的类

使用约束(查询条件)
获得一个持久类的特定实例。例如:
from User u where u.email = ‘my@yahoo.com'
其中,email是User类的一个属性

比较运算符
HQL支持:=, <>, <, >, >=, <=, between, not between, in, not in
例如:
from Score s where s.score between 60 and 100
from Score s where s.score > 60
from User u where u.email in ( "foo@hibernate.org", "bar@hibernate.org" )

null操作符
例如:
from User u where u.email is null
该查询返回没有email地址的所有user对象
再如:
from User u where u.email is not null
该查询返回具有email地址的所有user对象
HQL的where子句支持算术表达式
from Score s where ( s.midterm*0.3+s. terminal *0.7  )> 60.0

逻辑操作符
有and、or。例如:
from User user where user.firstname like "G%" and user.lastname like "K%“
from User user where ( user.firstname like "G%" and user.lastname like "K%" ) or user.email in ( "foo@hibernate.org", "bar@hibernate.org" )

查询结果排序
使用order by子句。例如:
from User u order by u.username
使用asc或desc指定升序或降序。例如
from User u order by u.username desc
使用多个属性排序。例如:
from User u order by u.lastname asc, u.firstname asc

如果不需要获得完整的实体对象,只需要实体对象的某个属性,例如,在一个下拉框中显示的用户名,用HQL也很简单
Query query = session.createQuery(“select account 
               from User u where u.loginNums>10")
List accounts=query.list(); //返回值是String的集合

也可以返回部分属性
Listresult= session.createQuery(
                       "select d.id,d.title from Department d").list();
for(Object[] obj:result){
        System.out.println(obj[0]+","+obj[1]);
}
链接查询
通过连接运算符可以实现多个表查询。连接可以在SELECT 语句的FROM子句中建立。 SQL-92标准所定义的FROM子句的连接语法格式为:
    FROM join_table  join_type  join_table 
                             [ON (join_condition)] 
join_table指出参与连接操作的表名。连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接 
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接

内连接
from  Student s join s.department d
左外连接
from  Student s left join s.department d
右外连接
from  Student s right join s.department d
交叉连接
from  Student s ,s.department d
注:如果需要带连接条件 ,用with子句

在Hibernate应用中使用QBC查询通常经过3个步骤:
使用Session实例的createCriteria ()方法创建Criteria对象;
使用工具类Restrictions的相关方法为Criteria对象设置查询条件;
使用Criteria对象的list()方法执行查询,返回查询结果;

查询所有客户
     Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
//创建一个Transaction对象
ts = session.beginTransaction();
//创建一个Query查询对象
Criteria criteria = session.createCriteria(Customers.class);
    List list = criteria.list();//装载QBC查询结果

查询单个用户
//创建一个Criteria查询对象
Criteria criteria = session.createCriteria(Customers.class);
//使用Restrictions工具类提供的方法eq,设置id属性等于1
criteria.add(Restrictions.eq("id",new Integer(1));
criteria.setMaxResults(1);//设置最大检索数为1
Customers customers = (Customers)criteria.uniqueResult();
//装载单个对象结果

对查询结果进行排序
Criteria criteria = session.createCriteria(Customers.class);
//使用Order工具类提供的方法进行排序
criteria.addOrder(Order.asc("cname");
List list = criteria.list();//装载QBC查询结果

分组查询
Criteria criteria = session.createCriteria(Customers.class);
//创建ProjectionList
ProjectionList pList = Projections.projectionList();
//创建分组,按客户名分组
pList.add(Projections.groupProperty("cname"));
pList.add(Projections.rowCount());//统计分组记录数
criteria.setProjection(pList);//为criteria对象设置Projections
List list = criteria.list();//装载QBC查询结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值