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

41 天前
 ZGame

举个 c#的例子

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

这样子就可以了。

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

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

我做过一个 python 项目,便遇到了类似的问题,因为没有 mybatis ,但 SQL 的拼装又非常复杂,所以最后实现的代码看起来就是依托答辩。但反观用 java mybatis 实现起来 相对来说,清晰了一点。 就我个人而言,一旦遇到数据分析之类的项目,首选肯定时 mybatis, cms 之类的会用 jpa 。 当然根据实际情况混用一下也不是不可以。反正最后都是一座屎山。
lucasj
41 天前
"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
41 天前
1. java14 之前,多行文本支持度不行,一堆“”+“”
2. 字符串模版木有。。。
ZZ74
41 天前
java 也有 string format 的.....
主要原因大家都说了
lisongeee
41 天前
可能他们还在用已经发布 10 年的 java8 ,另外我每天都能看到学习 java8 新语法 API 的文章

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

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

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

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

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

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

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

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

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

© 2021 V2EX