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