需求

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 类型
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐