mysql 中AND的优先级高于OR
,所以在查询
时,会优先执行 AND 条件
,除非使用()来将一个 AND 和 OR 括起来
,这样才能使得OR得以按照语句的顺序执行
<select id="querySpeciesesListByMutilCondition" resultType="Species">
SELECT * FROM t_json_species
<where>
<if test="englisName != null and englisName != ''">AND englishName like CONCAT('%',#{englishName},'%') OR sameName like CONCAT('%',#{englishName},'%')</if>
<if test="host != null and host != ''">AND host like CONCAT('%',#{host},'%')</if>
<if test="position != null and position != ''">AND position like CONCAT('%',#{position},'%')</if>
<if test="location != null and location != ''">AND location like CONCAT('%',#{location},'%')</if>
<if test="phylumName != null and phylumName != ''">AND phylumName = #{phylumName}</if>
<if test="className != null and className != ''">AND className = #{className}</if>
<if test="orderName != null and orderName != ''">AND orderName = #{orderName}</if>
<if test="familyName != null and familyName != ''">AND familyName = #{familyName}</if>
<if test="jenusName != null and jenusName != ''">AND jenusName = #{jenusName}</if>
<if test="nameList != null and nameList != ''">
<foreach collection="nameList" item="name" >AND (name like CONCAT('%',#{name},'%') OR sameName like CONCAT('%',#{name},'%'))</foreach>
</if>
</where>
</select>