之前看过这个用法,但是理解的不够深刻,今天再通过一个todo实例来解释一下。 useGeneratedKeys 和 keyProperty。
TodoMapper类:
//增加
public Integer saveTodo(Todo todo);
TodoMapper.xml
<!-- 插入statement
useGeneratedKeys:开启主键回写
keyColumn:主键列名(既数据库表中的列名)
keyProperty:主键对应的属性名(实体中的属性名)
插入数据时,传过来的参数是一个对象,#{***}中的名字必须与对象中属性名一致
-->
<insert id="saveTodo" parameterType="Todo" useGeneratedKeys="true" keyColumn="id"
keyProperty="id">
insert into t_todos (content,done) values(#{content},#{done})
</insert>
这是测试类:在设计数据库的时候id是主键,自增的,所以下面new的时候没有写id。
@Test
public void testSaveTodo(){
// 创建Todo对象
Todo todo= new Todo("提交第二周作业",0);
// 插入数据
todoMapper.saveTodo(todo);
//todo 回传了自动生成的id
System.out.println(todo.getId());
}
TodoController类:
@PostMapping("/insert")
public String insert(@RequestBody Todo todo) {
todoMapper.saveTodo(todo);
Integer id = todo.getId();//回传的id
return "{\"id\":\"" + id + "\"}";
}
经过上面的例子,useGeneratedKeys 和 keyProperty的用法就很清晰了吧。