Files
FrameTour-BE/src/main/resources/mapper/PuzzleElementMapper.xml
Jerry Yan 42e806df76 feat(puzzle): 添加批量替换模板元素功能
- 在 PuzzleTemplateController 中新增 replaceElements 接口
- 在 PuzzleElementMapper 中新增 getByTemplateIdAndKey 查询方法
- 在 PuzzleTemplateServiceImpl 中实现 replaceElements 业务逻辑
- 在 IPuzzleTemplateService 接口中定义 replaceElements 方法
- 在 PuzzleElementMapper.xml 中添加对应 SQL 查询语句
2025-11-18 12:47:24 +08:00

125 lines
5.3 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.ycwl.basic.puzzle.mapper.PuzzleElementMapper">
<!-- 结果映射(重构版) -->
<resultMap id="BaseResultMap" type="com.ycwl.basic.puzzle.entity.PuzzleElementEntity">
<id column="id" property="id"/>
<result column="template_id" property="templateId"/>
<result column="element_type" property="elementType"/>
<result column="element_key" property="elementKey"/>
<result column="element_name" property="elementName"/>
<result column="config" property="config"/>
<!-- 位置和布局属性 -->
<result column="x_position" property="xPosition"/>
<result column="y_position" property="yPosition"/>
<result column="width" property="width"/>
<result column="height" property="height"/>
<result column="z_index" property="zIndex"/>
<result column="rotation" property="rotation"/>
<result column="opacity" property="opacity"/>
<!-- 元数据 -->
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="deleted" property="deleted"/>
<result column="deleted_at" property="deletedAt"/>
</resultMap>
<!-- 基础列(重构版) -->
<sql id="Base_Column_List">
id, template_id, element_type, element_key, element_name, config,
x_position, y_position, width, height, z_index, rotation, opacity,
create_time, update_time, deleted, deleted_at
</sql>
<!-- 根据ID查询 -->
<select id="getById" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM puzzle_element
WHERE id = #{id} AND deleted = 0
LIMIT 1
</select>
<!-- 根据模板ID查询元素列表(按z-index排序) -->
<select id="getByTemplateId" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM puzzle_element
WHERE template_id = #{templateId} AND deleted = 0
ORDER BY z_index ASC, id ASC
</select>
<!-- 根据模板ID和元素Key查询元素 -->
<select id="getByTemplateIdAndKey" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM puzzle_element
WHERE template_id = #{templateId} AND element_key = #{elementKey} AND deleted = 0
LIMIT 1
</select>
<!-- 插入(重构版) -->
<insert id="insert" parameterType="com.ycwl.basic.puzzle.entity.PuzzleElementEntity"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO puzzle_element (
template_id, element_type, element_key, element_name, config,
x_position, y_position, width, height, z_index, rotation, opacity,
create_time, update_time, deleted
) VALUES (
#{templateId}, #{elementType}, #{elementKey}, #{elementName}, #{config},
#{xPosition}, #{yPosition}, #{width}, #{height}, #{zIndex}, #{rotation}, #{opacity},
NOW(), NOW(), 0
)
</insert>
<!-- 批量插入(重构版) -->
<insert id="batchInsert">
INSERT INTO puzzle_element (
template_id, element_type, element_key, element_name, config,
x_position, y_position, width, height, z_index, rotation, opacity,
create_time, update_time, deleted
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.templateId}, #{item.elementType}, #{item.elementKey}, #{item.elementName}, #{item.config},
#{item.xPosition}, #{item.yPosition}, #{item.width}, #{item.height}, #{item.zIndex}, #{item.rotation}, #{item.opacity},
NOW(), NOW(), 0
)
</foreach>
</insert>
<!-- 更新(重构版) -->
<update id="update" parameterType="com.ycwl.basic.puzzle.entity.PuzzleElementEntity">
UPDATE puzzle_element
<set>
<if test="elementType != null">element_type = #{elementType},</if>
<if test="elementKey != null">element_key = #{elementKey},</if>
<if test="elementName != null">element_name = #{elementName},</if>
<if test="config != null">config = #{config},</if>
<if test="xPosition != null">x_position = #{xPosition},</if>
<if test="yPosition != null">y_position = #{yPosition},</if>
<if test="width != null">width = #{width},</if>
<if test="height != null">height = #{height},</if>
<if test="zIndex != null">z_index = #{zIndex},</if>
<if test="rotation != null">rotation = #{rotation},</if>
<if test="opacity != null">opacity = #{opacity},</if>
update_time = NOW()
</set>
WHERE id = #{id} AND deleted = 0
</update>
<!-- 逻辑删除 -->
<update id="deleteById">
UPDATE puzzle_element
SET deleted = 1, deleted_at = NOW(), update_time = NOW()
WHERE id = #{id}
</update>
<!-- 根据模板ID删除所有元素 -->
<update id="deleteByTemplateId">
UPDATE puzzle_element
SET deleted = 1, deleted_at = NOW(), update_time = NOW()
WHERE template_id = #{templateId}
</update>
</mapper>