(1)select(2)AllList(3)IdAndUpdateHashAndState By (4)TaskIdAndUpdateGroupAndStateList
动作
返回所有匹配. 如果是分页,为 PageList
返回字段
条件字段
各位对 dao 层的命名,有什么好的方案吗.
![]() | 1 beneo 2023-11-17 12:41:08 +08:00 JPA 逆向来一个 |
![]() | 2 flyqie 2023-11-17 12:42:39 +08:00 via Android ![]() 总感觉有苹果那味了。。 |
3 securityCoding 2023-11-17 12:44:02 +08:00 别用 namequery,手写 sql 吧 |
![]() | 4 ufan0 2023-11-17 12:56:59 +08:00 条件字段没必要的,对于形参列表查看定义的时候一目了然 |
![]() | 5 dnjat OP 要逆出什么来 |
![]() | 8 dnjat OP @securityCoding 是手写,mybatis id 名就是这么长. |
![]() | 10 subframe75361 2023-11-17 13:09:01 +08:00 4 写注释里? |
11 lsry 2023-11-17 13:56:49 +08:00 jpa 是这样的 |
![]() | 12 Martens 2023-11-17 13:58:35 +08:00 ListBy(a,b,c,d,e) |
![]() | 13 LeegoYih 2023-11-17 14:04:06 +08:00 findByParams 动态 SQL |
![]() | 14 wanguorui123 2023-11-17 14:04:28 +08:00 ![]() LoadAll LoadByXXX GetByXX DeleteByXXX UpdateByXXX 入参太多直接忽略 By |
15 ChoateYao 2023-11-17 14:10:55 +08:00 ![]() 按场景命名,不要按参数命名。 比如 会员订单搜索:memberOrderSearch() |
16 titanhw 2023-11-17 14:35:26 +08:00 将( 4 )封装到一个 Condition 类是不是会好一点? |
![]() | 17 KMpAn8Obw1QhPoEP 2023-11-17 14:36:40 +08:00 via Android 我靠太对味了 |
![]() | 18 dif 2023-11-17 14:38:54 +08:00 如果你得查询条件就 2-4 个,那就按名字 findXXByxxAndXXX 如果参数长,那就按照业务来 find{{Service}}Data() |
![]() | 19 duron600 2023-11-17 14:42:37 +08:00 ![]() 要总结一个干了很多事情的方法,得用业务意义上的名词,而不是直接描述底层细节。 吃饭不要写成“哺乳动物通过蛋白质摄取能量” |
![]() | 20 mengdodo 2023-11-17 14:48:46 +08:00 层层下去,结果发现是个 sum 函数 |
21 cbythe434 2023-11-17 14:52:19 +08:00 select1 |
![]() | 22 dnjat OP @subframe75361 是个好想法. 缩短肯定要省去一些信息.转移阵地. |
![]() | 24 dnjat OP |
![]() | 25 dnjat OP |
28 THESDZ 2023-11-17 15:07:40 +08:00 长有问题吗?我觉得表意明确才是最重要的 |
![]() | 29 duron600 /div> 2023-11-17 15:10:15 +08:00 那就留着这个方法,在这个方法之上再封装一层,不同的状态用不同的名字。 比如: ``` def 吃饭 selectAllListIdAndUpdateHashAndStateByTaskIdAndUpdateGroupAndStateList(状态=1) end def 睡觉 selectAllListIdAndUpdateHashAndStateByTaskIdAndUpdateGroupAndStateList(状态=2) end def 打豆豆 selectAllListIdAndUpdateHashAndStateByTaskIdAndUpdateGroupAndStateList(状态=3) end ``` 吃饭、睡觉、打豆豆很容易就能看明白了,这样就不用再纠结 `selectAllListIdAndUpdateHashAndStateByTaskIdAndUpdateGroupAndStateList` 这个方法的名字,不是问题。 |
30 walle1530 2023-11-17 15:14:32 +08:00 selectBy 吧 |
![]() | 31 looo 2023-11-17 15:28:50 +08:00 ![]() 我觉得没必要写那么长,建议:findXXXByCondition() 1. 超过 3 个参数我都是 findXXXByCondition() 2. 都到 mapper.xml 了,看这个代码的人肯定会去看你的条件是什么而不是看你的方法名称。 3. 还有 selectAllList 也没必要,因为你的返回类型就知道你是单个还是列表了。 |
![]() | 32 Akiya 2023-11-17 16:40:40 +08:00 用返回类型和参数类型就可以取代函数名的大部分内容吧 List<IdAndUpdateHashAndState> select(int taskId, UpdateGroup updateGroup, List<State> states) |
![]() | 33 luzemin 2023-11-17 16:41:32 +08:00 ![]() 不要动,这才是正宗的 Java |
![]() | 34 Aloento 2023-11-17 16:45:43 +08:00 对味了! .NET 路过表示震惊 |
35 28Sv0ngQfIE7Yloe 2023-11-17 16:49:40 +08:00 JPA 味太浓了 |
36 参数里有的字段没必要写到方法名上,就跟 user 表的主键 id 没必要写 user_id 而是直接用 id 一样 getUserByXX 这种也是,想知道 by 什么看参数定义,想知道拿到的数据看返回定义,不用全写名字上 |
37 Cruzz 2023-11-17 17:21:24 +08:00 如果是 jpa 可以理解,mybatis 图啥呢? byCondition 参数用实体不更清楚么。 |
38 Cruzz 2023-11-17 17:22:57 +08:00 或者业务强关联,直接写业务名称写毛的具体查的啥,反正别人也不能用。你写成这样目的是为了别人用的时候知道这个。但是没人用,你写他干嘛呢。 @Richared |
39 hancai 2023-11-17 17:25:59 +08:00 函数名写 sql |
![]() | 40 xiaochong 2023-11-17 17:29:01 +08:00 看成如何 缩短 diao |
41 lovelylain 2023-11-17 18:10:17 +08:00 via Android c++重载函数统一命名 query |
![]() | 42 aragakiyuii 2023-11-17 18:45:06 +08:00 via iPhone jpa 有 specification mybatis plus 有 querywrapper |
43 lanlanye 2023-11-17 19:10:53 +08:00 不用 Java ,几个不知道是否可行的建议: 1. 用 QueryObject 包装条件,避免筛选条件直接放到方法名里。 2. 用 Statement Builder 之类的东西拆分查询逻辑,一次调用只添加一种条件。 |
img src="https://cdn.v2ex.com/avatar/6bf8/3d7c/125600_normal.png?m=1755205643" class="avatar" border="0" align="default" alt="netabare" data-uid="125600" /> | 44 netabare 2023-11-17 19:35:38 +08:00 via iPhone ![]() 能不能拆成函数组合?另外 dao 是靠近 sql 层面还是靠近业务层的,如果靠近 sql 层就是 crud 吧,靠近业务层的话…… 我一直喜欢的一句话:复杂度只能搬移,不能消除。 而且函数组合的话感觉也有问题,比如会不会遇到 n+1 呢。 |
![]() | 45 LightofHeven 2023-11-17 21:32:13 +08:00 用 @Select 写个 sql 吧 dao 名字简单的 selectByCondition(queryCondition) |
46 Ericcccccccc 2023-11-18 00:37:29 +08:00 也不易读啊 |
47 uxstone 2023-11-18 08:38:32 +08:00 不要太相信类名,后期业务需求变动,往往会偷懒不改动类名,导致类名和实际功能不符。 |
![]() | 48 B1ankCat 2023-11-18 09:27:12 +08:00 使用这世界上最完美的查表法,名字就叫 Ili1lii11llii11 ,然后每次开发在外面文档查表获取真实名称和功能 |
![]() | 50 dnjat OP |
![]() | 51 dnjat OP |
![]() | 52 dnjat OP |
![]() | 57 nexo 2023-11-18 12:42:25 +08:00 一个函数干这么多事情 也不是什么好函数吧 |
58 Ericcccccccc 2023-11-18 13:41:56 +08:00 @dnjat 感觉是一种社区形成的习惯(比如 spring 源码里很多很长的, 大家会互相模仿) 对比起来 go 里面很多源码就很简单(包括官方也提倡简单), 那自然大家写出来的代码就会简单 但这并不一定是好事, go 里面很多缩写莫名其妙还不如写全称 |
![]() | 59 siweipancc 2023-11-18 16:06:02 +08:00 最整洁的代码就是自解释的(doge 你可以 loadAll 然后内存过滤, 服务器的 CPU 也比数据库的高效不是(doge |