好奇 Java mybatis 能火是不是因为 Java 编译器对多行文本的扫码解析不友好?

2024-08-08 15:20:30 +08:00
 ZGame

举个 c#的例子

var table="";
string Sql =String.Fomat(@"
select 
* from
{0}
",table)

这样子就可以了。

而在 java 里写 Sql 模板 sting Sql= "" + "" + ,或 append() ,非常令人难受。。

4020 次点击
所在节点    Java
38 条回复
ccpp132
2024-08-08 15:23:29 +08:00
也不太行吧,比如这句你得考虑你的 table 有没有特殊字符,放到 sql 里要不要转义
miaotaizi
2024-08-08 15:24:25 +08:00
写到 XML 里面不就好了
ccpp132
2024-08-08 15:24:26 +08:00
sql 注入就是早年大家自己拼字符串留下来的经典漏洞
dif
2024-08-08 15:28:01 +08:00
也不是吧,mybatis 能火主要是 SQL 能够直观地写出来,便于所谓的调优,另外就是也确实有些业务时 hibernate 无法实现的,必须通过编写 SQL 去解决。

我做过一个 python 项目,便遇到了类似的问题,因为没有 mybatis ,但 SQL 的拼装又非常复杂,所以最后实现的代码看起来就是依托答辩。但反观用 java mybatis 实现起来 相对来说,清晰了一点。 就我个人而言,一旦遇到数据分析之类的项目,首选肯定时 mybatis, cms 之类的会用 jpa 。 当然根据实际情况混用一下也不是不可以。反正最后都是一座屎山。
lucasj
2024-08-08 15:28:05 +08:00
"One of the most powerful features of MyBatis has always been its Dynamic SQL capabilities."
https://mybatis.org/mybatis-3/dynamic-sql.html

if, choose, when, otherwise, trim, where, set
dbpe
2024-08-08 15:28:14 +08:00
1. java14 之前,多行文本支持度不行,一堆“”+“”
2. 字符串模版木有。。。
ZZ74
2024-08-08 15:29:37 +08:00
java 也有 string format 的.....
主要原因大家都说了
lisongeee
2024-08-08 15:30:48 +08:00
可能他们还在用已经发布 10 年的 java8 ,另外我每天都能看到学习 java8 新语法 API 的文章

最新的 java 早就支持多行文本语法了

https://docs.oracle.com/en/java/javase/22/text-blocks/index.html
Goooooos
2024-08-08 15:33:45 +08:00
@lisongeee mybatis 在 java8 之前就火了
2024
2024-08-08 15:34:19 +08:00
现在不都是 orm 吗,为什么还要拼接? 根据 ide 点着下去不就好了。
user, has := admin2.NewOrmAdminUsers().WhereUsername(req.Username).First()
sagaxu
2024-08-08 15:39:07 +08:00
是的,mybatis 存活的两个前提:

1. 缺乏良好的多行文本模板支持

2. 领导老爱提 JPA 不太方便实现的需求
ZGame
2024-08-08 15:39:25 +08:00
@miaotaizi 我感觉 xml 在代码阅读的时候有点不友好 ,强行将 Sql 内容和代码结果集割裂开。
@dif 是的 报表类的需求我感觉 Sql 原生更好。
@ccpp132 注入题外话了 ,可以通过 限定参数避免。
Peachl
2024-08-08 16:07:56 +08:00
拼 sql 很容易有注入 安全问题中 sql 注入的危害太大了 就算限定参数还是有很多绕过手段 而且查询 sql 和代码逻辑分开可以让逻辑清晰很多
RandomJoke
2024-08-08 16:12:50 +08:00
最后不就是.java 和.xml 的区别,你把拼接,验证的过程剥离,不就 daoimpl ,再把验证的过程剥离,不就变成了里面只有类似 xml 里面的语句了。
dif
2024-08-08 16:13:25 +08:00
@2024 CMS 没问题,数据报表不行的,很多开窗函数,特殊业务是不支持的。上百行的 SQL ,还是 mybatis 支持度好一点,语法只要能匹配你连接的驱动( hive 、impala 等)就行。
ma836323493
2024-08-08 16:17:05 +08:00
我现在用 mybatis plus , 只有复杂查询我才写 sql
chendy
2024-08-08 16:18:58 +08:00
缺少建模能力或者没有建模需求
倒腾 jpa entity 那点功夫,mybatis 一把梭早就完事了

另外,你这起码还有个 mybatis ,前几天不是还有个帖子问能不能直接 Map
JoJoWuBeHumble
2024-08-08 16:36:21 +08:00
国内需求千奇百怪,数据库设计水平设计又不够。
用 JPA 很容易就坐牢,不如 mybatis 缝缝补补接着用
txzh007
2024-08-08 16:58:02 +08:00
sql 注入啊,单纯的字符串拼接的 sql 肯定是不能用的
cstj0505
2024-08-08 17:13:52 +08:00
orm 框架难道不是取代 jdbc 原生的一坨代码出现的嘛,和支不支持多行文本有啥关系

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

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

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

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

© 2021 V2EX