Hibernate 多种查询

1.HQL查询:Hibernate Query Language.

           特点:1.与SQL 相似, SQL 中的语法基本上都可以使用。

                      2.SQL查询的是表和表中的列; HQL 查询的是对象。

                      3.HQL的关键字不区分大小写,类名和属性名是区分大小写的。

                      4.select 可以省略

           1.简单的查询:Employee 为实体名而不是数据库表名(面向对象性)
            hql="from Employee"

            hql="from Employee as e"//使用别名

            hql="from Employee e"// as 可以省略

           2.带上过滤条件:where

             hql="from Employee where id <10"

             hql="from Employee e where e.id<10"

             hql="from Employee e where e.id<10 and e.id>5"

          3.带上排序条件:order by

            hql="from Employee e where e.id<10 order by e.name";

            hql="from Employee e where e.id<10 order by e.name desc";

            hql="from Employee e where e.id<10 order by e.name desc, id asc";

           4.制定select子句(不可以select *)

            hql="select e from Employee e";//相当于"from Employee e"

            hql="select e.name from Employee e";//只查询一个列,返回的集合元素就是这个属性的类型

            hql="select e.name,e.id from Employee e";//查询多个列的元素类型是Object 数组

            hql="select new Employee(e.id,e.name) from Employ e"//可以使用new语法,把查询的部分属性封装到对象中      

            5.查询:list uniqueResult ,分页

            Query query=session.createQuery("from Employee e where id<3");

            query.setFirstResult(0);

            query.setMaxResults(10);//等同于limit 0,10

            //两种查询结果 list ,uniqueResult

              List list=query.list();// list

                      Employee employee=(Employee)query.uniqueResult();//查询的结果是唯一的一个结果

若有多个结果,会抛异常

              6.方法链

              List<Employee> list=session.createQuery("from Employee").setFirstResult(0).setMaxResults(10).list();

                      7.聚焦(合)函数 count(),max(),min(),sum()

               hql="select count(*) from Employee"//返回结果是long型的

               hql="select min(id) from Employee "//返回的结果是id属性的类型

             8.分组:Gruop By ....Having

             hql="select e.name,count(e.id) from Employee e group by e.name"

             hql="select e.name,count(e.id) from Employee e group by e.name having count(e.id)>1"

                      hql="select e.name,count(e.id) from Employee e where id<9 group by e.name having count(e.id)>1 order by count(e.id) desc"

                      hql="select e.name,count(e.id) as c from Employee e where id<9 group by e.name having count(e.id)>1 order by c desc"

              9.连接查询:(仔细品味)

               内联:inner 可以省略

                       hql="select e.id,e.name,d.name from Employee e (inner) join  e.department d"

               左外联:outer 可以省略   右(right)外联同理

               hql="select e.id,e.name,d.name from Employee e left outer join e.department d"

               //简便:

               hql="select e.id, e.name,e.department.name from Employee e"

            10.查询使用参数

               1.?

                hql="from Employee where id between ? and ?"

        List list2 = session.createQuery(hql)
	  .setParameter(0, 5)// 设置参数,第1个参数的索引为0。
	  .setParameter(1, 15)//
	  .list();
              2.变量名

             hql="from Employee e where id between :min and :max";

       List list3 = session.createQuery(hql)
	 .setParameter("max", 15)//
	 .setParameter("min", 5)//
	 .list();
             3.当参数是集合时,使用setParmeterList(),设置参数值

             hql="from Employee where id in(:ids)";

             List list=session.createQuery(sql).setParmeterList("ids",new Object[]{1,2,3}).list;

                   11.update ,delete ,不会通知session缓存

             update

             int result=sess.createQuery("update Employee e set e.name=? where id >15")

.setParmeter(0,"d").executeUpdate();//返回int型结果

                    delete

                    int result=sess.createQuery("delete Employee e where id >15")

.setParmeter(0,"d").executeUpdate();//返回int型结果


看一看呦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值