@SelectKey
-
主要是用于在进行sql语句的操作时,将一些数据查询出来放入到对象的字段中。即有时候新增一条数据不仅仅知道成功就行了,后面的逻辑可能还需要这个新增的主键,这时候可以避免再次查询数据库。
-
在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题。
属性 | 描述 |
---|---|
keyProperty | 表示查询结果赋值给代码中的哪个对象,一般是赋值给对象的某个属性 |
keyColumn | 表示将查询结果赋值给数据库表中哪一列 |
resultType | 填入 keyProperty 的 Java 类型 |
before | 可以设置为 true 或false。要运行的SQL语句,before=true表示插入之前进行查询,可以将查询结果赋给keyProperty和keyColumn,赋给keyColumn相当于更改数据库。before=false表示先插入,再查询,这时只能将结果赋给keyProperty。 |
statement | 执行语句 |
1. 查询最后一次插入的主键id,将其赋值给对象id
@SelectKey(statement="SELECT last_insert_id", keyProperty="id", before=false, resultType=Long.class)
2. 执行查询语句,将结果赋值给对象的其他成员属性
@Insert({
"insert into `submit` (id, hand_expert_id, ",
"receive_expert_id, mission_id, ",
"pathology_number, start_time, ",
"status, logic_deletion)",
"values (#{id,jdbcType=BIGINT}, #{handExpertId,jdbcType=INTEGER}, ",
"#{receiveExpertId,jdbcType=INTEGER}, #{missionId,jdbcType=INTEGER}, ",
"#{pathologyNumber,jdbcType=VARCHAR}, #{startTime,jdbcType=TIMESTAMP}, ",
"#{status,jdbcType=TINYINT}, #{logicDeletion,jdbcType=TINYINT})"
})
@SelectKey(statement="SELECT mission_id from submit where id = last_insert_id()", keyProperty="missionId", before=false, resultType=Long.class)
int insert(Submit record);