刚入职公司,看了下给新人的demo,发现里面有的sql语句在后面使用了WHERE 1=1,问了下前辈虽然有些了解了但还是打算上网搜索学习一下。
动态SQL语句
有的在mybatis中的SQL语句会有一些动态生成的语句字段,比如当传进来的数据结构中有"name"这个字段才会生成查询"name"字段的SQL语句。但如果我要查询全部的信息,那么就没必要在数据结构体上将表的全部字段都写进去而是使用"*"来代替,这样在mybatis中就会因为没有对应的动态字段而报错。所以添加了 WHERE 1=1语句,因为1=1恒成立,所以就不会报错。
这种方法就是为了保证在多种不确定因素(不知道具体会查询什么字段)影响下保证能正常生成SQL语句的一种手段。
使用的优缺点
优点
优点就是上面写到的不会出现SQL语句的问题
缺点
由于表中大概率没有"1"这个字段所以最后的结果就是查询的内容就是这个表的全部字段,这样就会导致查询速度缓慢。(可能会有别的错误导致无法生成动态语句,但我目前想到的情况就只有要查全表这样一种,以后见得多了可能会见到别的情况)