大家喜欢用 ORM 还是直接写 SQL

2023-12-29 12:50:20 +08:00
 gitrebase

OP 主要用的 Java 和 Go ,但是感觉这俩主流语言的 ORM 框架( JPA 、GORM )都不如 C#、Python 的 ORM 好用( JOOQ 、ent 、XORM 感觉国内用的还是有点少),而 SQL / SQL builder ( JdbcTemplate 、sqlx )在动态条件查询时需要在代码里拼 SQL 字符串也有点🥚疼

其实就是最近在玩 Spring 新出的 JdbcClient ( JdbcTemplate 的封装版),感觉在 Java 有多行字符串后,在 Java 代码里写 SQL 完全不是什么问题,而且也不用使用难用的 XML 去定义 resultMap (直接在 Java 里定义 record 或者 class 然后用构造器就可以了)

public record User(Long id, String name, Integer sex) {
}

@GetMapping("/users/in")
public Iterable<User> listInIds(@RequestParam List<Integer> ids) {
    return jdbcClient.sql("""
            SELECT *
            FROM `user`
            WHERE `id` IN (:ids)
            """)
            .param("ids", ids)
            .query(User.class)
            .list();
}

但是在碰到动态条件的 where 语句的时候,在 Java 代码里手搓 SQL 看着也很让人头大……这时候 MyBatis 提供的 dynamic SQL 就很好用了

但真的不喜欢 XML……

MyBatis-Plus 也了解过,但说不上来为什么,总是感觉不太喜欢这个库……

23384 次点击
所在节点    程序员
155 条回复
gitrebase
2023-12-29 15:40:21 +08:00
@yule111222 羡慕 Kotlin ,只能私下玩玩 Kotlin ;我就是因为 XML 才很不想用 MyBatis……太丑陋了,但在 dynamic where conditions 上 MyBatis 又挺好用的……(与 JdbcTemplate 相比)
IIInsomnia
2023-12-29 15:54:24 +08:00
@musi ent
label
2023-12-29 16:00:32 +08:00
MyBatis-Plus 的函数式查询条件, 非常好用, 字段名没有硬编码
jadeborner
2023-12-29 16:03:50 +08:00
肯定 ORM 啊,我们这程序也不止支持一种数据库
waltcow
2023-12-29 16:05:10 +08:00
go 下用着 Ent, 写起来很 fluent
devilweime
2023-12-29 16:10:54 +08:00
java 开发,混用,单表 ORM ;联表 SQL
Uplay
2023-12-29 16:17:51 +08:00
@sunmoon1983 #47 逻辑能力太强了
jadeborner
2023-12-29 16:21:34 +08:00
@monkeyWie 大脑一根筋吗?用了 ORM 就不能手写 sql 了?什么场景用什么方法。
shellcodecow
2023-12-29 16:22:17 +08:00
go 用 gorm
monkeyWie
2023-12-29 16:25:28 +08:00
@jadeborner #68 有没有可能是有人只用 ORM 不手写 sql 呢,反正不是我
skywalkerfc
2023-12-29 16:25:50 +08:00
写过 PHP 、Go 、Python:
PHP 的大框架 orm 最好用,用起来很丝滑。
GO 用过 xorm 和 gorm ,现在简单的用 gorm ,复杂的写原生 sql 。
Python 现在 SQLAlchemy ,复杂的基本都能 hold 住。
stevenshuang
2023-12-29 16:30:29 +08:00
@sunmoon1983 这条 sql 是不是直接保住了饭碗,没人敢动🐮
aLazarus
2023-12-29 16:41:09 +08:00
公司的项目需要适配至少 7 个数据库,尽管各家数据库都支持标准 sql 语句,但业务逻辑没有那么简单,所以还是会使用 orm
miaotaizi
2023-12-29 16:42:44 +08:00
能用 ORM 的地方 别用 SQL 就行了

ORM 更多的还是为了表达业务逻辑, 毕竟编辑器里面搜变量的 赋值/读取 还是很方便的

拼出来的 SQL 我觉得是没法维护的
lerosua
2023-12-29 16:46:30 +08:00
手写 SQL ,水平不行,还可能被注入~ 能 ORM 就 ORM
Govda
2023-12-29 16:51:29 +08:00
ORM 实现不了、性能过低才考虑 SQL
gaocc
2023-12-29 16:54:09 +08:00
前端人员用 nestjs 写后端,用 typeorm ,复杂 sql 用 sql
dif
2023-12-29 16:56:13 +08:00
看业务,orm 优先。
chenqh
2023-12-29 16:57:16 +08:00
@monkeyWie 关键是动态查询 orm 比较好做吧.像管理后台,一个用户列表或者订单列表,框框就是高达 10 个动态查询,sql
完全想不出来应该怎么弄. 至于 sql,我也只会简单 sql 啊.orm 最主要的问题可能就是两张表,都有字段要查的话,我不知道怎么做,因为我表设计的时候,基本只查一张表.很多时候甚至会把两张表合成一张表.虽然最佳实践肯定不是这样的,但是
做起来简单啊.最关键是并发不大
magicZ
2023-12-29 17:04:56 +08:00
我们查询的报表 sql 一堆函数和嵌套,orm 不太适合这种场合

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

https://ex.noerr.eu.org/t/1004383

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

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

© 2021 V2EX