Files
han-note/han-note-note/han-note-note-biz/src/main/resources/mapperxml/NoteCollectionDOMapper.xml
Hanserwei f49d0e6b76 refactor(mq): 重构笔记收藏与点赞的MQ消费者实现以提升性能和可靠性
- 使用DefaultMQPushConsumer替代RocketMQListener以支持批量消费
- 实现消息批量处理逻辑,减少数据库交互次数
- 添加内存级操作合并,避免重复操作写入数据库
- 配置流量削峰限流,控制数据库QPS在可接受范围
- 增加重试机制和手动ACK确保消息可靠消费
- 调整MQ主题订阅关系,统一消息流转逻辑
- 新增RocketMQ客户端依赖以支持底层API调
- 优化消费者启动和销毁流程,确保资源正确释放
- 修改Mapper支持批量插入或更新操作
- 调整计数服务消费主题,简化消息链路
2025-11-06 20:17:00 +08:00

43 lines
1.9 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hanserwei.hannote.note.biz.domain.mapper.NoteCollectionDOMapper">
<resultMap id="BaseResultMap" type="com.hanserwei.hannote.note.biz.domain.dataobject.NoteCollectionDO">
<!--@mbg.generated-->
<!--@Table t_note_collection-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="note_id" jdbcType="BIGINT" property="noteId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="status" jdbcType="TINYINT" property="status" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, user_id, note_id, create_time, `status`
</sql>
<insert id="insertOrUpdate" parameterType="com.hanserwei.hannote.note.biz.domain.dataobject.NoteCollectionDO">
INSERT INTO t_note_collection (user_id, note_id, create_time, status)
VALUES (#{userId}, #{noteId}, #{createTime}, #{status})
ON DUPLICATE KEY UPDATE
create_time = #{createTime}, status = #{status};
</insert>
<update id="update2UnCollectByUserIdAndNoteId"
parameterType="com.hanserwei.hannote.note.biz.domain.dataobject.NoteCollectionDO">
update t_note_collection
set status = #{status},
create_time = #{createTime}
where user_id = #{userId}
and note_id = #{noteId}
and status = 1
</update>
<insert id="batchInsertOrUpdate" parameterType="list">
INSERT INTO t_note_collection (user_id, note_id, status, create_time)
VALUES
<foreach item="item" collection="noteCollectionDOS" separator=",">
(#{item.userId}, #{item.noteId}, #{item.status}, #{item.createTime})
</foreach>
ON DUPLICATE KEY UPDATE status = VALUES(status)
</insert>
</mapper>