1、Mybatis文档给出的解决方案
@Insert("insert into table2 (name) values(#{name})")
@SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
int insertTable2(Name name);
- statement参数存放要执行的SQL语句
- keyProperty存放的是定义的实体类的属性
- before可以指定为true或false以指明statement定义的SQL语句在插入语句之前还是之后执行,这里采用之后执行
- resultType指定keyProperty的类型
我按照上面的操作,在我的代码中进行补充,结果是执行不了,给出的错误原因是我的数据库没有identity这个SQL语句。所以我采用了第二种方法可以。
2、Options柳暗花明又一村
@Insert("INSERT INTO user(u_name,u_sex,u_birthday,u_signature,u_avatar) VALUES (#{uName},#{uSex},#{uBirthday},#{uSignature},#{uAvatar})")
@Options(useGeneratedKeys = true, keyProperty = "uId", keyColumn = "u_id")
long insertUser(User user);
- useGeneratedKeys为true是在执行添加记录之后可以获取到数据库自动生成的主键ID
- keyProperty存放的是定义的实体类的属性
- keyColumn对应的是数据库表中的列名
这里需要注意的是,insertUser方法返回的是1或者0是指执行成功或失败
此时主键值是存放在实体里了,所以使用user.getUId()即可获得(根据你的写法进行修改)