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