做系统很多时候都会使用到查询功能,但有时只是想针对某列数据进行查询,下面是我在mapper.xml中的配置。
主要说2个问题:
1.使用where 1=1是因为oid可能为null,如果不加 1=1,那么就可能出现where and id==#{id,jdbcType=INTEGER}的问题,这样语句会出错,加了 1=1就可以避免这种问题。
2.有时候数据可能为null,也有可能为"",如果只判断null,就会找不到结果,所以添加 onote != ‘’(PS:是 ’ 和 ‘,不是")。
3.对于INTEGER型数据,如果输入的参数可能为0,那么使用xxx !=’‘的话会出现把所有数据都显示出来的情况,有两种解决方法:
1)把xxx !=’'去掉,只保留xxx !=null
2)在判断语句后面添加 or xxx==0,如下面的图2那样。
通过下面这个方法,我们就不需要每个数据都有输入,只输入想要查询的条件就行。
<select id="findPartOperate" resultType="cn.lnsf.bean.Operate" parameterType="cn.lnsf.bean.Operate">
select * from operate where 1=1
<if test="oid != null" >
and oid=#{oid,jdbcType=INTEGER}
</if>
<if test="id != null" >
and id=#{id,jdbcType=INTEGER}
</if>
<if test="time != null" >
and time=#{time,jdbcType=TIMESTAMP}
</if>
<if test="onote != null and onote != ''" >
and onote=#{onote,jdbcType=VARCHAR}
</if>
<if test="ostate != null and ostate != ''" >
and ostate=#{ostate,jdbcType=VARCHAR}
</if>
</select>