一 .实体类创建不规范,使用了基本数据类型
实体
public class StudentEntity {
private Integer id;
private String name;
private String sex;
private String birth;
private String department;
private String address;
private String studentPhone;
private int chineseTest;
//此处省略 get set 方法
}
xml 文件
<select id="selectStudent" parameterType="com.wangyanlei.szgcspringboot.student.entity.StudentEntity" resultType="com.wangyanlei.szgcspringboot.student.entity.StudentEntity">
SELECT * FROM student
WHERE 1=1
<if test="id != null">
AND id=#{id}
</if>
<if test="chineseTest !=null">
AND chinese_test=#{chineseTest}
</if>
</select>
结果:
二 .<if>标签书写不规范
实体
public class StudentEntity {
private Integer id;
private String name;
private String sex;
private String birth;
private String department;
private String address;
private String studentPhone;
private Integer chineseTest;
//此处省略 get set 方法
}
这是情景是需要查询语文成绩为0 的学生集合
xml 文件
<select id="selectStudent" parameterType="com.wangyanlei.szgcspringboot.student.entity.StudentEntity" resultType="com.wangyanlei.szgcspringboot.student.entity.StudentEntity">
SELECT * FROM student
WHERE 1=1
<if test="id != null">
AND id=#{id}
</if>
<if test="chineseTest !=null and chineseTest !=''">
AND chinese_test=#{chineseTest}
</if>
</select>
结果:
总结:
情况一 : 实体类的属性chineseTest 不应该选用int 类型,因为会有默认值0
情况二:Integer类型在mybatis 里面不应该写 不等于空 (即chineseTest !='') 因为mybatis 默认为0与‘’等价
三、Mysql 默认不支持批量更新
<update id="updateBatch" parameterType="java.util.Collection">
<foreach collection="pojos" item = "pojo" separator= ";" >
update your_table t set pt.your_value = #{pojo.yourValue} where pt.id = #{pojo.id}
</foreach>
</update>
在执行过程中报异常,但是sql和参数直接在DB里执行是好的,原因是MySql默认不支持批量更新,需要开发人员主动设置,只需要在你的数据库连接url后面加上&allowMultiQueries=true