mybatis——useGeneratedKeys=“true” keyProperty=“id”



  • 在开发中需要向表中插入自增ID,这个时候领域模型如果想要获取该ID的值,就需要在相应的mapper文件中添加useGeneratedKeys="true" keyProperty="id"

  • useGeneratedKeys:为true时,表示如果插入的表id以自增列为主键,则插入成功之后使用JDBC的getGenereatedKeys方法获取主键并赋值keyProperty设置的领域模型属性中

  • keyProperty:指明数据库中返回的主键id给实体类中的哪个属性。由于是数据库生成的主键,所以在这个对象持久化到数据库之前是对象中的这个属性是没有属性值的,但是在持久化之后又想使用这个主键,出现这样的情况时可以用keyProperty="id"


注意:

  • 其中keyProperty的值是对象的属性值,不是数据库表中的字段名

  • useGeneratedKeys默认值是false,只针对insert语句生效



UserMapper.xml:

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.cy.store.mapper.UserMapper">


    <!--解决实体类属性名和数据库字段名不一致的问题-->
    <resultMap id="UserEntityMap" type="user">
        <id column="uid" property="uid"/>
        <result column="is_delete" property="isDelete"/>
        <result column="created_user" property="createdUser"/>
        <result column="created_time" property="createdTime"/>
        <result column="modified_user" property="modifiedUser"/>
        <result column="modified_time" property="modifiedTime"/>
    </resultMap>


    
    <select id="getUserByName" parameterType="string" resultType="UserEntityMap">
        select * from store.t_user where username = #{username};
    </select>

    <insert id="addUser" parameterType="user" useGeneratedKeys="true" keyProperty="uid">
        insert into store.t_user (username, password, salt, phone, email, gender, avatar,is_delete, created_user, created_time, modified_user, modified_time)
        values(#{username}, #{password}, #{salt}, #{phone}, #{email}, #{gender}, #{avatar}, #{isDelete}, #{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime});
    </insert>


</mapper>












posted @ 2022-04-03 17:13  卡卡发  阅读(553)  评论(0)    收藏  举报