SelectKey 元素的属性
SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题。
数据库主键包括自增和非自增,有时候新增一条数据不仅仅知道成功就行了,后边的逻辑可能还需要这个新增的主键,这时候再查询数据库就有点耗时耗力,我们可以采用selectKey来帮助我们获取新增的主键。
属性 | 描述 |
---|---|
keyProperty | 表示查询结果赋值给代码中的哪个对象 |
keyColumn | 表示将查询结果赋值给数据库表中哪一列 |
resultType | 填入 keyProperty 的 Java 类型 |
before | 可以设置为 true 或false 。要运行的SQL语句。before=true 表示插入之前进行查询,可以将查询结果赋给keyProperty和keyColumn,赋给keyColumn相当于更改数据库。before=false 表示先插入,再查询,这时只能将结果赋给keyProperty。注意:使用MySQL的last_insert_id()函数时,before必为false,也就是说必须先插入然后执行last_insert_id()才能获得刚刚插入数据的ID |
statementType | 要运行的SQL语句,它的返回值通过resultType来指定 |
IUserDao接口:
/**
* 保存用户
*/
@Insert("insert into user(username,birthday,sex,address) values (#{userName},#{userBirthday},#{userSex},#{userAddress})")
@SelectKey(keyColumn = "id",keyProperty = "userId",before = false,resultType =Integer.class,statement = {
" select last_insert_id()"})
@ResultMap("userMap")
void saveUser(User user);
测试类:
@Test
public void testSave() throws Exception {
User user = new User();
user.setUserName("周杰伦");
user.setUserAddress("台湾省台北市");
user.setUserSex("男");
user.setUserBirthday(new Date());
userDao.saveUser(user);
System.out.println(user);
}
控制台打印结果: