用mybatis反向工程生成mapper.xml文件的时候,需要联表查询,两个表主键都是ID,直接查询的时候会报错:
Column 'id' in where clause is ambiguous
打开xml文件查看sql代码:
<sql id="Example_Where_Clause" >
<where >
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue " >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
在查看了POJOExample.java文件后,发现criterion.singleValue是一个boolean类型,true代表是一个查询条件,也就是EqualTo,like等查询。
既然是ID不明确,那么就在xml文件里面加判断条件
<if test="criterion.condition =='id ='">
and t_supplier.id = #{criterion.value}
</if>
<if test="criterion.condition !='id ='">
and ${criterion.condition} #{criterion.value}
</if>
至于为什么是'id ='
,因为在addCriterion的时候添加的是addCriterion("id =", value, "id");