不要在实体类中使用int
我们都知道Integer是int的包装类,而int是基本数据类型。所以Integer类型的变量会初始化为null
,int类型则会被初始化为0 。
所以在下面的动态拼接例子中:
<select id="findActiveBlogWithTitleLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title_id like #{id}
</if>
</select>
如果id在实体类中是用int表示,那<if test="title != null">
的判断是恒为真的。无法达到动态拼接的效果。
如果用integer表示,当id缺省时会被初始化为null
这样这条动态sql才能按照我们的预想运行。
integer缓存
此外,integer与int的区别还需要注意的是:因为integer是引用类型所以对其大小进行比较时不能使用等号.
integer
跟string
有一些相似之处
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);
i1 = 128;
i2 = 128;
System.out.println(i1 == i2);
/*result:
true
false
*/
integer具有缓存机制,这个缓存值默认范围是**-128 到 127 **,刚好是八位二进制补码的表示范围(计算机读取文件以字节为单位的,也就是8比特).