zoukankan      html  css  js  c++  java
  • Hibernate写hql语句与不写hql语句的区别?

    hql语句与不写hql语句的区别?

    写hql语句:书写HQL语句,所有的查询与投影的设计均使用HQL语句完成。

    不写hql语句:没有任何查询语句,所有的查询与投影的设计使用面向对象格式完成。

    二者选用的时机:

    不写hql语句,有时比较方便,在不考虑复杂的查询的情况下,可以使用,此方法把某些Hibernate的方法封装起来,不灵活。

    hql语句,复杂的业务逻辑,建议使用,灵活方便。

    以下通过俩种方法的对比来着重介绍一下hibernate不写hql的一种简单用法。

    hql语句:

    具有丰富的灵活性,可以提供强大的查询功能。

    如:String hql = “ from User “ ,查询所有的User实体类所对应的数据库字段。

            Session session = this.getCurrentSession();

    String hql = " from User ";

    Query q = session.createQuery(hql);

    List<User> users = q.list();

    return users;

    如:String hql= “ update User user set user.age=22 where user.age=12 ”;更新User实体类所对应的数据记录。

            Session session = this.getCurrentSession();

    String hql = " update User user set user.age=22 where user.age=12 ";

    Query q = session.createQuery(hql);

    q.uniqueResult();

    return null;

    如:String hql=” delete from User user where user.age=19 ”;  删除User实体类所对应的数据记录。

            Session session = this.getCurrentSession();

    String hql = " delete from User user where user.age=? ";

    Query q = session.createQuery(hql);

    q.setParameterList("age", age);

            q.executeUpdate();

    return null;

    不写hql语句:

    查询User实体类所对应的数据库字段数据,可以用一下方法:

    //得到User对应的数据中的所有的数据记录

    public List<User> getDepList()throws Exception{

         DetachedCriteria dc =  DetachedCriteria.forClass(User.class);

             return getHibernateTemplate().find(dc);

    }

    DetachedCriteria 为离线查询。

    若要构造相应的条件查询,可以如下所示:

    public List<User> getDepList()throws Exception{

        DetachedCriteria dc =  DetachedCriteria.forClass(User.class);

             if(user != null){

            if(user .getName()!=null && !user .getName().equals("")){

              dc.add(Restrictions.ilike("name", user.getName(), MatchMode.ANYWHERE));

        }

        if(user.getTele()!=null && !user.getTele().equals("")){

              dc.add(Restrictions.ilike("tele",user.getTele(), MatchMode.ANYWHERE));

               }

        }

        return getHibernateTemplate().find(dc);

    }

    Restrictions为投影查询,里面封装了各种查询条件,如上面,ilike()表示模糊查询,里面的三个参数,分别代表“数据库字段”、“所对应的字段值”、“模糊查询匹配模式”。

    另外模板中封装了好多关于查询条件的方法:

    若要增加一条记录,可以参照以下方法:

             getHibernateTemplate().save(user);

             直接用模板保存一个实体类,在此之前应把数据封装到user实体类中。

    另外模板中还封装了其他的一些save类似的方法:

    若要修改表中某条记录,可以参照以下方法:

    getHibernateTemplate().update(user);

    同样用模板直接更新即可。

    另外模板中还有封装了一些和更新有关的类似的方法:

    若要删除表中的某条记录,可以参照如下的方法:

    getHibernateTemplate().delete(user);

    同样直接使用模板即可完成。

    另外模板中还有封装了一些和删除有关的类似的方法:

    由于知识有限,写的比较单薄,望指导赐教。

  • 相关阅读:
    span i s等行内元素标签之间出现奇怪空格符号
    使用electron搭建桌面app的简便方法
    antd card 组件实现鼠标移入移出效果
    事物处理
    最近在做支付宝支付,在本地测试一切正常,上传到服务器就遇到报错:
    tp框架报错 Namespace declaration statement has to be the very first statement in the script
    前后端分离开发,跨域访问的apche设置
    thinkphp 同一字段不同查询条件实现
    Redis-server在windows下闪退
    tp volist需要便利两个数组时的处理办法
  • 原文地址:https://www.cnblogs.com/wanghui1316/p/5498612.html
Copyright © 2011-2022 走看看