javaweb实现多条件动态查询应该怎么做

拼sql么还是用mybatis在xml里判断

多个表查询
条件选填
最好有代码
拜托诸位了图片说明图片说明图片说明

Session session = SessionFactoryUtils.getSession(hibernateTemplate.getSessionFactory(), true);
penson(假如你的数据放在对象中)
Map map =new HashMap();
String sql =" select * from user where 1=1 ";
if(penson.getName != null){
map.put("name",penson.getName);
}else if(penson.getAge != null){
map.put("age",penson.getAge);
}
for (String key : map.keySet()) {
sql=sql+"and key="+map.get(key);
}

Query query = session.createSQLQuery(sql)

你这样都不明白我就没有办法了

你找对了人了,我的项目就是用mybatis,这种查询我经常写,贴代码给你

select * from ppqm_doc s where 1=1

and s.electron_No=#{electron_No}


and s.principal=#{principal}


and s.sponsor= #{sponsor}


and s.rating= #{rating}


and s.sponsor_Dep= #{sponsor_Dep}


and s.doc_type= #{doc_type}


and s.doc_Name like CONCAT(CONCAT('%', #{doc_Name}), '%')


and s.doc_No = #{doc_No}

order by s.id desc

喜欢就采纳一下

我是用if else拼接sql...

单表查询的话,用通用mapper更容易拼接条件

查询条件是图片这样的图片

sql一个语句得到一个数据再导入到前台

用mapper接口映射

resultType="com.hundsun.zhengtingxue.SutdentInformation">
select * from stu_info where TRUE

AND stuNum=#{stuNum}


AND stuName=#{stuName}


AND stuNianji=#{stuNianji}


AND stuBanji=#{stuBanji}


AND stuTea=#{stuTea}


AND stuDepart=#{stuDepart}

图片说明
上传代码会出错,截图给你

可以采用反射生成sql语句
遵循一个规则
作为条件的对象字段不能为空
也就是不为空的字段是作为条件(类名和字段名与数据库表为同名,如果不同名则可以采用元注解来做)
如何是多表用反射不好构建sql语句,除非你想要的数据模式是固定的

可以参考以下链接:
http://bbs.csdn.net/topics/360012272

sql拼接时要注意sql注入风险

你可以使用mybatis generator 自动生成代码
生成的条件类如下
public class ArticleCriteria extends PageCriteria {
protected boolean distinct;

protected List<Criteria> oredCriteria;

public ArticleCriteria() {
    oredCriteria = new ArrayList<Criteria>();
}

public void setDistinct(boolean distinct) {
    this.distinct = distinct;
}

public boolean isDistinct() {
    return distinct;
}

public List<Criteria> getOredCriteria() {
    return oredCriteria;
}

public void or(Criteria criteria) {
    oredCriteria.add(criteria);
}

public Criteria or() {
    Criteria criteria = createCriteriaInternal();
    oredCriteria.add(criteria);
    return criteria;
}

public Criteria createCriteria() {
    Criteria criteria = createCriteriaInternal();
    if (oredCriteria.size() == 0) {
        oredCriteria.add(criteria);
    }
    return criteria;
}

protected Criteria createCriteriaInternal() {
    Criteria criteria = new Criteria();
    return criteria;
}

public void clear() {
    oredCriteria.clear();
    orderByClause = null;
    distinct = false;
}

protected abstract static class GeneratedCriteria {
    protected List<Criterion> criteria;

    protected GeneratedCriteria() {
        super();
        criteria = new ArrayList<Criterion>();
    }

    public boolean isValid() {
        return criteria.size() > 0;
    }

    public List<Criterion> getAllCriteria() {
        return criteria;
    }

    public List<Criterion> getCriteria() {
        return criteria;
    }

    protected void addCriterion(String condition) {
        if (condition == null) {
            throw new RuntimeException("Value for condition cannot be null");
        }
        criteria.add(new Criterion(condition));
    }

    protected void addCriterion(String condition, Object value, String property) {
        if (value == null) {
            throw new RuntimeException("Value for " + property + " cannot be null");
        }
        criteria.add(new Criterion(condition, value));
    }

    protected void addCriterion(String condition, Object value1, Object value2, String property) {
        if (value1 == null || value2 == null) {
            throw new RuntimeException("Between values for " + property + " cannot be null");
        }
        criteria.add(new Criterion(condition, value1, value2));
    }

    public Criteria andRecordIdIsNull() {
        addCriterion("record_id is null");
        return (Criteria) this;
    }

    public Criteria andRecordIdIsNotNull() {
        addCriterion("record_id is not null");
        return (Criteria) this;
    }

    public Criteria andRecordIdEqualTo(Integer value) {
        addCriterion("record_id =", value, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdNotEqualTo(Integer value) {
        addCriterion("record_id <>", value, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdGreaterThan(Integer value) {
        addCriterion("record_id >", value, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdGreaterThanOrEqualTo(Integer value) {
        addCriterion("record_id >=", value, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdLessThan(Integer value) {
        addCriterion("record_id <", value, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdLessThanOrEqualTo(Integer value) {
        addCriterion("record_id <=", value, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdIn(List<Integer> values) {
        addCriterion("record_id in", values, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdNotIn(List<Integer> values) {
        addCriterion("record_id not in", values, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdBetween(Integer value1, Integer value2) {
        addCriterion("record_id between", value1, value2, "recordId");
        return (Criteria) this;
    }

    public Criteria andRecordIdNotBetween(Integer value1, Integer value2) {
        addCriterion("record_id not between", value1, value2, "recordId");
        return (Criteria) this;
    }

    public Criteria andTitleIsNull() {
        addCriterion("title is null");
        return (Criteria) this;
    }

    public Criteria andTitleIsNotNull() {
        addCriterion("title is not null");
        return (Criteria) this;
    }

    public Criteria andTitleEqualTo(String value) {
        addCriterion("title =", value, "title");
        return (Criteria) this;
    }

    public Criteria andTitleNotEqualTo(String value) {
        addCriterion("title <>", value, "title");
        return (Criteria) this;
    }

    public Criteria andTitleGreaterThan(String value) {
        addCriterion("title >", value, "title");
        return (Criteria) this;
    }

只贴出部分,若想条件查询,只需写如下代码,如
@Override
public List selectByUserId(List userIds) {
if (userIds.size() == 0) {
return Lists.newArrayList();
}
RoleCriteria criteria = new RoleCriteria();
criteria.or().andRecordIdIn(userIds);
return roleDao.selectByCriteria(criteria);
}
生成的xml文件如下:








and ${criterion.condition}


and ${criterion.condition} #{criterion.value}


and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}


and ${criterion.condition}

#{listItem}








<select id="selectByCriteria" resultMap="BaseResultMap" parameterType="com.tc.itfarm.model.ArticleCriteria" >
select
<if test="distinct" >
  distinct
</if>
<include refid="Base_Column_List" />
from t_article
<if test="_parameter != null" >
  <include refid="Criteria_Where_Clause" />
</if>
<if test="orderByClause != null" >
  order by ${orderByClause}
</if>
<include refid="SqlDialectPage" />

 String sql = "select * from table where 1=1";
 if(name!=null&&!"".equals(name)){
     sql+="and name like %"+name+"%";
 }
 if(minAge!=null){
     sql+="and age >"+minAge;
 }
 if(maxAge!=null){
     sql+="and age<"+maxAge;
 }

这里写的是你第一行的姓名和年龄的条件,其他的也是同样的意思
大概就是:满足if条件,就拼一句条件进去。当然你实际写的时候,不要这样直接把变量拼进字符串,防止sql注入。用hibernate的变量占位的方式来写