[应用架构] HQL 查询方式(传统方式和占位方式)

来源:互联网 发布:winrar软件破解版 编辑:程序博客网 时间:2024/05/17 03:49
在编写HQL语句的时候,有两种方式来写查询语句,下面我介绍两种查询方式。
1.传统方式进行查询
  1. String hql = " from User user  where user.department='"+department+"' and user.userName like '%"+userName+"%'"; // where user.department  = '"+department+"' order by user.department desc";
  2.          List<User> vList = this.getHibernateTemp().find(hql);
复制代码


2.占位方式,占位方式没有像传统方式那样把所有代码写在一条hql语句中,它将语句,参数,参数值三部分开来写,这样可读性比较好。这种方式建议采用。如下所示:
  1. //使用占位符的方式
  2.                      String hql = " from User user where user.department = :department  and user.userName like  :userName  ";
  3.                      String[] params = {"department","userName"};
  4.                        
  5.                 Object[] args = { department,"%"+userName+"%" };
  6.                         List<User> vList = getHibernateTemp().findByNamedParam(hql,  params, args);
复制代码

like语句用法比较典型。可以通过上面的例子得到其具体用法.

3.下面再采用一种方式来进行,不过这种方式在条件查询参数比较多的情况下不采用,如下面所示:
  1.   List<User> userList = super.findAll(User.class);


  2.   // 按姓名查询,模糊查询
  3.   if (!userName.isEmpty()) {

  4.    for (int i = 0; i < userList.size(); i++) {
  5.     
  6.     String tempUserName = userList.get(i).getUserName();

  7.     int index=tempUserName.indexOf(userName);

  8.     //System.out.println("%%%%%%%%%%:\t"+index);
  9. //                                if (index != 0 ) {

  10.      userList.remove(i);
  11.      i--;
  12.     }
  13.    }
  14.   }

  15.   // 按部门查询
  16.   if (!department.isEmpty()) {
  17.    for (int i = 0; i < userList.size(); i++) {
复制代码
注意:这种方式在参数查询比较多的情况不采用,而且第一次查询出所有的记录,包括不符合条件的也查询出来,然后再通过if语句过滤,这样占用太多时间。而上面的1,2方法正是对其所进行的改进。

(完,待续...........)
原创粉丝点击