Hibernate数据查询

       HQLHibernate查询语言,它是Hibernate提供的一种面向对象的查询语言。

 (1)在查询语句中设定各种查询条件

 (2)支持动态绑定参数

(3)支持投影查询、分页查询、连接查询、分组查询,子查询

(4) 内置了一些聚集函数

 二.HQL

Hibernate中的Query接口就是专门用来执行HQL语句的查询接口。

1.创建查询对象

Query query=session.createQuery(“fromDept”);

2.执行查询列出结果

  1)列出所有的结果

List<Dept> depts=query.list();

for(Dept dept:depts){…}

       2)列出单个结果

Query query=session.createQuery(“from Deptwhere id=1”);

 query.setMaxResults(1);

 Dept dept=(Dept)query.uniqueResult();

3)迭代访问结果

Iterator<Dept> it=query.iterate();

While(it.hasnext()){

}

HQL 基本语法:持久化类名区分大小写

1)选择要查询的持久化类。

  String hql=“from Dept”

 Query query=session.createQuery(hql);

 String hql=“from Dept as d”;

2)投影查询

String hql="select id,name fromDept";

Query query=session.createQuery(hql);

List list=query.list();

intsize=list==null?0:list.size();

for(inti=0;i<size;i++){

    Object[] obj=(Object[])list.get(i);

      System.out.println(obj[1]+“  ”+obj[2]);

}

       针对选定属性创建一个类,提供以这两个属性为参数的构造方法,使用此类来封装查询结果。

 

3where 条件子句

       String hqlString="from Dept d whered.createdTime>='2010-01-01'";

       Query query=session.createQuery(hqlString);

       String hqlString="from Dept d where d.name like'java%' andd.employees is not empty and d.createdTime<current_date()";

       绑定查询参数:

       按参数名字绑定

       String hql=“from  Dept whereid>:id and name like:likeName”

       List<Dept> depts=session.createQuery(hql).setLong(“id”,newLong(ingputID)).setString(“likeName”,”%”+inputName+”%”).list();

       按参数位置绑定

       5distinct 过滤重复值

       Select distinct createTime from Dept

       6)聚集函数

        select count(d) from Dept d

       7order by 排序

       From Dept d order by d.createdTime asc,d.name desc

       8group by 对记录分组

       Select count(e) from Employee e group by e.dept;

       9having 对分组后数据进行条件过滤

       Select e.dept.name from Eployee e group by e.dept havingcount(e)>1

分页查询

Query接口提供两个用于分批显示查询结果的方法

setFirstResult(intfirstResult):在记录集中从第几条记录开始取数据。默认是0

setMaxResults(intmaxResults):设置每次查询返回的最大对象数。

session.beginTransaction();

String hql ="from Employee";

List<Employee>empls =  session.createQuery(hql)

                   .setMaxResults(pageSize)

                   .setFirstResult((pageNo - 1)* pageSize)

                   .list();

session.getTransaction().commit();

批量修改和删除:直接通过SQL语句操作数据库,执行完后,当前session缓存中的数据与数据库中的数据不是同步的。

Stringhql=“delete Dept as d where d.name like:likeName”;

Queryquery=session.createQuery(hql).setString(“likeName”,”%%”);

int count=query.executeUpdate();

连接查询

       Inner join                  left outer join   

       Right outer join         fulljoin

String hql ="FROM Dept d JOIN d.employees e "

 + " WHERE d.name LIKE :likeName";

抓取连接查询  fetch

抓取:是指从数据库加载一个对象数据时,同时把它所关联的对象和集合的数据一起加载出来,以便减少SQL语句的数据,从而提高查询效率。

From Dept d leftjoin Fetch d.employees e where d.name like “%web%”

子查询

From Dept dwhere (Select count(e) from d.employees e)>1

 

       命名查询:是指将SQL查询语句编写在映射文件里,在程序中通过SessiongetNameQuery()方法来获取该查询语句。

<queryname="findDeptsByCondition">

     <![CDATA [from Dept d where d.name like:likeName ]]>

</query>

session.getNamedQuery("findDeptsByCondition")

     .setString("likeName","%a%")

     .list();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值