mybatis到底哪里好,为什么大家都说要用这个而不是hibernate和JPA呢?

蓝血的阿健 发布于 2015/10/15 10:51
阅读 24K+
收藏 3

问下各位大哥大姐们,我也是听了网上说的,mybatis好,于是再三抉择下,开始选用这个作为底层的ORM框架。好了,用了一阵,问题来了,处理对象嵌套的时候,要用到resuthandler这个就不说了,可能人家为了其他灵活性考虑。那么分页总可以吧,我用mybatis generator生成的代码里有example功能,里面有一个countByExample的方法,这个到是考虑蛮周到的,但是具体如何来做到数据库端的分页呢?难道只有假分页吗,就是全查询之后,再做分页。

于是我网上又查了很多资料,最后发现有的推荐用一个interception的东东,还有的推荐用一个mybatis的专门的第三方的分页插件。我瞬间就晕了。

怎么分个页还要这么多花样,有这些时间和精力,我JDBC都分页做完了。

特此来这个求教,这东西到底好在哪里?还是我初步踏入这个领域,没有深刻理解?

因为我之前都是习惯用hibernate的。所以对mybatis真的无所了解过。

加载中
1
hlevel
hlevel

推荐用mybatis 的人,你要问他为什么推荐用mybatis ? 他会回答说 支付宝也是用mybatis开发的啊。

我想说的是如果给支付宝一次重新来得机会他还会选择么?更何况支付宝开发的时候ORM框架也就屈指可数。

mybatis 依靠xml 配置繁多。还得映射model,还得一一对应字段,xml也没有继承机制。也没缓存机制。也没得自动生成语句那样便捷还得自己写sql,连基本的List<Object[]>返回对象都不支持,如果想支持一个model对应多条件查询,还得在派生model写无用的字段,稍微配置错误一个xml与model 映射,一直在那重复加载加载,错误也不明显.

总结 别扯犊子说mybatis开发效率高、性能高.

想性能高用jdbc, 想开发效率高 用hibernate. mybatis 完全是多余的。


n
nanmeiying
终于找到队友了,我用过mybatis,要多烦有多烦,纯jdbc也不大现实,我一直用springjdbc,自己用java实现了一套代码生成工具,包括Bean,Mapper类,只要数据库表设计符合规范,开发就跟玩似的。开发超级灵活简单。
WilliamQ
WilliamQ
存在即合理!
L
Laerf
如果是简单的CRUD系统hibernate要方便点,如果用到了一些复杂的SQL还是mybatis方便点,个人还是偏向mybatis
cshijiel
cshijiel
回复 @hlevel : JDBC还要自己处理一些结果集到对象的映射等,而且动态SQL自己实现,还是比较麻烦。MyBatis是SQL Mapper,刚好把脏活累活干了,而且不失去灵活性。
supperman
supperman
这评论绝对是日了狗了~
下一页
1
whaon
whaon

分页的话用拦截器就好

只是我觉得用mybatis要找sql语句很麻烦,当然可以用自动工具帮我们生成一些类,但是如果遇到一些其他情况,就不得不改这些类,会很痛苦

个人喜好jdbctemplate

1
VictoryKin
VictoryKin

赞同以下观点

1.mybatis sql配置灵活,最恶心的生成对象的活他干了(相比jdbc)

2.hibernate确实简单,hql写写啥都能查。但是sql调优就呵呵哒,学习成本高(这里指的是了解所有点,比如cache等)。

3.jar的多少,你就执行个select非得用个Hibernate,估计老大得炸了

4.以后项目架构更改的成本(如果你做传统企业的呵呵用啥都一样),mybatis毕竟配sql,即使公司说有一天mybatis做DAO不行了,你得支持分布式的,你直接抽sql,写框架接入成本也低

0
cshijiel
cshijiel
用MyBatis自己穿参数做分页岂不是更好,然后定义一个分页Class配合,自定义、便利性方面都很好。而且分页有多重分法,自己可以选择合适的。
0
Moses_Fu
Moses_Fu

最近正好一直在用Mybatis做开发,对比以前使用的Hibernate,可以发现Mybatis的内部逻辑很清晰:直接调用映射的SQL语句做查询,而Hibernate的查询逻辑(方法)就多(复杂)了。

1.在简单数据库逻辑查询(单表)下Mybatis开发效率并不会比Hibernate低多少。

2.在复杂数据库逻辑查询(多表、联合)下Hibernate开发效率确实要高于Mybatis,但是后期的瓶颈到达之后,想要优化,基于Hibernate的必须要精通Hibernate和DB,基于Mybatis的只需要精通DB。两相权衡吧。

3.Mybatis的数据库分页,如果你要做一个通用的Page分页(解耦),那就用Interceptor的方式,以后的分页数据都不用再关cursor、size等;如果你只需要做一个分页,那就直接写对应的SQL语句多次查询组装(耦合)。

4.但是Hibernate也可以用SQL语句查询啊?如果Hibernate只用SQL查询,那复杂度跟Mybatis比起来又不简单,而且Hibernate又“重”得多。

5.但是JDBC也可以连接数据库啊?数据库连接的session管理,cache管理也自己手写的话当然好,如果不怕那“陡升”的复杂度的话。

6.当然Hibernate也有自身的优点,简单的配置、方便的HQL查询、多种方法选择。(如果需要的话)

以上,个人经验,有错的话欢迎指出。

Moses_Fu
Moses_Fu
回复 @xmut : 效率应该分成开发效率和运行效率。我的意思是Hibernate能够很容易的实现复杂逻辑的查询(开发效率高),但是查询的效率和优化比Mybatis困难得多(优化前运行效率较低)。
xmut
xmut
第二点你说反了,CURD才能体现hibernate的开发效率。而复杂数据库逻辑才能体现mybatis的优势,毕竟HQL再怎么强大,也只是SQL的子集,真要做ERP报表查询,SQL才是王道!
0
chworld
chworld
报表系统各种拼接sql,存储过程也是五花八门,个人感觉还是换成mybatis方便一些,但是公司没有这么做,用的自己的框架+freemarker对sql拼接及纯sql拼接
0
南湖船老大
南湖船老大

    Mybatis 做分页很简单,你觉得复杂是你想多了,我只能说就是简单的include一个固定的分页用的头和尾,真正的查询语句放中间,这样最简单可控性最好。

   当然,我不喜欢mybatis.

泥瓦匠BYSocket
泥瓦匠BYSocket
都喜欢 尤其JPA
0
一个人眺望碧海和蓝天
一个人眺望碧海和蓝天
mybatis方便的不要不要了  灵活度  可控性 都不是hibernate可以比的
0
Ivann
Ivann

目前框架是JPA+MYBATIS,以资源为单位的操作,JPA方便简单,整合,统计,联合查询等操作,MYBATIS直接写sql,优化和debug简单

至于分页,mybatis本身支持逻辑分页(传入skipResults,maxResults参数),但因为SQL是自定义的,所以物理分页的话需要自己针对数据库类型进行判断和分页sql拼接,比如oracle拼个rownum,mysql拼个limit,这样采用切入的实现是最合适的

RyanMiao
RyanMiao
jpa+mybatis有教程或者demo吗,好像资料不多
0
酱哥哥
酱哥哥
.NET平台下有mybatisNet,和mybatis 是一样的,我觉得非常恶心。但是值得庆幸的是.NET下有很多好用的ORM,MybatisNet在.NET里面是没有什么市场的,最多都是老旧的项目遗留下来的。
返回顶部
顶部