gpt4 book ai didi

insert - MyBatis 插入一对多关系

转载 作者:行者123 更新时间:2023-12-02 11:38:52 32 4
gpt4 key购买 nike

我有一个非常简单的一个(Question)到多个(Options)关系,Option具有FK (questionId)到问题,现在我将在一个 XML 配置中插入一个 Question 对象,其中包含一个选项列表。

问题:

public Class Question{
...
private Integer questionId;
private List<Option> options;
....
}

选项:

public Class Option{
...
private Integer optionId;
private String context;

private Integer questionId; //FK

....
}

配置:

...

<insert id="insertQuestion" parameterType="com.pojos.Question" useGeneratedKeys="true">

INSERT into question (...) VALUES (...);

<selectKey keyColumn="questionId" keyProperty="questionId" resultType="int">
SELECT MAX(questionId) FROM question;
</selectKey>

INSERT INTO option (context, questionId)
VALUES
<foreach collection="options" item="option" open="(" separator="),(" close=")">
#{option.context}, #{questionId}
</foreach>
</insert>

...

如您所见,我想使用刚刚自动生成的 questionId 作为选项的 FK 信息,但是它不起作用,我该如何使其起作用?或者我不能将它们放入一个范围内?

最佳答案

在 java 8 中,您可以使用默认接口(interface)方法。首先,您需要将操作与如下内容分开:

  • 主表:

    INSERT into question (...) VALUES (...);

    <selectKey keyColumn="questionId" keyProperty="questionId" resultType="int">
    SELECT MAX(questionId) FROM question;
    </selectKey>

  • 一对多关系

    INSERT INTO option (context, questionId)
    VALUES
    <foreach collection="options" item="option" open="(" separator="),(" close=")">
    #{option.context}, #{questionId}
    </foreach>

然后,在您的界面中,您将至少有三个方法:insertQuestioninsertQuestionOptions 和默认方法(您可以将其称为 insertQuestionWithOptions示例)使用这两种方法来插入它。

public interface QuestionDao {

int insertQuestion(Question question);

int insertOptions(List<Option> options);

default int insertQuestionsWithOptions(Question question) {
insertQuestion(question);
insertOptions(question.getOptions());
}
}

所以,现在您可以使用方法 insertQuestionsWithOptions(Question Question) 来插入问题和选项一对多的关系。

关于insert - MyBatis 插入一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33028923/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com