V2EX diagnostics
diagnostics

diagnostics

  apache / software engineer
V2EX 第 616362 号会员,加入于 2023-02-28 15:00:25 +08:00
diagnostics提问技术话题好玩a href="/member/diagnostics/jobs" class="cell_tab">工作信息交易信息城市相关
618 购买了绿联 4800,请教一些姿势
NAS    diagnostics    117 天前    最后回复来自 ygtq
7
出双 11 当天开通的 88vip 权益会员
二手交易    diagnostics    329 天前    最后回复来自 chinemds
4
有多少人还在用 Maven 构建项目?
Java    diagnostics    2024-07-11 09:27:51 AM    最后回复来自 ychost
127
出 desk mini x300+5600g+32G=1600
二手交易    diagnostics    2024-04-01 15:18:05 PM    最后回复来自 popguy
15
微信真牛逼,视频加了 AI 识别
微信    diagnostics    2024-02-05 00:55:19 AM    最后回复来自 lesismal
20
安卓/一加 ACE2 半年体验
Android    diagnostics    2024-01-12 10:43:17 AM    最后回复来自 wy315700
37
深圳出 91 健康度 iPhone 13 蓝色 128g
二手交易    diagnostics    2023-12-01 14:59:56 PM    最后回复来自 ArleneCheung
3
Air 不上 M3 是因为散热不够了吗?
Apple    diagnostics    2023-11-02 09:26:50 AM    最后回复来自 Binlabs
27
diagnostics 最近回复了
飞机打多了就容易射,第二次就脱敏了,做多了就脱敏了,不熬夜也会延时点
知道有个项目叫 Spring Data REST 么?
111 天前
回复了 carytseng 创建的主题 求职 7 年 Java 后端经验,简历求意见
履历不太好...毕业后没和同班同级的同学交流下吗?
211 天前
回复了 AndrewHenry 创建的主题 编程 为什么中文编程没有发展下去呢
打字效率不如英文啊,还要输入拼音啥的。

字节大小大于英文啊,也没效率

实现上不复杂,那你猜猜为啥没人做
243 天前
回复了 c2ch 创建的主题 电影 你们都几刷哪吒 2?这票房太猛了。。
哪吒 1 印象就不好,和华为一样都是卖国产情怀,但是华为在 V 站被骂,哪吒不会,看不懂。
学习不如实践快,学习能力不够,那就时间上补齐
你的头为什么尖尖的?
278 天前
回复了 zsmile 创建的主题 Java 国内的 Java 体系真的很落后吗?
数据库访问一般就是两个门派:

- JPA 、Hibernate 等 ORM:这类就是解决大部分 CRUD 需求的,简单的查询,涉及到多表,复杂查询就会性能低下,上手门槛也更高
- JDBC Temple 、MyBatis 、JOOQ 这类 SQL Helper:这类就是解决复杂查询的,因为本来就是 SQL ,想咋写就咋写


因为本来就是 SQL ,因此先说说第二类的发展历程,一开始大家写 JDBC 还好,写多了发现模板代码太多了,主要是两个层面,一个是连接这边的代码,一个是 ResultSet 做数据转换的代码,所以诞生了类似于 Apache Commons DbUtils 这种工具来简化,在 Spring 环境中则是 Spring JdbcTemplate 。

接下来事情就会朝着两极发展,还是先从 SQL 说起

Commons DbUtils 、JdbcTemplate 这类框架只简化了连接和响应映射,在动态 SQL 的支持比较少,因此诞生了 MyBatis 也就是 JdbcTemplate 高级版,通过模板引擎解决动态 SQL ,并且支持预定义的一些 SQL

当然 Mybatis 被人诟病的 XML ,还有动态能力在复杂场景还是有限的,例如写一个递归形式的动态条件(再举个例子,DAO 方法只穿入一个 filter ,这个 filter 可以是普通的 KeyValue 过滤,也可以多个 KV 组成的 AnyOf 和 AllOf 多重过滤,后两者对应的就是 id in (select id from t where f1 and/or f2 and/or f3...),这里面还可以动态拼接,我认为这种在 Java 里要用多态和类型匹配去做,MyBatis 对这个支持就不太行)

讲完了问题,就引出解决 MyBatis 这个陈旧框架的升级版 JOOQ ,这里用 TypeSafe 的 API 来编写复杂 SQL ,一来不需要频繁和 SQL 直接交互( Mybatis 也有一些这种痛点),也能避免出错;二来动态能力增强了,我能在 Java 代码而不是 XML 了编写内容。

到这里就是 SQL 帮助类这一方向发展的极端了(如果有更好的框架,可以提出),这里没有提到其他帖子的注入 MyBatis Plus (Join ),tk mybatis 等增强,而是因为他们要做的事情和 JPA 类似。
接下来谈谈 JPA ,JPA 的诞生我认为是解决 Commons DbUtils 、JdbcTemplate 这类框架中,对于一个表应该有的大部分普通操作 CRUD 没有预定义好一些模板代码,导致用户又需要频繁去写 findById ,findAll ,findCountByXXX 等操作(如果直接用 MyBatis ,也有这个问题,因此没有一个方案是一劳永逸的),简单来说我认为 JPA 就是用面向对象的方式编写简单查询,然后无感生成对应的模板 SQL 。但是这里的问题在于,JPA 这种注解时,方法名编写查询的方式,注定写不了复杂 SQL ,这又是一个新的问题。

总结,合并,从整个历程来看,数据库访问技术里,最终是趋向两个方向:简单查询自动生成、复杂 SQL 查询代码动态化,一个是前期需求,一个是后期需求。

以 MyBatis 和 JPA 举例,这两个框架都诞生了融合二者的三方框架:

- MyBatis Plus/ Mybatis Plus Join/ tk.mybatis
- JPA Criteria API, JPA QueryDSL

JPA/Hibernate 不能替代 SQL 。您应该充分利用 JPA 和 SQL ,并将它们组合成一个成功的解决方案。
MyBatis + 自动生成类增强插件似乎可行,但 MyBatis 自身的 SQL 能力不够强力,加上生成框架大部分就是国人写的,我并不是说国人的技术能力不行,而是国内这个职场氛围和文化,诞生不出来好的框架,原因有很多:996 、35 毕业、生存压力(投放广告),相对于 QueryDSL 、JOOQ 而言,国内的插件生态,文档不完善,功能不丰富。。。
入门:对技术有好奇心,能应付工作,但对“为什么”的能力有限,需要其他人来做设计选型
普通:对流行技术有普遍的了解,能找到适合的技术来做事情,但没有到一个领域深耕到专家
senior:在一个领域有深耕,能辐射给其他人了,不仅知道要怎么做,也知道为什么要这么做,例如做消息通信,怎么可靠交付、怎么时延低等,非常擅长用工具等等,这个阶段能带小团队,把控方向
staff:技术的资深总归是一个人的,staff 的意义在于推动对公司有战略价值的项目和工作,培养团队
不只是程序员啊,艺术家,照片,画画,视频都能做,加个机器人还能做保安,还有无人驾驶,外卖,计程车也被淘汰了,医生这些也会慢慢跟进的,最终机器人统领地球,人类会变成现在猴子的地位

所以你赶紧学点马戏,到时候在动物园耍猴的时候,争取比其他猴厉害点
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     921 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 23ms UTC 21:06 PVG 05:06 LAX 14:06 JFK 17:06
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86