给出四个字段
String sid;
String sname;
Date settime;
String setemail;
不填的话就是无条件匹配,填了那个就按那个查询,填了两个就是按这两个的条件查询,以此类推
要用模糊查询
这是我写的语句,这是不能通过的,
String hql=("select * from Student as s where " +
"s.name like '%"+sname+"%'"+"and"+
"s.studentId like '%"+sid+"%'"+"and"+
"s.setTime like '%"+settime+"%'"+"and"+
"s.email like '%"+setemail+"%'"); 请问大虾们怎么弄

解决方案 »

  1.   

    hql语句貌似和sql语句不一样吧,要是我写的话,我会写成String hql="from student s where ....
      

  2.   

    StringBuffer hql = new StringBuffer("from Student as s where 1=1");
    if(sname != null && !"".equals(sname.trim())) {
        hql.append("and s.name like '%" + sname + "%'");
    }
    if(sid != null && !"".equals(sid.trim())) {
        hql.append("and s.studentId like '%" + sid + "%'");
    }
    if(settime != null && !"".equals(settime.trim())) {
        hql.append("and s.setTime like '%" + settime + "%'");
    }
    if(setemail != null && !"".equals(setemail.trim())) {
        hql.append("and s.email like '%" + setemail + "%'");
    }
    最后在你要用到hql的地方写hql.toString()代替hql就可以了!
      

  3.   

    Hibernate中的Criteria查询可以搞定
      

  4.   


    String hql="select Student stu where 1=1"
    if(sname!=null)
       hql+=" and stu.name like '%"+sname+"%'";
    if(sid!=null)
       hql+=" and stu.studentId like '%"+sid+"%'";
    if(settime!=null)
       hql+=" and stu.setTime like '%+settime+"%'";
    if(email!=null)
       hql+=" and stu.email like '%"+setemail+"'%";建议这种的sql执行考虑用存储过程来完成效率会高一些
      

  5.   

    很简单,两种方式
    一:Criteria有是hibernate的条件查询方法,你可以百度下
    二:
    String sid;
    String sname;
    Date settime;
    String setemail;
    四个属性,先判断是否为空,如果为空,就赋值“”,例如
    if(sid==null) sid = "";
    这样,你的hql不需要改
      

  6.   

    配hql是个很笨的办法,而且使用like等语句对对数据库的查询优化有很大的坏处。使用了like语句,将导致引擎放弃使用索引而进行全表扫描。
      

  7.   

    Date类型 需要转换
    convert(varchar(21),s.setTime,120)