高人指点,Mybaties 如何根据条件执行insert或update

安迪 2018-02-12 11:02:45
我写了如下的Mapper的xml文件:
<insert  id="updateCustomerProperty" parameterType="list" statementType="PREPARED">
<foreach collection="primeCustomerInfoParamList" item="primeCustomerInfoParam" index="index" open="" close="" separator=",">
<if test = "primeCustomerInfoParam.startDate != null and primeCustomerInfoParam.startDate != ''">
UPDATE prime_customer
SET
start_date = #{primeCustomerInfoParam.startDateNew},
end_date = #{primeCustomerInfoParam.endDate},
prime_id = #{primeCustomerInfoParam.primeId},
update_user = #{primeCustomerInfoParam.updateUser},
update_date = #{primeCustomerInfoParam.updateDate}
WHERE buten_code = #{primeCustomerInfoParam.butenCode}
AND account_number = #{primeCustomerInfoParam.accountNumber}
AND start_date = #{primeCustomerInfoParam.startDate}
</if>
<if test = "primeCustomerInfoParam.startDate == null or primeCustomerInfoParam.startDate == ''">
INSERT INTO prime_customer
(buten_code,
account_number,
start_date,
mkdb_id,
end_date,
prime_id,
et10_status,
prime_service_status,
create_user,
create_date,
update_user,
update_date)
VALUES(
#{primeCustomerInfoParam.butenCode},
#{primeCustomerInfoParam.accountNumber},
#{primeCustomerInfoParam.startDateNew},
#{primeCustomerInfoParam.mkdbId},
#{primeCustomerInfoParam.endDate},
#{primeCustomerInfoParam.primeId},
'0',
'0',
#{primeCustomerInfoParam.createUser},
#{primeCustomerInfoParam.createDate},
#{primeCustomerInfoParam.updateUser},
#{primeCustomerInfoParam.updateDate}
)
</if>
</foreach>
</insert >


每次生成的SQL文都是insert和update都有。这样写不可以吗?请高人指点一下。
...全文
523 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
安迪 2018-02-12
  • 打赏
  • 举报
回复
我只想问一下 这种逻辑处理mybaties能不能这样实现 或者有别的写法?
无聊的上午 2018-02-12
  • 打赏
  • 举报
回复
你这个逻辑放在这干什么 ,你没理解到业务层的作用啊 ,这里是持久层,或者叫数据层,只负责获取数据,这些逻辑丢到业务层去做
安迪 2018-02-12
  • 打赏
  • 举报
回复
感谢各位的回答。我修改了一下那个分割符 真的好用啊。哈哈谢谢
无聊的上午 2018-02-12
  • 打赏
  • 举报
回复
或者有个方法,你非要在持久层做的话,用mysql的函数做,理论上是可以的,不过我没写过,一般逻辑上的东西还是交给java做比较好,而且业务层本来就是规定出来处理业务的,不用还不如不要
无聊的上午 2018-02-12
  • 打赏
  • 举报
回复
引用 5 楼 andymu077 的回复:
貌似不行。虽然我写了的是insert标签。但依然可以走update 但是insert却不再走了。另外里边有个错误。分隔符应该是;我写成了, 这个一定是会连成一句sql也是不对的。
跟你说了 你这些东西明明该放到业务层,非要放到持久层,这不是找事吗
安迪 2018-02-12
  • 打赏
  • 举报
回复
貌似不行。虽然我写了的是insert标签。但依然可以走update 但是insert却不再走了。另外里边有个错误。分隔符应该是;我写成了, 这个一定是会连成一句sql也是不对的。
无聊的上午 2018-02-12
  • 打赏
  • 举报
回复
引用 3 楼 shayongjie 的回复:
[quote=引用 2 楼 安迪的回复:]我只想问一下 这种逻辑处理mybaties能不能这样实现 或者有别的写法?
看上去没毛病,应该是可以的。[/quote] 同学你开玩笑吧,那mybatis预设<insert>标签和<update>标签拿来干嘛呢 ? 要不要去读读源码
喜氏天狼 2018-02-12
  • 打赏
  • 举报
回复
引用 2 楼 安迪的回复:
我只想问一下 这种逻辑处理mybaties能不能这样实现 或者有别的写法?
看上去没毛病,应该是可以的。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧