一、在jeesite中简单使用SqlMap函数直接添加查询条件可以减少我们的工作量,加快开发效率,下面介绍一下遇到的坑坑洼洼。
本人在网上查了也没有查到,文档也没有去细看,直接开始搞了。
AND写法如下:
sqlMap.getWhere().and("字段", QueryType.NE_FORCE, 传入条件, 占位符:2,3,4,5,6自己累加);
OR写法如下:
sqlMap.getWhere().andBracket("字段", QueryType.EQ_FORCE, 参数, 占位符)
.or("字段", QueryType.EQ_FORCE, 参数, 占位符+1).endBracket();
这里需要注意的是后面需要有一个endBreacket()方法。这是说明or结束用 “)”结尾,否则是不会结尾,查询报错。
在多个写法中更加注意,这个endBreacket()需要注意。
业务:查询type类型,or多个,例如or:1,2,3,4,5.结束后在状态字段status中or多个,例如or:1,2
QueryWhere where = sqlMap.getWhere();
if(typeList !=null && typeList.size()>0) {
String string = typeList.get(0);
if(!StringHelper.isNullOrEmptyString(string)) {
where.andBracket("award_type", QueryType.EQ_FORCE, string, 2);
}
}
if(typeList !=null) {
for(int i = 1;i<typeList.size();i++) {
String string = typeList.get(i);
if(!StringHelper.isNullOrEmptyString(string)) {
where.or("award_type", QueryType.EQ_FORCE, string, i+2);
}
}
}
sqlMap.getWhere().andBracket("staTus", QueryType.EQ_FORCE, status1, 2)
.or("staTus", QueryType.EQ_FORCE, status2, 3).endBracket();
where.endBracket();
这时查询真正的sql是报错的,如下:
AND (
a.award_type = ?
OR a.award_type = ?
OR a.award_type = ?
OR a.award_type = ?
OR a.award_type = ?
OR a.award_type = ?
OR a.award_type = ?
OR a.award_type = ?
AND (a.staTus = ?
OR a.staTus = ?)
这是没有使用endBracket()方法造成的问题,解决办法如下:
QueryWhere where = sqlMap.getWhere();
if(typeList !=null && typeList.size()>0) {
String string = typeList.get(0);
if(!StringHelper.isNullOrEmptyString(string)) {
where.andBracket("award_type", QueryType.EQ_FORCE, string, 2);
}
}
if(typeList !=null) {
for(int i = 1;i<typeList.size();i++) {
String string = typeList.get(i);
if(!StringHelper.isNullOrEmptyString(string)) {
where.or("award_type", QueryType.EQ_FORCE, string, i+2);
}
}
}
where.endBracket(2); //重载参数,告诉在这里进行加结束括号:“)”
//下面进行另一个字段的多个OR查询。
sqlMap.getWhere().andBracket("staTus", QueryType.EQ_FORCE, status1, 2)
.or("staTus", QueryType.EQ_FORCE, status2, 3).endBracket();
where.endBracket();//结束括号:“)”
上面查询结果出来了,是正确的。在type后加了")".