MyBATIS 问题集

jopen 11年前

  部门准备转做其他业务(小道消息啊,呵呵) ,技术选型方面准备考虑使用SpringMVC+Spring+iBATIS(第三版以后称为“MyBATIS”,以下统一称为“iBATIS”。如果第二版和第三版对比时,称第三版为“MyBATIS”)。而且,部门准备请另外一部门同事来讲解一下iBATIS。借此机会,我看了一些iBATIS的资料,同时也整理出一些问题。发布出来,希望大家帮忙解答。(以后这些问题解决了,我也会发布一些文章来跟踪介绍。)背景介绍完毕,直接上题:

映射相关:
    1. iBATIS中,主键映射使用的是<selectKey>。 Oracle、MySQL对主键自动增加实现方式不同。DB2不清楚如何实现。 在使用Oracle、DB2、MySQL中,该如何处理?
    2. 在iBATIS中如何继承关系如何实现?
    3. iBATIS中有映射参数有两种形式:内联映射(inline mapping)和外部映射(external mapping)。这两个有什么区别?各自的优缺点是什么?使用时,改如何选择?
    4. 如何实现动态多列选择(dynamic-column list selection)?
    5. 在iBATIS的配置文件中,可以使用<typeAlias>进行模型类名的简化。如果多人开发的话,会增加命名冲突等问题发生的可能性。有没有一个最佳实践,来提高重用性,同事规避这些问题的发生?
    6. 使用过iBATIS调用存储过程吗?该如何整?

 

内部实现机制
    1. 据了解iBATIS中没有为update加锁。如何解决在高并发情况下的同步问题?
    2. iBATIS使用单一一个Jar包也能实现功能。不过,据了解如果使用cglib这个运行时代码生成库,可以提延迟加载的性能。这个的实现原理是什么?这个增加框架是否推荐使用?为什么?
    3. 向数据库新增数据时,保存后,对象的ID是否会自动的回填到原来的对象中?

 

缓存相关:
    1. 据了解iBATIS中有四种内置MEMORY、LRU、FIFO、OSCACHE高速缓存类型。如果这四个缓存类型不满足需求。如何实现扩展高速缓存,实现自己的缓存类型?
    2. 在配置缓存时,iBATIS清除缓存是把所有的缓存都清楚还是只清楚一个实例模型相关的?
    3. iBATIS的缓存对于开发人员来说是否是透明的?需要自己编写和缓存相关的代码吗?
    4. iBATIS中和高速缓存策略相关的最佳实践是什么?能否分享一下?

 

优化相关:
    1. iBATIS中也可以懒加载。如何实现“按需加载”?
    2. iBATIS中有哪些优化策略?有没有这方面的最佳实践?
    3. iBATIS的事务管理器有JDBC、JTA、EXTERNAL三种。如果使用Spring来管理事务的话该如何配置?使用EXTERNAL?

 

实践相关:
    1. 能否用实例说明一下 “N+1查询”问题 ?如何解决“N+1查询”问题?
    2. iBATIS的动态SQL效率如何?如果过多的使用动态SQL,是否会影响效率?
    3. iBATIS的最佳实践都有哪些?

 

其他
  1. 为什么不使用MyBATIS(iBATIS的第三版)?
  2. iBATIS都有哪些扩展点?会对我们的开发工作有何促进?

 

与Hibernate对比的一些问题

  1. Hibernate中,模型对象有瞬时、持久化、脱管和移除四个生命周期。iBATIS的对象有生命周期吗?分别是什么?。
  2. Hibernate中有OpenViewInSession模式,用来应对Session失效(或者是过期)。iBATIS下有这方面的问题吗?如何应对这个问题?
  3. 在Hibernate中有一级缓存、二级缓存等。在iBATIS中是否也有与Hibernate对应的缓存架构和概念?
  4. Hibernate中有乐观锁和悲观锁。在iBATIS中是否也有这方面的机制?

特别声明:

  本文章,发表在博客园的同时,也发布到我的个人博客地瓜哥上。转载请注明作者和原文网址。
地瓜哥:http://www.diguage.com/archives/47.html
博客园:http://www.cnblogs.com/diguage/archive/2012/09/18/2690019.html