MyBatis实战——Oracle写数据并生成主键
程序员文章站
2024-03-20 10:28:16
...
一、写入单条数据
<insert id="addUserTest" parameterType="com.totem.model.UserTest">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
SELECT seq_user_test.nextval FROM dual
</selectKey>
INSERT INTO user_test(ID, u_name, u_age, u_address, u_tele)
VALUES
(#{id}, #{user.uName}, #{user.uAge}, #{user.uAddress}, #{user.uTele})
</insert>
此种写法为MyBatis官方文档推荐写法,其中
-- keyProperty指定INSERT语句中的主键名,需要和INSERT语句中的主键名保持一致
-- resultType指定主键的类型
-- order指定selectKey标签中的数据的执行时机(在INSERT之前还是之后)
二、写入多条数据
<insert id="addUserTestList" parameterType="java.util.List">
INSERT INTO user_test(ID, u_name, u_age, u_address, u_tele)
SELECT seq_user_test.nextval, u.* from (
<foreach collection="list" item="user" separator="union all">
select
#{user.uName},
#{user.uAge},
#{user.uAddress},
#{user.uTele}
from dual
</foreach>
) u
</insert>
因为Oracle的主键是通过序列来实现增长的,区别于MySQL、MSDB等自增型主键,所以此种写法借助oracle中表数据复制的原理进行
-- foreach标签中的语句借助dual表将映射进来的数据生成虚拟表
-- 最后将虚拟表中的数据复制到目标表之中
上一篇: JavaScript学习笔记——DOM