Java 除了 Mybatis,基于 Sql 的 Dao 还有更好的方案吗?

2017-05-18 20:01:40 +08:00
 abcbuzhiming
两年前用过 Mybatis,被坑了一大把,两年不敢再用,现在又要开始数据层选型,本人还是偏爱 sql 管理 dao 多点,不喜欢 hibernate,所以特来请教。也许是自己当年打开 Myabtis 的方式不对吧;当时有几个非常困扰我的关于 Mybatis 的地方:即使我用了 mybatis 的 mapper 生成工具,维护效率仍然很低,一个困境就是项目的数据库表在初期是经常变动的(哦不,应该说,是整个生命周期都在变动),一旦变动,对应表的 po 就变了,mybatis 里那个用来映射 po 的 resultMap 也得跟着变,于是你就得重新生产一遍这张 Mapper.xml。但是你的 Mapper.xml 里往往有你自己维护的 sql 语句( mybatis 生成的 mapper.xml 里自带的 sql 模板和接口并不能应对复杂情况,所以你仍然需要经常自己写新的 sql )。于是你就得备份旧的 mapper.xml,生成新的后你得从旧 xml 里把 sql 语句拷贝回去。这个过程真是太痛苦了。当时就有个想法,这该死的 resultMap 能否移到别的 xml 文件去,至少和放 sql 语句的 xml 分开啊,重新生成的时候不要互相影响啊。可惜没辙。另外 mybatis 基于 xml 的 sql 模板维护起来真的很头大,也没找到合适的工具。
所以,我现在该咋办呢,mybatis 有没有生产力高一点的工具,或者有没有优秀一点的替代品?
13229 次点击
所在节点    Java
68 条回复
microhz
2017-05-19 09:27:42 +08:00
mapper 生成工具能够避免开发效率问题,如果是自己写 SQL 可以单独出来一个 mapper,例如 UserMapper.xml,如果自己有一些联合查询或者自己写高性能 SQL 会去编写一个 UserRelateMapper.xml,这样原来的 User 表结构变化就不用担心自己写的 SQL 了
v4ex4b
2017-05-19 09:38:09 +08:00
abcbuzhiming
2017-05-19 10:42:04 +08:00
@v4ex4b 其实这种方式也不太好,理论上来说,对某个表进行操作的所有 sql 都应该在一个 mapper 里,比较好维护,如果除了生成 mapper 之外的 sql 都放一个自己维护的 mapper,那么 service 层写业务的时候会遇到很尴尬的现象,前一行代码你还在用生成 mapper 的方法,下一行代码你得 new 一个自己维护的 mapper 里的方法。。。好坑啊
birdccc
2017-05-19 11:39:06 +08:00
之前公司有大神自己封装了 jdbc,感觉比 mybatis 好用多了,直接操作实体类,然后映射表,但是就是多表 join 会麻烦, 我也不知道除了 mybatis 和自己封装,还有什么好的插件。
debuggerx
2017-05-19 12:03:00 +08:00
不知道是我理解有误还是姿势水平太低没有抓住要点:
看前面没人提 jfinal,作为一个“写过后台的前安卓码农自称伪全栈”,我觉得 jfinal 的 Db + Record 模式操作数据库和模型非常爽啊,比 Myabtis 那种搞来搞去简单直观多了,修改维护也很轻松。。
jych1224
2017-05-19 12:28:04 +08:00
aa6563679
2017-05-19 13:00:35 +08:00
@debuggerx jfinal 那种模式不像是个静态语言了
gowk
2017-05-19 13:05:03 +08:00
Hibernate 和 Spring Data JPA 我都不喜欢,封装的太重,没有自由的感觉
也许你说我水平不够。Good for you.
debuggerx
2017-05-19 13:25:10 +08:00
@aa6563679 对啊,所以它自己都自称拥有“动态语言的开发效率”,也或许是我平时也写一些 python 吧,感觉比较亲切。
seeker
2017-05-19 13:59:12 +08:00
楼主有没有看过 http://jdbi.org/
blackboom
2017-05-19 15:14:09 +08:00
@debuggerx Jfinal Db + Record 其实很难维护的
debuggerx
2017-05-19 15:51:52 +08:00
@blackboom 不知道您说的是哪种场景?是说 mybatis 把 sql 片段放到外部文件一起管理而 Db + Record 是放到代码里么?这个问题的话我是觉得统一维护 sql 实在太费事了,因为毕竟 sql 还是代码逻辑的扩展,不看上下文直接维护 sql 不现实,所以宁愿在代码里的模式
ppwangs
2017-05-19 16:05:07 +08:00
如果没有特别复杂的 sql,jdbi 挺好用。
mybatis 现在都开始搞注解啦,mapper 别用了
li24361
2017-05-19 16:28:40 +08:00
用 mybatis generator 生成并不会覆盖自己写的代码,
需要覆盖的代码保留
<!--
@mbggenerated
-->
注解,不覆盖的删掉这个注解

可以参考下我修改使用的
https://github.com/li24361/mybatis-generator-core
codeyung
2017-05-19 16:47:24 +08:00
paoding-rose-jade 可以 注解 /sql

最近在用 springboot+mybatis
sampeng
2017-05-19 17:19:54 +08:00
感觉核心问题还是数据库剧烈变化。。。偶尔加减 1-2 个字段什么的不管是什么都问题不大。。你要老颠覆数据库结构。不是自己给自己找不痛快么
mosliu
2017-05-19 17:19:56 +08:00
spring data jpa 挺方便的
特别是对应数据库要变的。手动改的少很多。
tremblingblue
2017-05-19 17:25:00 +08:00
ebean,挺方便的
tracymcladdy
2017-05-19 19:22:22 +08:00
用 mongo+spring data jpa 没有表结构多爽
caixiexin
2017-05-19 20:21:37 +08:00
mybatis 现在可以完全不用 xnl 文件,直接在 @select 等注解里写 mapper 的 SQL,复杂的 SQL 再用 provider 类。
大家说的 spring data jpa,用过几次,感觉像是轻量级的 hibernate ?

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

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

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

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

© 2021 V2EX