刚刚测试Sql的时候发现了一个小问题,具体测试代码如下:
@Test
public void testCountByCondition() {
FollowFans followFans = new FollowFans( );
System.out.println(followFans);
followFans.setFansId(1);
System.out.println(followFansMapper.countByCondition(followFans));
}
- 我的小问题就是其实是由一句sql引起的,它主要干的一件事儿,就是id不为空才把条件加到where中去,再去查询
<select id="countByCondition" resultType="java.lang.Integer">
SELECT count(*) FROM follow_fans
<where>
<if test="followId!=null">
follow_id=#{followId}
</if>
<if test="fansId!=null">
AND fans_id=#{fansId}
</if>
</where>
</select>
从测试类可以看到 我只加了一个值,另外的followId并没有加,而最终传的sql却是两个条件都有,神奇的是followId居然有个0值
==> Preparing: SELECT count(*) FROM follow_fans WHERE follow_id=? AND fans_id=?
==> Parameters: 0(Integer), 1(Integer)
<== Columns: count(*)
<== Row: 0
<== Total: 1
开始分锅
- 到底是sql的问题还是类的问题,我觉得都对哈哈
- 咳咳,打印了一下没有任何赋值的followFans 对象,发现三个值都是0,这就有点蹊跷了,它的无参构造类不干赋值的事儿,也就是说,这个0是自带的?或者说是默认值?
followFans{id=0, followId=0, fansId=0}
int的默认值
- 在Java中int在对象中是会给一个默认值的,就是0,别的情况是不会又默认值的。
没有默认值的Integer
- 在我把类型改回Integer后,测试得以成功,而通过打印也发现,Integer在对象中并不会自动赋默认值,或者说,没有默认值。
网友评论