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 条回复
caixiexin
2017-05-19 20:22:13 +08:00
@caixiexin xnl 写错了,是 XML😂
swolf119
2017-05-19 21:13:16 +08:00
一个是不用 xml
一个是频繁变动的表不用 resultMap,直接用 resultType="com.xx.model.Xxx"
sql 就是 SELECT col1 a,col2 b,col3 c from table where xxxxx
cloudzhou
2017-05-20 01:19:45 +08:00
自己写 render 来渲染 xml,以前我就是这么做的
micean
2017-05-20 14:09:25 +08:00
用新的类继承 POJO,只操作此子类,这样 POJO 自动生成不受干扰。
另外就是像上面说的,自己管理好各种 xml 或者 mapper 了
我自己是重新写了框架,支持泛型的 mapper,比如这样:
public interface GenericMapper{
@Update("............")
<T> int insert(T t);
}
这样怎么改表也不会动太多东西
liuzhen
2017-05-20 15:38:48 +08:00
jfinal Model
NUT
2017-05-21 18:51:08 +08:00
考虑下 NOSQL 比如 mongodb 这种,经常变动的就适合 mysql 这种数据存储。
v4ex4b
2017-05-22 09:05:40 +08:00
@abcbuzhiming 你姿势还是错了,mapper 可以是同一个,只要 namespace 相同即可
FrankD
2018-10-14 14:00:21 +08:00
先挖个坟...
这个问题是有优雅一点的解决方案的,直接抛弃 Mybatis 选择 Spring Data JPA、Hibernate 受限太多。
例如有一个会员表叫 t_member,你自定义的 SQL 写在 MemberMapperSD.xml 中,增删改查的一般性 SQL 由工具自动生在 MemberMapper.xml 中,这样每次表结构改动,你只需要重新生成一遍覆盖 ***Mapper.xml ,***MapperSD.xml 再人工检查一遍即可。

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

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

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

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

© 2021 V2EX