此类教程在网上已经有很多,这篇博客主要讲采坑,附带提一下方法。
方法:
假设mysql存在表user,其字段及内容如下:
user_id | user_name |
1 | a |
2 | b |
与其对应的实体类:
@Getter
@Setter
@ToString
public class User {
Integer user_id;
String user_name;
}
mapper层的接口:
@Mapper
public interface UserMapper {
/**
* 创建User
* @param user
* @return
*/
int createUser(User user);
}
接口映射的xml:
<!-- 创建user -->
<insert id="createUser" parameterType="top.jngcs.test.entity.User">
insert into user (user_name) values (#{user_name})
<selectKey resultType="integer" keyProperty="user_id" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
</insert>
注意事项
之前作业项目需要获取插入数据后的自增主键时,我都采用的上述方式。这次作业的项目却翻车了,原因主要有三个:
- 要获取自增主键,接口映射的xml传参需要用实体类来承接mybatis插入后返回的数据。<selectKey>标签中属性keyProperty就是主键的字段名。如果你没有传入一个类,或者keyProperty写错,mybatis都无法帮你绑定数据。
- 如果数据库中使用的下划线命名,而java中用的驼峰命名,注意配置mybatis的命名转换,且不要写错类中对应mysql表的参数。
- <insert>标签返回值是插入的个数,这里执行一次插入,如果成功,返回值是1,不要直接拿这个返回值当做自增主键值,否则一直返回的1,要通过实体类中的get方法获取自增主键值。我就是犯的第三个错误,写了个测试类调了半天。