首页 > Java, 挨踢(IT) > MyBATIS(即iBATIS)问题集

MyBATIS(即iBATIS)问题集

2012年9月17日 发表评论 阅读评论 1,426 人阅读    

  部门准备转做其他业务(小道消息啊,呵呵) ,技术选型方面准备考虑使用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调用存储过程吗?该如何整?
  7. 内部实现机制
  8. 据了解iBATIS中没有为update加锁。如何解决在高并发情况下的同步问题?
  9. iBATIS使用单一一个Jar包也能实现功能。不过,据了解如果使用cglib这个运行时代码生成库,可以提延迟加载的性能。这个的实现原理是什么?这个增加框架是否推荐使用?为什么?
  10. 向数据库新增数据时,保存后,对象的ID是否会自动的回填到原来的对象中?
  11. 缓存相关:
  12. 据了解iBATIS中有四种内置MEMORY、LRU、FIFO、OSCACHE高速缓存类型。如果这四个缓存类型不满足需求。如何实现扩展高速缓存,实现自己的缓存类型?
  13. 在配置缓存时,iBATIS清除缓存是把所有的缓存都清楚还是只清楚一个实例模型相关的?
  14. iBATIS的缓存对于开发人员来说是否是透明的?需要自己编写和缓存相关的代码吗?
  15. iBATIS中和高速缓存策略相关的最佳实践是什么?能否分享一下?
  16. 优化相关:
  17. iBATIS中也可以懒加载。如何实现“按需加载”?
  18. iBATIS中有哪些优化策略?有没有这方面的最佳实践?
  19. iBATIS的事务管理器有JDBC、JTA、EXTERNAL三种。如果使用Spring来管理事务的话该如何配置?使用EXTERNAL?
  20. 实践相关:
  21. 能否用实例说明一下 “N+1查询”问题 ?如何解决“N+1查询”问题?
  22. iBATIS的动态SQL效率如何?如果过多的使用动态SQL,是否会影响效率?
  23. iBATIS的最佳实践都有哪些?
  24. 其他
  25. 为什么不使用MyBATIS(iBATIS的第三版)?
  26. iBATIS都有哪些扩展点?会对我们的开发工作有何促进?

与Hibernate对比的一些问题

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


作 者: D瓜哥,https://www.diguage.com/
原文链接:https://wordpress.diguage.com/archives/47.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

分类: Java, 挨踢(IT) 标签: , ,