对于需要判断条件的查询,是在 service 中判断还是直接用动态 SQL?

2022-07-26 12:04:36 +08:00
 zhao1014

比如说有一个表示文章实体类 article ,它有一个文章标题字段 title 。

我需要实现:

if(title != null){
	添加条件“where article.title like #{dto.title}”
}

这个判断是在 service 层做好还是直接在 XML 里面用 <where> 标签? 如果用 <where> 标签算不算把业务流程写到 SQL 里去了?

2040 次点击
所在节点    Java
6 条回复
thinkershare
2022-07-26 12:10:41 +08:00
按照标题检索过滤本质上并不是什么逻辑操作, 也不属于业务流程, 简单来说, 它就是个数据检索, 正常情况应该由 Repository 这种基础设施提供好封装, 对业务层次完全透明. 另外 XML 是什么鬼? Java 的 XML 配置生成 SQL?
另外什么叫将业务写入 SQL? 查询当然最终是需要写入 SQL 的, 不管你怎么做. 将业务写入 SQL 一般说的是再 SQL 层面做一致性逻辑校验, 属于修改范畴.
zhao1014
2022-07-26 12:27:20 +08:00
@thinkershare 因为 mybatis 本身就不是完全封装好的 orm ,需要自己动手写 SQL ,我说的 <where> 是 mybatis 提供的动态 SQL 功能之一,基本上等于拼接 SQL 字符串,区别是 <where> 可以根据条件判断是拼接还是不拼接。
不过我理解你的意思了,谢谢!
LeegoYih
2022-07-26 15:53:40 +08:00
按我的理解,你只能在 xml 里判断 title 是否为 null 。因为 title 为 null 时,直接用 `where article.title like #{dto.title}` 肯定是有问题的。
mybatis 就是用于动态 SQL 的场景,而且,这个判断跟业务流程也没太大关系,只是说 title 字段是 ignorable 的,在注释中写清楚就行。
dcsuibian
2022-07-26 16:04:12 +08:00
Spring Data JPA Specification
yuanshuai1995
2022-07-26 16:47:34 +08:00
这题 XML 里面用 <where> 标签 没啥问题
melodysoyan2
2022-07-28 10:16:37 +08:00
mybatisplus

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/868753

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX