mybatis insert操作 返回插入的那条数据的id

时间:2021-03-16 21:47:32

1、useGeneratedKeys=”true” 可以获取自增长的ID 只支持具有自增长方式的那种数据库(mysql, mssql 等 但 oracle 就不支持了 )

<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="User">  
    insert into user(userName,password,comment)  
    values(#{userName},#{password},#{comment})  
</insert> 

User user = new User();  
user.setUserName("chenzhou");  
user.setPassword("xxxx");  
user.setComment("测试插入数据返回主键功能");  
System.out.println("插入前主键为:"+user.getUserId());  //没有 0
userDao.insertAndGetId(user);//插入操作  
System.out.println("插入后主键为:"+user.getUserId());  //userId 的值

2.对于不支持自动生成主键(如Oracle),可以采用以下方式
<insert id="insert" parameterType="com.test.User">
   <selectKey resultType="INTEGER" order="BEFORE" keyProperty="userId">  
       SELECT SEQ_USER.NEXTVAL as userId from DUAL
   </selectKey> 
    insert into user (user_id, user_name, modified, state)
    values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR},  #{modified,jdbcType=TIMESTAMP}, #{state,jdbcType=INTEGER})
</insert>