最近学Mybatis时候遇到一个神奇的问题。
POJO
@Alias("role")
public class Role implements Serializable {
private long id;
private String roleName;
private String note;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", note='" + note + '\'' +
'}';
}
public void setNote(String note) {
this.note = note;
}
}
接口
public interface RoleMapper {
public int insertRole(Role role);
}
XML
<mapper namespace="deejing.Chapter3.mapper.RoleMapper">
<insert id="insertRole" parameterType="role">
<selectKey keyProperty="id" resultType="long" order="BEFORE">
SELECT if (max(id)=null,1,max(id)+3) FROM t_role
</selectKey>
insert into t_role(id,role_name,note) values (#{id},#{roleName},#{note})
</insert>
</mapper>
测试函数
@Test
public void testDemo02(){
SqlSession session = SqlSessionUtil.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
Role role = new Role();
role.setRoleName("陈奕迅");
role.setNote("歌手");
mapper.insertRole(role);
session.commit();
session.close();
}
运行后发现插入失败
报如下错误:
查看错误信息发现是实体类的id属性没有用包装类,导致没有插入数据。
把实体类的id属性类型换成包装类Long,重新生成getter和setter。
public class Role implements Serializable {
private Long id;
private String roleName;
private String note;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
就成功插入了数据了。。。。
最神奇的是:我把实体类的id类型重新换回去long类型。它还是能正常插入数据,不会报之前的错误。
@Alias("role")
public class Role implements Serializable {
private long id;
private String roleName;
private String note;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", note='" + note + '\'' +
'}';
}
public void setNote(String note) {
this.note = note;
}
}
这到底是为什么???只要把数据库插入的数据删除后,又会报同样的错误。这到底是为什么???
找了很久都找不到答案,本人小白,请各位大佬告诉一下。