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

93 天前
 ZGame

举个 c#的例子

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

这样子就可以了。

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

3297 次点击
所在节点    Java
38 条回复
james122333
93 天前
mybatis 也很彆扭 主要的确是 java 字串操作功能太差 变量插入以及 here document 都没有 连 shell 字串处理功能都可以完爆 java 当然都不只是 java 如此 go 也差不多顶多好点 其它更多语言都是一个样
php 确实写字串也是很快的 所以草创很好用
ThinkCat
93 天前
要考虑维护性,mybatis 有一个很好的地方是,展现的是 sql ,并且统一在 xml 中的话,后期进行优化或者查阅之类的,直接在 xml 中统一去找。
james122333
93 天前
@ThinkCat

xml 就是最丑的格式 绑定输出对象还要另外写
不能一劳永逸的解决这问题
cheng6563
93 天前
SQL 本身也是个特殊场景,不能直接往字符串里拼参数而是要拼占位符。
cheng6563
93 天前
而且唯一能拯救的 Java21 的字符串模板也砍掉了要回炉重造
WDATM33
93 天前
统计报表的 sql 不用 xml 直接写 sql 太蛋疼了,动不动就关联十几张表,巨多的字段。 要是用 mybatis-plus 这种一个一个单表查出来在 service 层拼接数据,那维护和调试起来真是血压拉满,有些功能直接用 sql 的功能函数实现方便的多得多。反正最终目的都是为了完成业务需求,没必要用折磨自己的方式来做,怎么快 怎么简单怎么来。xml 还有个好处就是 线上环境 sql 有问题可以直接去线上环境修改文件不用编译 这点挺方便的
Nosub
93 天前
@chendy 这位说的在理,搞 jpa 那一套要对面向对象建模有比较深刻的理解,本质上是先有表再有对象,还是先有对象再有表的问题,难度在于对象建模和关系建模不匹配,jpa 要把 hibernate 那一套搞清楚,真的有难度。
totoro52
93 天前
扪心自问,拼接的方式最后的结果是什么,就是变成一坨根本没办法维护的、看一次要几分钟甚至几十分钟才能完全看懂的 SQL ,像牛皮癣一样贴在那里, 里面还藏了各种变量拼接。
potatowish
93 天前
有 mybatisplus 是不是没必要再用 jpa 了,单表上代码,多表 xml
yidinghe
93 天前
不是,它火是因为动态 SQL 拼接的方式在当时是独一份。至于多行字符串,mybatis 的 SQL 一般是写在 XML 配置文件里面的,跟 Java 多行字符串表达式没关系。
ChoateYao
93 天前
@potatowish #29 多表可以用 MyBatis Plus Join 。

在复杂的点不想写 XML 或者在 Mapper 定义的话,可以使用 MyBatis Plus 的 SqlRunner 来处理
iminto
92 天前
年轻人还是太年轻,见过和写过的 SQL 太幼稚,才会质疑 mybatis 的能力
james122333
92 天前
@cheng6563

然而占位符也是动态的 占位符可以是变量
但其实可以避免注入 有避免的情况直接插入变量也无不可
jaylee4869
92 天前
Java 代码:
var str = """
i
am
multiline
""";
yechentide
92 天前
比起 MyBatis ,我更喜欢用 Doma2
cheng6563
92 天前
@james122333 主要是字符串模板,都填占位符了,字符串模板也没啥意义了,当涉及到动态添加条件就会很繁琐。

比如 Mybatis XML 里面写一些查询方法 SQL 经常会这样操作:

select columns from table where 1=1
<if test="status0">
and status0=#{status0}
</if>
<if test="status1">
and status1=#{status1}
</if>
<if test="status2">
and status2=#{status2}
</if>

这种逻辑用编程来处理就是很烦,要同时拼接 SQL 占位符和填充参数.
james122333
92 天前
@cheng6563

当然有意义 占位符并不是万能的 而 mybatis 的填充字串还不如直接写代码 填充字串还包含填充占位符 动态 query 语句还是非常必要的 然而 java 下写法就会非常糟糕
lingalonely
90 天前
不是,xml 是麻烦,但是强约束,强约束意味着开发之后少麻烦

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

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

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

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

© 2021 V2EX