最近在公司学着用mybatis写项目代码,之前也没有用过mybatis,原来只是接触过一点hibernate。这个项目使用的是springmvc框架,用mybaitis来写数据库的操作语句。下面说一个在用if过程中遇到的问题。下面的代码经过了改写,本意不变。
说一下流程,前端点击进入初始化界面,这个时候到数据库查询记录然后返回到前端,生成表格来展示数据。接收的是一个DTO类,初始化时什么都没有输入。下面是代码:
public class TempDTO{
private long tempId;
private String tempName;
private int frequence;
public void setTempId(long tempId){
this.tempId=tempId;
}
public long getTempId(){
return tempId;
}
public void setTempName(String tempName){
this.tempName=tempName;
}
public String getTempName(){
return tempName;
}
public void setFrequence(int frequence){
this.frequence=frequence;
}
public int getFrequence(){
return frequence;
}
}
<select id="selectList" resultType="TempDTO" parameterType="TempDTO">
select
tempid as tempId,
tempname as tempName,
frequence as frequence
from temp
where 1=1
<if test="tempName !=null">
and tempname like '%'||#{tempName,jdbcType=VARCHAR}||'%'
</if>
<if test="frequence !=null">
and frequence=#{frequence}
</if>
上面的xml的代码是为了查询满足tempName和frequence这两个查询条件的记录,初始化的时候都是系统的默认赋值。直接查询,就是出不来结果。想了很久,测试了一下frequence的默认值,结果是0。所以未给TempDTO赋值,系统默认给int类型的变量的值是0。而我的项目中frequencede 值是1-8。所以我对frequence的限制条件不够完善。这个时候改if语句为下面的代码:
<if test="frequence !=null and frequence !=0">
and frequence=#{frequence}
</if>
这样初始化时就不会进入这个if语句,从而查询出所有的记录。