拼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的变量占位的方式来写