关于 Java 和 Spring boot 开发体验的一些疑惑,请高手解答

115 天前
 woodytang

之前写前端比较多,最近开始用 Spring boot 开发 api 使用的是 JPA Hibernate orm+jdk21 方案,我不知道为什么感觉国内很多人不喜欢这个 Hibernate ,但是我自己用下来感觉非常好,它最牛逼的是可以按照 Entity 生成数据库结构,非常智能,所以你只要把实体定义好,一切都 ok 了,很容易维护。 有个插件 JPA buddy ,非常好用,可以很好规范代码。 JPA 也可以自定义 sql ,很灵活,除了在转成 json 的时候,会遇到无限循环的问题,其他感觉都很好。 感觉 Spring boot 写后端,除了 JAVA 本身有点啰嗦,还有编译很浪费时间,其他都还蛮不错的。

但是 JPA 通过 Entity 生成数据库的时候,为什么字段顺序和 Entity 是不一样的,是打乱的,,id 的位置会随机出现~~我槽,这就像要喝汤的时候飞进了一个苍蝇,我看网上有很多人说要 hack 一下,官方无解,但这个太离谱了。

然后就是 CommandLineRunner ,我本来的需求是需要给项目 seed 一点初始化数据,这个 CommandLineRunner 只在启动的时候自动执行,不能通过 cli 命令执行,,泥马这个 CommandLineRunner 和 Command 一点关系都没有啊,我内个去,所以 seed 数据只能在 CommandLineRunner 加 if 条件。你去看人家 PHP laravel 都有 artisan cil 工具啊,这个可是天天都要用的,为啥你没有啊~~~你 Tomcat 都可以监听指令,为啥就不做一个监听 命令行指令的。 后来我看了一个 spring boot cli 的插件,结果完全不是这个概念。。

为什么这么成熟的框架连这些基本都做不好啊谁可以告诉我一下

然后我现在在看 liquidbase 和 flyway ,还是 flyway 吧,直接 sql 多优雅,liquidbase 那个语法不能忍受~~

谁能告诉我怎么才能优雅的搞后端呢?

4261 次点击
所在节点    程序员
34 条回复
stickchen
113 天前
@woodytang 查询条件是可选条件你咋写呢,xml 可以写 if 判断的
woodytang
113 天前
@stickchen 我也是刚使用 spring boot 不久
我想大概原理就是用字符串拼接吧,原生的 raw 查询,你可以把 where 那一部分 抽出来 用 if 来拼接;

正规的做法应该是用 JPA Criteria API 吧,虽然我也没怎么用过;

感觉 Hibernate 的 这两种查询方式,刚好和 laravel 的
Query Builder:集合查询
还有 Eloquent ORM:对象查询
对上

但是感觉 Hibernate 设计得更好,它和数据库对应得严丝合缝,只要你懂它的配置;
prosgtsr
113 天前
用 hibernate ,创建了一个对象,保存到数据库。
然后你修改了对象的一个字段,没有调用保存,你会发现数据库更新了。
我觉得这种特性很让人难受,代码不再是一个所见即所得的东西。为什么我没有显式写更新他要替我更新呢?这对我造成了很大的心智负担,所以我不喜欢它。当然你可以说我对它的认知有问题,但即便如此我还是不喜欢它。
chihiro2014
113 天前
@woodytang 这种做法非常耦合,不利于定制化处理
RainCats
113 天前
@woodytang 注解里写 sql ,你是不是想"挨打"
woodytang
113 天前
@prosgtsr 你要 save 啊,就相当于 commit ,否则不会触发数据库持久化的。ORM 的概念就是,对象是对象,也是数据库,你不要分开考虑,只要考虑对象就可以了。
woodytang
113 天前
@RainCats 我是真的不知道写在 @Query 有什么问题啊,如果没条件判断的,一次性的复杂查询,写 @Query 不是很直观吗
NikoXu
112 天前
@f0rb 使用 querydsl 犯法吗 ?
peakCa
112 天前
可以了解一下 jooq ,我们项目中就是使用这个 orm 框架,定义好表结构,自动生成数据库对象,支持 orm 操作也可以写 sql 查询。
prosgtsr
112 天前
@woodytang 在搭配一些框架的时候,框架会自动帮你 commit 的
f0rb
112 天前
@NikoXu 何出此言
RainCats
112 天前
@woodytang 难道你用上有多行文本的 java 了?以及你维护过别人写在注解里的复杂 sql 吗?
只考虑自己爽快不考虑别人迭代维护的痛苦
f0rb
112 天前
@RainCats 楼主是 JDK21 啊
RainCats
111 天前
@f0rb 抱歉了,是我摸鱼不够踏实,看东西不够详细

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

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

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

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

© 2021 V2EX