我在通過在我的java項目中使用mybatis將用戶信息保存到mysql中時遇到了問題。要求如下:使用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」, 「httpStatusCode」:500, 「applicationErrorCode」 :0, 「errorMessage」:「Unexpected Throwable:Mapper method'com.rosettastone.ws.ptsws.dao.mybatis.UserLearningCourseDaoImpl.saveOrUpdate'has a unsupported return type:class com.rosettastone.ws.ptsws.domain.UserLearningCourse」 , 「errorDetails」:null, 「payload」:null }
我在代碼中定義的方法是:
UserLearningCourse saveOrUpdate(UserLearningCourse entity);
我打算回到實體,但錯誤拋出。我知道xml sql配置不與返回類型。但如何解決?