需求
mybatis 在新增之后怎么也获取不到自增主键,通过不段的摸索原来是姿势不对,记录一下希望能帮助下一位采坑的同学
方式一
映射方式
<-- xml 映射的方式 -->
<insert id="insert" parameterType="com.kebi.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
INSERT INTO user (
username, password
) VALUES (
#{username}, #{password}
)
</insert>
属性 | 描述 |
---|---|
useGeneratedKeys | 为 true 则返回主键的值 |
keyProperty | 实体类中属性名 |
keyColumn | 数据库主键字段名 如果和实体属性名一样可以不用写 |
private UsertMapper userMapper;
User user = new User();
user.setUserName("name");
user.setPassWord("123")
userMapper.insert(user);
System.out.println("获取自增主键:"+ user.getId());
方式二
selectKey 的方式
<-- xml 映射的方式 -->
<insert id="INSERT" parameterType="com.kebi.User">
<selectKey resultType="int" order="AFTER" keyProperty="id" keyColumn="id">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO users (
username, password
) VALUES (
#{username}, #{password}
)
</insert>
属性 | 描述 |
---|---|
resultType | 结果类型 |
keyProperty | 实体类中属性名 |
keyColumn | 数据库主键字段名 |
order | 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。 |
statementType | MyBatis 支持 STATEMENT、PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型 |