在我的情況下也有相同的情況。我用for循環來檢查這條記錄是否存在於數據庫中,然後根據該記錄將此對象添加到兩個數組列表中進行插入或更新。 然後使用批處理插入和更新for循環後列出。
這裏是前。根據不同的更新,其中條件
1]這是用於更新
<foreach collection="attendingUsrList" item="model" separator=";">
UPDATE parties SET attending_user_count = #{model.attending_count}
WHERE fb_party_id = #{model.eid}
</foreach>
2]這是用於插入
<insert id="insertAccountabilityUsers" parameterType="AccountabilityUsersModel" useGeneratedKeys="false">
INSERT INTO accountability_users
(
accountability_user_id, accountability_id, to_username,
record_status, created_by, created_at, updated_by, updated_at
)
VALUES
<foreach collection="usersList" item="model" separator=",">
(
#{model.accountabilityUserId}, #{model.accountabilityId}, #{model.toUsername},
'A', #{model.createdBy}, #{model.createdAt}, #{model.updatedBy}, #{model.updatedAt}
)
</foreach>
</insert>
在DAO方法聲明爲
void insertAccountabilityUsers(@Param("usersList") List<AccountabilityUsersModel> usersList);
更新
這裏是我的批處理會話代碼
public static synchronized SqlSession getSqlBatchSession() {
ConnectionBuilderAction connection = new ConnectionBuilderAction();
sf = connection.getConnection();
SqlSession session = sf.openSession(ExecutorType.BATCH);
return session;
}
SqlSession session = ConnectionBuilderAction.getSqlSession();
Actually I already given full example here for this question
@ Sammer Kazi,當然。但是你正在更新並分別插入自己的? – Kevin
是for循環結束後,我運行了兩個批量更新和批量插入查詢。並在我的循環,我只檢查是否這個記錄退出分貝或不。在上面的例子中,插入和更新查詢僅僅是在這裏,它們對於循環來說不是相同的。 –
哦,我有點了解。在java級別,您遍歷列表,然後創建兩個子列表,sublist1包含DB中的對象,sublist2包含不是的對象。那麼對於sublist1,你做了批量更新,對於sublist2你做批量插入? – Kevin