日期:2014-05-20  浏览次数:20696 次

问一个查询问题,困扰我很久了。大哥大姐帮帮忙。
现在需做一个查询。
比如有3个条件。
1,2,3
if(1!=null||2!=null||3!=null)
  {
    if(1!=null||2!=null)
  {
    .....
  }else   if(1!=null||3!=null)
    {
        ...
    }else   if(2!=null||3!=null){
      .........
    }else   if(1){
      ..........
    }else   if(2){
      ........
    }else   if(3){
      .........
  }
}
有三个条件只能这么判断吗?
1,2,3
1,2
1,3
2,3
1
2
3

如果我有10个条件呢?
是不是就要写
1,2,3,4,5,6,7,8,9,10

晕,那就大了,有什么好办法,大家给支个招

------解决方案--------------------
这样啊,你把条件做成一个查询类
public List <T> getListByQuery(Object query)
throws IllegalAccessException, IllegalArgumentException {
// TODO Auto-generated method stub
if (query == null) {
return this.getList();
} else {
String queryString = prepareQueryString(query);
return getHibernateTemplate().find(queryString);
}
}

/**
* 利用反射机制返回查询字符串
*
* @param query
* 查询参数
* @return 查询字符串
*/
protected String prepareQueryString(Object query)
throws IllegalAccessException, IllegalArgumentException {
StringBuffer sb = new StringBuffer();
if(query == null){
return "from " + type.getName();
}else{
Class tempClass = query.getClass();
sb.append( "from ");
sb.append(type.getName() + " as _qc ");
sb.append( " where 1=1 ");
Field[] fields = tempClass.getDeclaredFields();
for(Field f : fields){
if(f.get(query) != null){
sb.append( " and _qc. ");
sb.append(f.getName() + " like ' ");
sb.append(f.get(query) + "% ' ");
}
}
}
return sb.toString();
}
}
这个是我以前写得,用的反射,其中的type声明为
Class <T> type;
public class BaseDaoHibernate <T, PK extends Serializable> extends
HibernateDaoSupport implements BaseDao <T, PK> {

private Class <T> type;

public BaseDaoHibernate(Class <T> type) {
this.type = type;
}

/*
* (non-Javadoc)
*
* @see edu.zsu.fbfz.clic.dao.BaseDao#create(java.lang.Object)
*/
public PK create(T newInstance) {
return (PK) getHibernateTemplate().save(newInstance);
}

/*
* (non-Javadoc)
*
* @see edu.zsu.fbfz.clic.dao.BaseDao#delete(java.lang.Object)
*/
public void delete(T transientObject) {
getHibernateTemplate().delete(transientObject);
}

/*
* (non-Javadoc)
*
* @see edu.zsu.fbfz.clic.dao.BaseDao#read(java.io.Serializable)
*/
public T read(PK id) {
return (T) getHibernateTemplate().get(type, id);
}

/*
* (non-Javadoc)
*
* @see edu.zsu.fbfz.clic.dao.BaseDao#update(java.lang.Object)
*/
public void update(T transientObject) {
getHibernateTemplate().update(transientObject);
}

public List <T> getList() {
// TODO Auto-generated method stub
String className = type.getName();
return (List <T> ) getHibernateTemplate().find( "from " + className);
}

public List <T> getListByQuery(Object query)
throws IllegalAccessException, IllegalArgumentException {