gpt4 book ai didi

java - 使用MyBatis将用户信息保存到MySQL中

转载 作者:行者123 更新时间:2023-11-29 21:21:07 24 4
gpt4 key购买 nike

我在我的java项目中使用mybatis将用户信息保存到mysql时遇到问题。要求如下:

如果数据库中不存在用户信息,则插入该用户。

如果数据库中存在用户信息,则更新该用户。

现在我查了mybatis的文档,动态sql定义可能会节省我的时间,但我没有找到它的例子。下面是我想要更改的示例 sql:

   <insert id="create" parameterType="UserLearningCourse" >
<!--If record not exists, perform insert command-->
INSERT INTO `user_learning_course` (
user_identifier,
course_identifier,
best_grade,
latest_grade,
total_number_of_sequences,
last_modified_at
)
VALUES (
#{user_identifier},
#{course_identifier},
#{best_grade},
#{latest_grade},
#{total_number_of_sequences},
#{last_modified_at}
)
<!--If record exists, perform update command-->
UPDATE user_learning_course
<set>
<if test="best_grade!=null">
best_grade = #{best_grade},
</if>
<if test="latest_grade!=null">
latest_grade = #{latest_grade},
</if>
<if test="total_number_of_sequences!=null">
total_number_of_sequences = #{total_number_of_sequences},
</if>
<if test="last_modified_at!=null">
last_modified_at = #{last_modified_at},
</if>
</set>
WHERE user_identifier = #{user_identifier}
</insert>

谁做过这个,能给我一些灯吗?谢谢。

编辑:现在我可以根据过滤器插入或更新数据库。但问题是我无法得到返回结果。有人会帮忙吗?下面的 xml sql:

  <insert id="saveOrUpdate" parameterType="UserLearningCourse" useGeneratedKeys="true"
keyProperty="id" keyColumn="id">
<selectKey keyProperty="count" resultType="int" order="BEFORE">
SELECT COUNT(*) count FROM user_learning_course
where user_identifier = #{userIdentifier}
AND course_identifier = #{courseIdentifier}
</selectKey>

<if test="count > 0">
UPDATE user_learning_course
<set>
<if test="courseIdentifier!=null">
course_identifier = #{courseIdentifier},
</if>
<if test="bestCourseGrade!=null">
best_grade = #{bestCourseGrade},
</if>
<if test="latestCourseGrade!=null">
latest_grade = #{latestCourseGrade},
</if>
<if test="totalNumberOfSequences!=null">
total_number_of_sequences = #{totalNumberOfSequences},
</if>
<if test="lastModifiedAt!=null">
last_modified_at = #{lastModifiedAt},
</if>
</set>
<where>
user_identifier = #{userIdentifier}
AND course_identifier = #{courseIdentifier}
</where>
</if>
<if test="count==0">
INSERT INTO `user_learning_course` (
user_identifier,
course_identifier,
best_grade,
latest_grade,
total_number_of_sequences,
last_modified_at
)
VALUES (
#{userIdentifier},
#{courseIdentifier},
#{bestCourseGrade},
#{latestCourseGrade},
#{totalNumberOfSequences},
#{lastModifiedAt}
)
</if>

</insert>

但是在我运行它之后,它会抛出异常:

{ “类型”:“genericResponseWrapper”, “http状态代码”:500, “应用程序错误代码”:0, "errorMessage": "意外的 Throwable: Mapper 方法 'com.rosettastone.ws.ptsws.dao.mybatis.UserLearningCourseDaoImpl.saveOrUpdate' 具有不受支持的返回类型:类 com.rosettastone.ws.ptsws.domain.UserLearningCourse", “错误详细信息”:空, “有效负载”:空}

我在代码中定义的方法是:

    UserLearningCourse saveOrUpdate(UserLearningCourse entity);

我打算返回实体,但抛出错误。我知道 xml sql 配置没有返回类型。但如何解决呢?

最佳答案

终于,我解决了这个问题。首先是下面的sql:

<insert id="saveOrUpdate" parameterType="UserLearningCourse" useGeneratedKeys="true"
keyProperty="id" keyColumn="id">
<selectKey keyProperty="count" resultType="int" order="BEFORE">
SELECT COUNT(*) count FROM user_learning_course
where user_identifier = #{userIdentifier}
AND course_identifier = #{courseIdentifier}
</selectKey>

<if test="count > 0">
UPDATE user_learning_course
<set>
<if test="courseIdentifier!=null">
course_identifier = #{courseIdentifier},
</if>
<if test="bestCourseGrade!=null">
best_grade = #{bestCourseGrade},
</if>
<if test="latestCourseGrade!=null">
latest_grade = #{latestCourseGrade},
</if>
<if test="totalNumberOfSequences!=null">
total_number_of_sequences = #{totalNumberOfSequences},
</if>
<if test="lastModifiedAt!=null">
last_modified_at = #{lastModifiedAt},
</if>
</set>
<where>
user_identifier = #{userIdentifier}
AND course_identifier = #{courseIdentifier}
</where>
</if>
<if test="count==0">
INSERT INTO `user_learning_course` (
user_identifier,
course_identifier,
best_grade,
latest_grade,
total_number_of_sequences,
last_modified_at
)
VALUES (
#{userIdentifier},
#{courseIdentifier},
#{bestCourseGrade},
#{latestCourseGrade},
#{totalNumberOfSequences},
#{lastModifiedAt}
)
</if>

二、方法如下:

  UserLearningCourse saveUpdate(UserLearningCourse entity);

三、调用方法:

 public UserLearningCourse saveUpdate(UserLearningCourse userLearningCourse)
{
int affectRows = userLearningCourseDao.saveOrUpdate(userLearningCourse);
return userLearningCourse;
}

在这里,您可以看到,返回 ID 已自动过滤到原始 userLearningCourse 中。所以这里现在可以直接返回实体了。因为我们引用了keyproperty和keycolumn,所以mybatis会自动返回。saveOrUpdate 仅返回影响数据库中的行。

关于java - 使用MyBatis将用户信息保存到MySQL中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35716683/

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