问一个查询问题,困扰我很久了。大哥大姐帮帮忙。
现在需做一个查询。
比如有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 {