遇到的问题
- 环境说明:
- 数据库:PostgreSQL
- Mybatis版本:3.4.6
- 通过Mybatis中的 @Insert() 注解,新增数据后,想再通过插入数据的Bean对象来获取id
- 此时:Bean对象里的id值,不能够正常获取到一开始设置的值,而是一个固定的【test】值
- 注意:
- 并非是自增id,就是一个简单的再次获取Bean对象里的值
- 具体问题:看下面代码所描述
@Entity
@Table(name = "user")
@Data
@ToString
public class ScreenStatusRecord {
@Id
private String id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
}
@Insert({
"insert into user (name,age,id) values (#{name},#{age},#{id})"
})
int insert(User user);
User user = new User();
user.setId("32pkId");
user.setName("张三");
user.setAge(23);
UserMapper.insertUser(user);
user.getId();
CREATE TABLE "public"."user" (
"id" char(32) COLLATE "pg_catalog"."default" NOT NULL,
"name" varchar(255) COLLATE "pg_catalog"."default",
"age" int4 NOT NULL DEFAULT 0,
CONSTRAINT "id_key" PRIMARY KEY ("id")
);
解决:
- 经过思考,可能是与Mybatis中的设置有关,于是先去看看官网中有没有说明。找到 insert, update 和 delete 文档说明
- 并在参数说明中看到如下说明:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5e6d44e8f2784d4a99a50ded4c3723e1.png)
- 根据 keyColum 的描述,正好user的Insert都占有
- 尝试解决
- 使用Options注解,给@Insert()注解设置参数
- 主要设置keyColumn的值为id
@Options(keyColumn = "id")
@Insert({
"insert into user (name,age,id) values (#{name},#{age},#{id})"
})
int insert(User user);
原因分析
- 尚未知道具体原因和导致id的值为【test】的原因,以及其原理是什么。有懂的大神给留个言说明一下