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);

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

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

 

 

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

 

posted on 2016-05-16 16:47  灰灰+灰灰  阅读(1330)  评论(0编辑  收藏  举报

导航