我们在做sql语句查询时会遇到如下情况
select id,name,sex,year from tb_people where sex="girl" and id="110" or name="marry"
我们知道,该语句查询的结果是满足以下任意一个条件的数据:
1)id="110" 并且 sex="girl";
2)name="marry"
显然,and和or的查询产生了冗余。如果我们想要的结果是,满足sex="girl" 并且满足 (id="110" or name="marry"),该如何书写sql语句?在ibatis中,我们可以使用dynamic动态语句。举例如下:
<select id="queryPeople" parameterClass="java.util.HashMap"
resultClass="java.util.HashMap">
<![CDATA[
select
id,
name,
sex,
year
from tb_people where 1=1
]]>
<isNotEmpty prepend="and" property="sex">
sex=#sex#
</isNotEmpty>
<dynamic prepend="AND" open="(" close=")">
<isNotEmpty prepend="or" property="id">
id=#id#
</isNotEmpty>
<isNotEmpty prepend="or" property="name">
name=#name#
</isNotEmpty>
</dynamic>
</select>
如果只是单纯的用sql语句该如何实现?利用and和or优先级可以这样书写:
select id,name,sex,year from tb_people where sex='girl' and id='110' or sex='girl' and name='marry'