论坛首页 入门技术论坛

为了喷mybatis我下载了mybatis源码

浏览 20180 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-12-12  
楼主自己写组件(FreyjaJdbcTemplate)用是很好的事,而mybatis有缺点也很正常,开源的东西都是一些很通用的功能,不是拿过来用,肯定要自己改造下。所以不要喷这喷那的。
0 请登录后投票
   发表时间:2011-12-12  
喷喷更健康。百花齐放、百家争鸣。无可厚非。
0 请登录后投票
   发表时间:2011-12-12  
我认为这种情况并不意外。因为框架本身无法判断修改语句会造成多大的数据量变化。既然不知道,那么只能认为所有缓存过期。
Hibernate里面也有类似问题。你执行一条Update语句而不是修改一个受管实例的属性,那么Hibernate同样会清理该实例的所有缓存。因为它无法确定这条Update到底修改了多少记录,而这些记录有多少在Hibernate的二级缓存里面。不过Hibernate的缓存处理可以区分对象,清理的范围比较小,而且可以用修改指定实例的方式避免缓存整体过期。
但是mybatis并没有记录对象和数据库表的关系,唯一记录的是对象和查询语句的关系。结果就无法判断会影响哪些表,只好全清除了。
0 请登录后投票
   发表时间:2011-12-12  
楼主钻研精神还是值得肯定的.
myBatis文档里面说的很清楚.myBatis只是一个SQL映射框架,并不专注cache. 而且它也不建议用自己带的cahce框架. 而是推荐用ehcahce,oscache等.并且接口已经给实现好了. 所以楼主不要纠结在这里.
0 请登录后投票
   发表时间:2011-12-12  
myBatis/ibatis 这种只支持原生sql的框架如果单单不看缓存,那么myBatis就不需要去解析sql。除了动态sql。

但动态sql一般用于报表类项目,而且就算写在xml里面效果也不理想。(写在注解里面不用说实现不了动态sql)

也就是说,除了动态sql较多的项目。用自己写的原生jdbc、springjdbcTemplate、dbutil之类的都要比myBatis要好。无论是性能还是稳定性。

至于dba什么的更是无稽之谈。ps:本帖确实是广告贴。
0 请登录后投票
   发表时间:2011-12-12  
啥叫动态sql?用户拖拽几个表的字段,就能够自动生成对应的sql?俺们用hibernate做来一个
0 请登录后投票
   发表时间:2011-12-12  
刚才我去了解下。如果没弄错的话mybatis的动态sql就是在xml里面拼接sql而不是在java代码里面拼接。

如:
<select id="getUserList" resultMap="user">
         select * from user
            <isGreaterThan prepend="and" property="id" compareValue="0">
                   where user_id = #userId#
            </isGreaterThan>
             order by createTime desc
    </select>
0 请登录后投票
   发表时间:2011-12-12  
”用户拖拽几个表的字段,就能够自动生成对应的sql“

我觉得对于单表来说压力不大。
0 请登录后投票
   发表时间:2011-12-12  
aa87963014 写道
myBatis/ibatis 这种只支持原生sql的框架如果单单不看缓存,那么myBatis就不需要去解析sql。除了动态sql。

但动态sql一般用于报表类项目,而且就算写在xml里面效果也不理想。(写在注解里面不用说实现不了动态sql)

也就是说,除了动态sql较多的项目。用自己写的原生jdbc、springjdbcTemplate、dbutil之类的都要比myBatis要好。无论是性能还是稳定性。

至于dba什么的更是无稽之谈。ps:本帖确实是广告贴。

MyBatis跑到你这里,作用就只剩下动态SQL了?

  • 结果集映射到Java Entity Object算不算功能;
  • 内置的过滤SQL注入风险算不算功能?
  • 简单CRUD无需Dao实现类,直接写在Mapper接口的annotation中算不算功能?
  • 方便地使用Spring管理事务算不算功能?
  • 将SQL与程序分离,使得当只需修改SQL便可完成pack升级时,无需java源代码重新编译成class;
  • 使得程序逻辑清晰,想要改SQL直接打开mapper文件即可,不用到程序中到处去找 SQL字符串,同时避免了你自己拼写SQL字符串容易出错的问题,这算不算功能?
  • 对SQL配置文件采用namespace命名空间化管理,避免了可能的SQL ID重复命名问题,算不算功能?


就算只说动态SQL,那MyBatis的作用也是无与伦比的,当你的项目需要复杂且条件不确定的查询时、当你的项目需要按照一定的条件更新不同的字段时、当你的项目需要按照不同的条件插入不同的值时,当你不想再为多写一个“,”,多写一个"and",或者少写一个“or”而烦心时、当你需要传入一个集合对象作为SQL遍历循环条件时,当你需要动态建表、动态修改字段、查询表名称动态变化不确定时……

当你遇到这些情况的时候,你怎么办?自己写一个框架?

我想问得是:你写得有MyBatis好么?你自己写得程序,也像MyBatis一样,有全世界无数项目的实际案例么?
=======================================================================================

自己造轮子无可厚非,我自己也造轮子,从MVC框架到自己的权限认证框架,我一直在造轮子,但是我造轮子是因为已有的框架无法满足我的需求,所以我要造轮子去实现已有框架没有的功能。

但是从你的帖子来看,你喷得MyBatis缺点,根本就不是人家的缺点啊,你要造轮子,应该是造一个你有,但是MyBatis没有的轮子,而不是否定人家的功能,认为那些东西没用,一句话就把MyBatis给否定了。

0 请登录后投票
   发表时间:2011-12-12  
ls虽然你很喜欢mybatis。
1、是框架都有结果集映射到Java Entity Object
2、“内置的过滤SQL注入”你说的是预编译sql?
3、无须实现类。。。不会变了个花样你就觉得很神奇了吧。(咦,这个不是跟很方便管理sql有冲突么)
4、spring事物反过来需要数据库操作层管理?
5、我没体会到编译一次到底大代价有多大,而且对于我这种密集恐惧症的人来说满xml的sql语句和描述标签。(个人爱好不干涉)
6、SQL ID重复命名?没听过这个问题。
*********
我主帖内容主要是说缓存这一层,对于sql写在哪只是吐槽。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics