重构:使用 MyBatis-Flex 迁移应用 ORM
将应用自管表的 JdbcClient 数据访问迁移为实体、Mapper、构造器查询和必要的显式 SQL。 保留 AgentScope 自管表及原有业务语义,并补充事务、查询与数据库集成测试。
This commit is contained in:
50
server/src/main/resources/mapper/ProjectPlanMapper.xml
Normal file
50
server/src/main/resources/mapper/ProjectPlanMapper.xml
Normal file
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="tech.easyflow.manuagent.mapper.ProjectPlanMapper">
|
||||
|
||||
<!--
|
||||
版本号计算与写入保持在同一条 PostgreSQL 语句内;唯一约束继续作为并发冲突的最终保护。
|
||||
-->
|
||||
<select id="insertNextDraft"
|
||||
resultType="tech.easyflow.manuagent.entity.ProjectPlanEntity"
|
||||
affectData="true"
|
||||
flushCache="true">
|
||||
INSERT INTO app.project_plan(id, project_id, plan_version, status, plan_json, created_by)
|
||||
SELECT
|
||||
#{plan.id, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler},
|
||||
#{plan.projectId, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler},
|
||||
COALESCE(MAX(plan_version), 0) + 1,
|
||||
'DRAFT',
|
||||
#{plan.planJson, jdbcType=OTHER, typeHandler=tech.easyflow.manuagent.typehandler.JsonbStringTypeHandler},
|
||||
#{plan.createdBy, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler}
|
||||
FROM app.project_plan
|
||||
WHERE project_id = #{plan.projectId, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler}
|
||||
RETURNING id, project_id, plan_version, status, plan_json, confirmed_at, created_at
|
||||
</select>
|
||||
|
||||
<select id="selectCurrent" resultType="tech.easyflow.manuagent.entity.ProjectPlanEntity">
|
||||
SELECT id, project_id, plan_version, status, plan_json, confirmed_at, created_at
|
||||
FROM app.project_plan
|
||||
WHERE project_id = #{projectId, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler}
|
||||
ORDER BY CASE status WHEN 'CONFIRMED' THEN 0 ELSE 1 END, plan_version DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 条件更新和 RETURNING 在同一语句中完成,避免确认状态检查与写入之间出现竞态。 -->
|
||||
<select id="confirmDraft"
|
||||
resultType="tech.easyflow.manuagent.entity.ProjectPlanEntity"
|
||||
affectData="true"
|
||||
flushCache="true">
|
||||
UPDATE app.project_plan
|
||||
SET status = 'CONFIRMED',
|
||||
plan_json = #{planJson, jdbcType=OTHER, typeHandler=tech.easyflow.manuagent.typehandler.JsonbStringTypeHandler},
|
||||
confirmed_by = #{userId, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler},
|
||||
confirmed_at = CURRENT_TIMESTAMP,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = #{planId, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler}
|
||||
AND project_id = #{projectId, typeHandler=tech.easyflow.manuagent.typehandler.UuidTypeHandler}
|
||||
AND status = 'DRAFT'
|
||||
RETURNING id, project_id, plan_version, status, plan_json, confirmed_at, created_at
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user