论坛首页 入门技术论坛

为了喷mybatis我下载了mybatis源码

浏览 20181 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-12-12  
突然想到是否应该加上一个在注解上写sql的功能。
这样看起来确实比较狂酷霸拽,更容易赢得少男少女们的青睐。

真没想到结果集实体映射能变成mybatis的一个优点(?),真为springjdbctemplate和dbutil
表示惋惜,这两位只能支持固定命名规则的sql映射
0 请登录后投票
   发表时间:2011-12-12  
aa87963014 写道
突然想到是否应该加上一个在注解上写sql的功能。
这样看起来确实比较狂酷霸拽,更容易赢得少男少女们的青睐。

真没想到结果集实体映射能变成mybatis的一个优点(?),真为springjdbctemplate和dbutil
表示惋惜,这两位只能支持固定命名规则的sql映射


自己写了个 FreyjaJdbcTemplate ,不错,挺好的。

不过我想知道, FreyjaJdbcTemplate 和 mybatis相比有什么优点?
0 请登录后投票
   发表时间:2011-12-12  
没有喜欢与不喜欢,只要能实现所要的功能就行。曾经也想过自己重新写,后来想想,最后可能也会变得跟mybatis差不多,还不如在mybatis的基础上进行修改与定制(事实上用dotnet时就写过类似的东东)。

1、动态SQL使用场景之一
    查询 + 列表页面(或者单是列表),根据不同的条件显示数据,或者查询数据。 前台的查询条件不可能一成不变,客户某天对你说,把XXX查询条件也加上去吧。此时用mybatis开发的需要做什么?
    a、在前台页面增加一个<input />
    b、在后台修改XML,增加查询条件

      <if test="salerId != null and salerId != '' ">
          and t.saler_id = #{salerId}
      </if>
   OK,完成,不需要重启。

  下面是动态SQL的一个实际例子:


     <select id="getProductResource" parameterType="map" resultType="map">
          select t.type_name,
                 t.product_name,
                 t.product_no,
                 t.product_price,
                 t.is_sales,
                 t.no_id
            from product_detail t , xxxxx_xxx
           where t.res_status = 10
             and t.wayid = #{user.deptId}
             <if test="TypeCode != null and TypeCode != ''">
                    and t.type_code = #{TypeCode }
             </if>
             <if test="productNo!= null and productNo!= ''">
                    and t.product_nolike = #{productNo}
             </if>
             <!-- 此处省略 ...... -->
            order by
               <if test="sortname != null and sortname != ''">
                    ${sortname} ${sortorder},
               </if>
              t.type_code,t.product_name,t.product_no
     </select>

2、关于DBA优化SQL语句的问题
     实际上大多数的DBA并不负责修改SQL语句,只负责将性能差的SQL语句找出来,对Oracle来说,也就是跟你生成一下AWR报告并解读一下,剩下就是项目组的事。
     暂时还没有见到有哪个系统运行过几年后不需要优化的,数据量跟系统上线时已经不是一个数据级了。此时如果SQL语句不在XML文件里,如果优化?加加索引就能解决的优化根本就不叫优化,是数据库设计的问题。
     应用届生开发的系统也不少吧,他们写的SQL不知道你们见过没,普遍都存在问题(当然,不是全部)。此时,修改XML里的SQL一般都能有比较好的效果。


3、mybatis已经支持在注解里写SQL,不要喷,关键是看使用者怎么用。如果把一些不经常变的SQL放在注解里不好吗,避免一大堆读不懂的XML出现,如果单表DAO。自动生成的代码片段:

    @Delete({
        "delete from SYS_INTER_LOGS",
        "where LOG_ID = #{logId,jdbcType=VARCHAR}"
    })
    int deleteByPrimaryKey(String logId);

    
0 请登录后投票
   发表时间:2011-12-12  
ls, 需求变动。。。不是重启不重启的事情。


to:mikewang

freyjaJdbcTemplate不是为了处理那些无聊的结果集实体映射。当然这部分已经ok了。原生sql随便你写。

特色之一应该是缓存的处理。
不过话说实体映射的支持做得也不错。
0 请登录后投票
   发表时间:2011-12-12  
aa87963014 写道
ls, 需求变动。。。不是重启不重启的事情。


to:mikewang

freyjaJdbcTemplate不是为了处理那些无聊的结果集实体映射。当然这部分已经ok了。原生sql随便你写。

特色之一应该是缓存的处理。
不过话说实体映射的支持做得也不错。


我先喷你一句, 你给我找个能用的缓存出来,让我看看呢。

另外, 你解释一下, 什么不用数据库自带的缓存? 例如 oracle 的 big pool
0 请登录后投票
   发表时间:2011-12-12  
ls 你喷的这个就等于喷hibernate的一级缓存二级缓存和mybatis的缓存。

这2个框架的作者到底是脑袋被门夹了呢?我不知道有没有被夹
0 请登录后投票
   发表时间:2011-12-12  
    不多说,先把你的freyjaJdbcTemplate mark一下,年后对mybatis开刀前对比一下,看看实现了哪些mybatis没有的功能,而又需要的。大家所经历过的项目和系统类型都不一样,适合自己的才是最好的。
0 请登录后投票
   发表时间:2011-12-12  
并没有所谓的功能差异,如果你能知道为什么springjdbctemplate和dbutils 为什么不能像hibernate、mybatis一样做到随意的结果集实体映射,你就会知道这些框架各自之间到底在哪里。
0 请登录后投票
   发表时间:2011-12-12   最后修改:2011-12-12
aa87963014 写道
ls 你喷的这个就等于喷hibernate的一级缓存二级缓存和mybatis的缓存。

这2个框架的作者到底是脑袋被门夹了呢?我不知道有没有被夹


你说的没错, hibernate的 缓存确实没什么用处,在实际项目中还真没什么用处(写个论坛什么的除外)

而且, oracle 的技术人员还公开质疑过此缓存的必要性。

对于orm (或者说是, sqlmap ) 框架来说, 缓存确实是最没有意义,是不需要关注的部分。 因为在数据层面,数据库可以做的比你更好, 在业务层面, 缓存必须自己设计,没法通用。 当然,带一个缓存,确实显得比较cooooool,尽管没什么用处。

这个也是mybatis 并不提倡你用缓存的原因。
0 请登录后投票
   发表时间:2011-12-12   最后修改:2011-12-12
缓存越接近表面越有用,我觉得hibernate和mybatis的缓存弱爆了,他们有着与springjdbctemplate和dbutil之类的框架没有的东西,却没有好好的利用。
每个使用过hibernate、mybatis缓存的人应该都会觉得hibernate、mybatis缓存没有什么价值。
这是很正常的,因为他们没有管理过缓存。

我的框架还有一点部分没处理完,之后可以给大家看看。缓存是如何提高程序的性能的!
0 请登录后投票
论坛首页 入门技术版

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