zoukankan      html  css  js  c++  java
  • HQL和Criteria

    HQLCriteria

    HQL(Hibernate Query Language)

           面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类属性其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;HQL主要通过Query来操作,Query的创建方式:

           Queryq = session.createQuery(hql);

    l      from Person

    l      from User user whereuser.name=:name

    l      from User user where user.name=:nameand user.birthday < :birthday

    Criteria

           Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:

           Criteriacrit = session.createCriteria(DomainClass.class);

           简单属性条件如:criteria.add(Restrictions.eq(propertyName,value)),

           criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))

    利用name的不同的查询

    1、 HQL

           Session s=null;

           try{

               s=HibernateUtil.getSession();

               //from Useruser  给User起一个别名为user.    name表示的是类中的属性名

               //fromObject    查得是所有表格中的记录行,from User  查得是User所对应表中的所有记录行

               String queryString="from User user where user.name=:n";//查询字符串,hibernate的查询语言hql。类名区分大小写

               Query query=s.createQuery(queryString);//产生query对象,用来查询

              

           //  query.setString(0, name);//下标从0开始

               query.setString("n", name);//用命名参数,就不需要索引下标的位置了

              

               //实现分页查询

               query.setFirstResult(0);//从第0行开始

               query.setMaxResults(2);//每页最多显示2条记录

              

               /*query.list();//列出所有满足条件的结果集

               query.uniqueResult();//返回的是一行的结果集*/

              

               //如果满足条件的不止一条记录

               List<User> list=query.list();

               for(User u:list){

                  System.out.println(u.getId()+":"+u.getName());

               }

               //如果明确知道就一行

               /*Useruser=(User) query.uniqueResult();

               System.out.println(user.getId()+":"+user.getName());*/

                 

           }finally{

               if(s!=null){

                  s.close();

               }

           }

    2、 Criteria

        Session s=null;

           try{

               s=HibernateUtil.getSession();

              

               Criteria c=s.createCriteria(User.class);//根据映射类型去查表

               c.add(Restrictions.eq("name", name));//添加的是约束条件,user里面的name属性要等于参数name

           //  c.add(Restrictions.le("birthday", value));//生日要小于等于。。。。。。

               //上面的两句话等价于Criteria c=s.createCriteria(User.class).c.add(Restrictions.eq("name",name));        

               List<User> list=c.list();

               for(User user:list){

                  System.out.println(user.getId()+":"+user.getName()+":"+user.getBirthday());

               }         

           }finally{

               if(s!=null){

                  s.close();

               }

           }

    sql查得是表,HQl查得是对象,hql支持多态

  • 相关阅读:
    django 项目需要注意的一些点
    VUE之路
    Oracle 表格碎片的查看方法
    RHEL 6.x or 7.x 使用分区绑定ASM 磁盘的方法
    RMAN 修复主库 nologging 操作导致物理备库的坏块
    Oracle 数据库19c 回退降级到 11.2.0.4 方案
    如何评估oracle 数据库rman全备和增量备份大小
    在将Oracle GI和DB升级到19c或降级到以前的版本之前需要应用的补丁 (Doc ID 2668071.1)
    Oracle 数据库坏块处理
    opatch auto 安装11.2.0.4.20190115 PSU遇到 OUI-67133: Execution of PRE script failed,with returen value 1 报错
  • 原文地址:https://www.cnblogs.com/webmark2016/p/7161807.html
Copyright © 2011-2022 走看看