oracle的mybatis遍历插入的写法,发现和mysql,pgsql,sqlserver的写法差距有点大,下面把oracle的写法粘贴出来
int insertAttendance(@Param("attendanceList") List<Attendance> attendanceList);
<insert id="insertAttendance" useGeneratedKeys="false" parameterType="com.jbf.dzg.attendance.domain.Attendance">
INSERT INTO JBF_SYS_WORK_ATTENCE (ID, WORKER_NAME, SEX, ATTENDANCE_START_TIME, ATTENDANCE_END_TIME, ATTENDANCE_STATE, SYS_USER_ID, PROJECT_ID, PROJECT_NAME)
<foreach collection="attendanceList" item="attendance" separator="union all">
(
SELECT
#{attendance.id},
#{attendance.workerName},
#{attendance.sex},
to_date(#{attendance.attendanceStartTime}, 'SYYYY-MM-DD HH24:MI:SS'),
to_date(#{attendance.attendanceEndTime}, 'SYYYY-MM-DD HH24:MI:SS'),
#{attendance.attendanceState},
#{attendance.sysUserId},
#{attendance.projectId},
#{attendance.projectName}
FROM DUAL
)
</foreach>
</insert>
特点:
1:oracle中要加上 useGeneratedKeys=“false” 这个配置,为ture表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回,false反之;
2:没有values这个关键词,其它数据库都是需要这个词的,但oracle偏偏没有;
3:插入的值需要用 SELECT。。。。。 FROM DUAL包裹,dual是Oracle中的一个伪表,也是实际存在的表,任何用户均可读取,常用在没有目标表的Select中,就是用来计算计算常数表达式
4:separator=“union all” 这里不再是“,”了
初用oracle,有什么不对请各位指正