在项目开发过程中发现在Dao层的查询SQL语句中出现很多where 1=1,下面从两个方面进行简单的分析:
1、不定查询条件
首先说一下作用where 1=1用于放在查询条件个数不定的SQL语句中,例如在界面中需要根据部门名称(depart_name)或者时间等查询条件对数据进行筛选如在某个Dao层中:
public Map<String, Object> queryForPaging(Map<String, Object> paraMap) {
StringBuffer sql=new StringBuffer("select* from 表1 where 1=1");
//查询条件可以根据需要自由添加或者删除
Object sql_start=paraMap.get("startDate");//开始时间start
if(sql_start!=null&&!"".equals(sql_start)){
sql.append(" and 表1.createdate>='"+sql_start+"'");
}
Object sql_end=paraMap.get("endDate");//结束时间end
if(sql_end!=null&&!"".equals(sql_end)){
sql.append(" and 表1.createdate<='"+sql_end+"'");
}
Map<String,Object>resultMap=queryForMap(sql);
return resultMap;
}
通过上述的方式可以很方便的对SQL语句进行拼装,从而提高开发效率。
2、查询效率
首先mssql在多个条件下,会自动优化查询,以下两个语句是等效的
sql语句1——where 条件1 and 条件2
sql语句2——where 条件2 and 条件1
sql语句1——where 条件1 and 条件2
sql语句2——where 条件2 and 条件1
此外,本文以4万9千多条数据进行了多次简单的实验对照,发现加入了where 1=1的查询语句效率相当。