问题:
我们想在插入一条数据后同时能够返回这条数据在表中的id,Mybatis提供了@SelectKey注解。
t_user 为数据表,主键自增
SelectKey的四个属性:
- keyColumn:插入数据以后,要返回的内容在数据表t_user中对应的字段名称
- keyProperty:指定返回的id映射到bean中的哪个属性(这里是user中的id),
- before=false:表示这个selectKey语句的执行是在insert语句之后
- resultType:selectKey语句返回值的类型,我这里是long类型
但是返回的结果一直是1,分析这个1可能是insert(user)执行成功返回1,失败返回0的结果,而不是我们想要的id。
userDao.java
@Insert("insert into t_user(name)values(#{user.name})")
@SelectKey(keyColumn = "id",keyProperty = "user.id",before = false,resultType = int.class, statement="select last_insert_id()")
int insertUser(@Param("user") User user);
调用insert:
User user = new User();
user.setName("AAA");
userDao.insertUser(user);
return userDao.insertUser(user);
解决办法:
我插入数据时插入的是一个bean,这个bean的类型就是上面我们提到的user,插入前它的id是空的;
当我们执行插入后,返回插入的结果,插入成功返回1,插入失败返回0,这就是为什么结果一直为1了。返回的id其实已经映射到了我们插入的bean中,即id值已经返回到user的id属性里了我们只要通过它的get方法就可以得到了。代码如下:
User user = new User();
user.setName("AAA");
//插入
userDao.insertUser(user);
//返回id
return user.getId();