MyBatis自动生成id useGeneratedKeys

mybatis可以使用useGeneratedKeys来自动生成id(其他数字的值也一样可以):

    <insert id="save" parameterType="UserAlias" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO userinfo(username,age)
        VALUES
        (#{username}, #{age})
        </insert>

上面的代码是针对mysql,在数据库中设置了id自增长的示例。

keyProperty这里指定自动增长的字段,我这里是id。所以下边的insert中可以不写id字段,前提是数据库中一定要设置好id的自增长。

如果数据库中没有设置自增长可以用下面代码:

    <insert id="save" parameterType="UserAlias" useGeneratedKeys="true" keyProperty="id">
        <selectKey keyProperty="id" resultType="long" order="BEFORE">
          SELECT if(max(id) is null,1,MAX(id) + 1 ) as id from userinfo
        </selectKey>
        INSERT INTO userinfo(id,username,age)
        VALUES
        (#{id}, #{username}, #{age})
        </insert>

这时候的insert语句就要写上id字段喽。

如果是Oracle这种没有自增长功能的数据库可以用上边的方式,也可以用sequence。如建了一个user_id_sequence:

    <insert id="save" parameterType="UserAlias" useGeneratedKeys="true" keyProperty="id">
        <selectKey keyProperty="id" resultType="long" order="BEFORE">
          SELECT user_id_sequence.nextval from dual
        </selectKey>
        INSERT INTO userinfo(id,username,age)
        VALUES
        (#{id}, #{username}, #{age})
        </insert>

这里Oracle的我没有测试,只是给出参考。

猜你喜欢

转载自blog.csdn.net/qq_35981283/article/details/79602452