俺用 mybatis-plus 做业务的时候, 经常碰到需要用 apply 自定义 sql 的场景, 像这样
APPROVE_TODO_STAFF
是数据库的字段名字, 对应 java entity 里的一个字段 approveTodoStaff
, 有时候用 IDE 对 approveTodoStaff
重构, APPROVE_TODO_STAFF
不会自动修改,就漏了.
我的问题是, 有办法消除 APPROVE_TODO_STAFF
吗?
![]() | 1 montaro2017 2024-08-09 09:02:40 +08:00 ![]() 可以通过 lambda 表达式获取字段名,然后驼峰转下划线获取 ```java LambdaMeta meta = LambdaUtils.extract(Project::getResearchType); String fieldName = PropertyNamer.methodToProperty(meta.getImplMethodName()); fieldName = StrUtil.toUnderlineCase(fieldName); ``` |
![]() | 2 montaro2017 2024-08-09 09:09:13 +08:00 @montaro2017 #1 驼峰转下划线可以直接使用 mp 内置工具类 fieldName = StringUtils.camelToUnderline(fieldName); |
![]() | 3 SmartTom 2024-08-09 09:15:18 +08:00 ![]() 歪个楼,这样写有可读性可言吗? |
![]() | 4 vishun 2024-08-09 09:22:19 +08:00 ![]() @SmartTom #3 曾经我也认为这样用 ORM 是更现代的方式,但是后来慢慢觉得这样真的是没有 xml 中写的直观和有可读性。 |
5 hapeman 2024-08-09 09:23:08 +08:00 反射? |
6 hyqCrystal 2024-08-09 09:23:15 +08:00 我觉得简单的用 mybatis plus 无可厚非 复杂的写自定义 sql 可读性 维护性高点 |
8 ma836323493 2024-08-09 09:23:41 +08:00 这种这么长的查询,建议你直接写 sql , 不要用 mybatis plus , 我都是简单查询和更新才用 plus |
![]() | 9 BiChengfei 2024-08-09 09:25:15 +08:00 insert updteById 小表查询直接用 .selectList(Wrappers.emptyWrapper()).stream().filter()..... 内存查找 复杂查询用 xml ,千万别用 like()、in() 这些函数 |
10 wuvvu 2024-08-09 09:30:08 +08:00 问个题外话,这个显示缩进的是怎么实现的,是插件吗 |
![]() | 11 flowerains 2024-08-09 09:30:32 +08:00 plus 的重点是简化你的单表查询负担,用 querywrapper 构造一些简单应用增删改查 像你写的这种就应该用 mybatis 自带的,直接在 xml 中写 SQL |
12 shuqin2333 2024-08-09 09:32:36 +08:00 ![]() 写个自定义的方法支持下就好了 ColumnUtil.getColumnName(Approve::getApproveTodoStaff) 感觉还是直接写 sql 更直观,好维护点 |
![]() | 13 laikicka 2024-08-09 09:37:29 +08:00 多表的时候还是喜欢写 sql. |
![]() | 14 angenin 2024-08-09 09:49:22 +08:00 简单的查询用 plus ,复杂的还是写 sql 吧 |
![]() | 15 xiaoyureed OP @SmartTom 哈哈可读性好不好不确定, 反正写起来挺快的; |
![]() | 16 reavid 2024-08-09 09:52:53 +08:00 折腾来折腾去,最后还是只用 mybatis 和生成工具。 |
![]() | 17 xiaoyureed OP ![]() |
![]() | 18 xiaoyureed OP @hyqCrystal 只是看起来查询条件很多, 其实都是简单的条件查询, 只涉及到单个表 |
19 ZZ74 2024-08-09 10:12:29 +08:00 这种东西写成 java 代码 真的..... 不如直接 sql |
![]() | 20 pangdundun996 2024-08-09 10:23:06 +08:00 @xiaoyureed #15 xml 写 sql 不是更快吗 |
21 fpure 2024-08-09 10:30:18 +08:00 真的,很不建议使用这种 mp 的类 queryDSL 的方式进行查询,原因有三:一、污染 service 层;二、毫无可读性;三、代码被 mp 侵入,以后想摘掉 mp 也难弄了 |
22 iszhouyu 2024-08-09 10:41:17 +08:00 为啥我用的 mp 没见过.nested()这方法 |
23 marking0614 2024-08-09 10:41:28 +08:00 复杂的 SQL 直接 xml 啊,这不给自己找罪受 |
24 ShuangChenyue 2024-08-09 11:02:05 +08:00 这不算复杂查询把 都是 where 条件判断 感觉写 xml 不如这样写 |
![]() | 25 Iakihsoug 2024-08-09 11:15:06 +08:00 生成 entity 时加上 enableColumnConstant()开启生成字段常量,字符串用常量代替 GpReportEntity.APPROVE_TODO_STAFF |
![]() | 26 Asan 2024-08-09 11:48:48 +08:00 能不用 mybatis plus 就不用吧 |
![]() | 27 635925926 2024-08-09 13:23:36 +08:00 @pangdundun996 用 orm 不用考虑逻辑删除。手写 sql 每个 sql 都要加上逻辑删除的条件 |
![]() | 28 zoharSoul 2024-08-09 13:24:06 +08:00 这种建议在 xml 里写 sql |
![]() | 29 joker8ren 2024-08-09 13:38:49 +08:00 看到那么长一串 就没有阅读的欲望了 |
![]() | 30 xiaoyureed OP @pangdundun996 总觉得 xml 更麻烦, 可能心理作用 |
![]() | 31 SmartTom 2024-08-09 14:56:26 +08:00 @xiaoyureed #30 没那么麻烦,谨慎一点我都是在 nav 上跑一边手写的 sql ,没啥问题直接扔到 xml 中。 |
![]() | 32 sagaxu 2024-08-09 15:05:25 +08:00 @xiaoyureed XML 是更麻烦,但是在 Java 良好支持多行字符串模板前,也只能这样了。不过也快了,2030 年之前应该能用上。 |
![]() | 33 vansiit 2024-08-09 15:20:53 +08:00 我一直在推荐用 xml 写 sql ,这个问题简直是一个活生生的例子。而且如果是多人团队,我是旗帜鲜明发反对引入 mybatis plus 和 jpa ,原因就是控制不了有人这么玩 |
![]() | 35 caixiaomao 2024-08-09 15:53:20 +08:00 我去,看都不想看,还是用 xml 写吧 |
![]() | 36 Mandelo 2024-08-09 16:05:58 +08:00 没法考出来测试和优化吧 |
![]() | 37 sagaxu 2024-08-09 16:57:38 +08:00 @SmartTom String Templates Java 21 才有预览版,Java 22 是 Second Preview ,到 Java 23 时放弃了。 https://mail.openjdk.org/pipermail/amber-spec-experts/2024-April/004106.html |
![]() | 38 burymme11 2024-08-09 18:03:36 +08:00 Mybatis plus 只用来做单表的简单 CURD ,复杂 SQL 一律走 XML 。 别说多人团队了,哪怕就自己写的,两个月后再回头看看,都想扇自己嘴巴。 |
39 winlans 2024-08-09 18:09:25 +08:00 ![]() lombok 有个注解,@FieldNameConstants ,可以生成属性的字符串 |
40 Surechun 2024-08-09 19:42:30 +08:00 简单直接写,复杂的用 sql ,方便后期调优。 |
41 luozic 2024-08-10 19:26:12 +08:00 复杂的,请上 xml |
42 Tenlearn 2024-08-11 00:39:31 +08:00 简单的 crud 和几个条件的查询用代码实现,像你这种,直接写 xml 更直观 |
![]() | 43 lingalonely 2024-08-11 23:34:43 +08:00 直接写 SQL 吧 |
![]() | 44 diagnostics 2024-08-14 16:39:46 +08:00 Mybatis Plus 作者那个态度,我是不敢用,出问题不好沟通来修复 |
45 fkdog 2024-09-14 11:15:32 +08:00 mybatisplus 是针对国产 crud 宝宝体质特别开发的猪食。 |