0
点赞
收藏
分享

微信扫一扫

mybatis在向oracle数据库中插入数据时返回当前插入数据的主键

IT程序员 2022-02-06 阅读 141

在数据库中设置主键默认值为sys_guid()

Dao层返回值为void,

注意:Dao层不需要返回值,查询到的主键在serviceimpl层中的pojo(实体类对象)中使用getId直接获取就可以,因为id已经自动添加到对象中了。

Dao层: 
public void save(ComUser comUser);

如果需要单独获取主键则可以在serviceimpl层中直接获取

//serviceimpl层
//id:主键 
id = comsd.getId(id);

mapper.xml中写法:

注意:在执行insert后会生成一个新的sys_guid()值,也就是主键 ,然后我们在获取主键的时候会执行:select sys_guid()  from dual也会新生成一个sys_guid值,也就是每次查询sys_guid会生成新的sys_guid值,所以要设置order为before,查询上次生成的sys_guid()也就是执行insert语句的时候生成的sys_guid()。这样就能保证获取到的主键就是本次插入数据的主键。

mapper层
注意:在执行insert后会生成一个新的sys_guid()值,也就是主键 ,然后我们在获取主键的时候会执行:select sys_guid()  from dual也会新生成一个sys_guid值,也就是每次查询sys_guid会生成新的sys_guid值,所以要设置order为before,查询上次生成的sys_guid()也就是执行insert语句的时候生成的sys_guid()。这样就能保证获取到的主键就是本次插入数据的主键。
<insert id="saver" parameterType="com.app.wxservice.dto.ComUser"
    >
        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
            select sys_guid()  from dual
        </selectKey>
        insert into userinfo.user
        <trim prefix="(" suffix=")" suffixOverrides="," >
            <if test="id != null" >
                id,
            </if>
            <if test="username != null" >
                username,
            </if>
            
            <if test="nationality != null" >
                nationality,
            </if>
            <if test="updatetime != null" >
                updatetime,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
            <if test='id != null '>
                #{id},
            </if>
            <if test='username != null'>
                #{username},
            </if>
            <if test='nationality != null'>
                #{nationality},
            </if>
        </trim>
    </insert>
举报

相关推荐

0 条评论