Hibernate中的hql语句

HQL基础:

     查询所有属性 from Object

     指定表别名   select s.name from Object as;/select  s.name from Object s;

     查询指定属性  select s.name n.name from Object1 s,Object2 n;

     where子句

     distinct

     删除对象 delete Object s where s.name=???;

    更新对象 update Object set s.name=value  where Object.name=??;

    查询并计算属性值 select s.age-6 from Object s;

    使用函数 low小写  count计数 sum求和 max求最大值 min求最小值 avg

    between。。and  / not between。。and

    in  / not in

    like

    and /or

    order by

    group by   having

 

HQL进阶:

      1,HQL查询中一个查询一个父类的同时会默认查询他的子类

    

      2,限制查询数据条数

              Query有两个函数  setFristResult和setMaxResult分别设置查询的第一个数据行的索引和最大查询数

               这样的话   我们能使用这个方式来实现分页功功能

   

      3,使用绑定参数

                1, 我们在hql中直接使用程序变量如: String hql="select a from Object a whre a.name="+name;

                 这种方式如意被别人使用sql注入攻击

                 2,查询语句中以“:”开头的变量叫做命名参数,把命名参数和一个具体的值进行绑定的过程         叫做绑定参数 如:

                 String hql="from Oblect where name=:name and age>:age";

                 Query query=session.createQuery(hql); //创建查询

                                  query.setParameter("name","李晓梅");   //进行绑定

                                   query.setParameter("age",new Integer(20));

 

       4,在hbm.xml中配置HQL语句

              

<hibernate-mapping>
    <class name="Object" table="table" catalog="joblog">
        <!--此处省略了配置-->
    </class>
    <query name="searchStudent">
        <![CDATA[
     from Student s where s.sage>22
     ]]>
    </query>
</hibernate-mapping>

     如何取出使用HQL语句:

 

        Session session=Hsf.currentSession();//创建Session
        Query query=session.getNamedQuery("searchStudent");       //用getNamedQuery得到查询
        List list=query.list();   //执行查询
        Iterator it=list.iterator();
       
        while(it.hasNext()){
    Student stu=(Student)it.next();
    System.out.println(stu.getSname());
        }

 

         5,子查询

                   带in的子查询:

                    from Object where name in(from Object2 where Object2.name="value");

                   比较子查询:

                    from Student s where s.sdept=(select s.sdept from s where s.sname='李晓梅')

                   带有and和or的子查询:

                    使用ANY或者ALL谓词时,必须同时使用比较运算符。查询其他系中比计算机系任一学生                       年龄小的学生名单如:>ANY,大于子查询结果中的某个值>ALL,大于子查询中的所有值

     

         6,Hibernate多表查询

                 多表之间的关系:表的关系映射

                

                左外连接

                右外连接

               

                

 

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值