如何在mybatis中使用单个查询将值插入多个表中

时间:2017-03-27 13:18:17

标签: mybatis

  

我试图使用单个查询插入到4个表中   mybatis,但不幸的是,当这样做时出错,请帮助我   进行。

mapper.xml

    <insert id="insert" parameterType="com.technoshinelabs.eduskill.bean.Course" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
START TRANSACTION;
    INSERT INTO course (course_name, training_provider, type_of_course, training_duration, number_of_license, type_of_users, about_course,
    who_can_attend, certificate, training_type, course_image,created_date,updated_date)
    VALUES (#{courseName}, #{trainingProvider}, #{typeOfCourse}, #{trainingDuation}, #{numberOfLicense}, #{typeOfUsers},
    #{aboutCourse}, #{whoCanAttend}, #{certificate}, #{trainingType}, #{courseImagePath}, now(), now());

    INSERT INTO assignment_material (course_id, file_name)
    VALUES (#{courseId},
    <foreach item="Course" collection="assignmentMaterialPath">#{Course}</foreach>);

    INSERT INTO trainer_image (course_id, file_name)
    VALUES (#{courseId},
    <foreach item="Course" collection="trainerImagePath">#{Course}</foreach>);

    INSERT INTO trainer_provider_logo (course_id, file_name)
    VALUES (#{courseId},
    <foreach item="Course" collection="trainingProviderPath">#{Course}</foreach>);
COMMIT;
</insert>
  

如果我尝试执行此操作,我会发生意外错误   (type = Internal Server Error,status = 500)。

     

更新数据库时出错。原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个

     SQL语法中的

错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在&#39; INSERT INTO附近使用正确的语法   课程(course_name,training_provider,type_of_course,training_dur&#39;   在第2行###错误可能涉及   com.technoshinelabs.eduskill.mapper.CourseMapper.insert-Inline ### The   设置参数时发生错误### SQL:START TRANSACTION;   INSERT INTO课程(course_name,training_provider,type_of_course,   training_duration,number_of_license,type_of_users,about_course,   who_can_attend,certificate,training_type,   course_image,created_date,updated_date)VALUES(?,?,?,?,?,?,?,   ?,?,?,?,now(),now()); INSERT INTO assignment_material(course_id,   file_name)VALUES(?,???); INSERT INTO trainer_image(course_id,   file_name)VALUES(?,???); INSERT INTO trainer_provider_logo   (course_id,file_name)VALUES(?,???);承诺; ###原因:   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在&#39; INSERT INTO附近使用正确的语法   课程(course_name,training_provider,type_of_course,training_dur&#39;   第2行;糟糕的SQL语法[];嵌套异常是   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在&#39; INSERT INTO附近使用正确的语法   课程(course_name,training_provider,type_of_course,training_dur&#39;   在第2行

     

错误。

1 个答案:

答案 0 :(得分:0)

删除START TRANSACTION;COMMIT;,它们不得成为查询的一部分。

4个插入将在一个语句中执行。但交易必须由应用程序或容器管理。

交易实际上是在会话开始时开始的。