用户登录
用户注册

分享至

mybatis总结

  • 作者: 雨打沙滩万点坑爹啊
  • 来源: 51数据库
  • 2020-09-21
1.优点
  简单:
  易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  实用:
  提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我们更容易的开发和配置我们的DAL层。
  灵活:
  通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  功能完整:
  提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提供了DAO支持,并在DAO框架中封装了ADO.NET,NHibernate和DataMapper。
  增强系统的可维护性:
  通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  2.缺点
  滞后性:
  还没有明确对.NET2.0的支持。最新版本在2.0下编译可以,但有些单元测试不能通过。
  不成熟,工程实践较少:
  IbatisNet在实际项目中的使用较少。 只是理论上可行.
  半ORM,工具支持较少:
  需要我们自己写sql,并且.NET下还未发现可以自动生成业务层类和配置文件的工具,这点和NHibernate不一样,NHibernate会为我们的数据库直接产生sql,并有一些辅助工具。因此使用Ibatis比NHibernate要多做一些工作。



  mybatis的优缺点:

优点:
1.?易于上手和掌握。
2.?sql写在xml里,便于统一管理和优化。
3.?解除sql与程序代码的耦合。
4.?提供映射标签,支持对象与数据库的orm字段关系映射
5.?提供对象关系映射标签,支持对象关系组建维护
6.?提供xml标签,支持编写动态sql。
缺点:
1.?sql工作量很大,尤其是字段多、关联表多时,更是如此。
2.?sql依赖于数据库,导致数据库移植性差。
3.?由于xml里标签id必须唯一,导致dao中方法不支持方法重载。
4.?字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即collection的对象为null)
5.?dao层过于简单,对象组装的工作量较大。
6.??不支持级联更新、级联删除。
7.?编写动态sql时,不方便调试,尤其逻辑复杂时。
8?提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。
9.?使用不当,容易导致n+1的sql性能问题。
10.?使用不当,关联查询时容易产生分页bug。
11.?若不查询主键字段,容易造成查询出的对象有“覆盖”现象。
12.?参数的数据类型支持不完善。(如参数为date类型时,容易报没有get、set方法,需在参数上加@param)
13.?多参数时,使用不方便,功能不够强大。(目前支持的方法有map、对象、注解@param以及默认采用012索引位的方式)
14.?缓存使用不当,容易产生脏数据。

总结:
mybatis的优点其实也是mybatis的缺点,正因为mybatis使用简单,数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql的使用水平上了。sql写在xml里,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难,也非常受限,无法像jdbc那样在代码里根据逻辑实现复杂动态sql拼接。mybatis简单看就是提供了字段映射和对象关系映射的jdbc,省去了数据赋值到对象的步骤而已,除此以外并无太多作为,不要把它想象成hibernate那样强大,简单小巧易用上手,方便浏览修改sql就是它最大的优点了。
mybatis适用于小型且程序员能力较低的项目和人群使用,对于中大型项目来说我并不推荐使用,如果觉得hibernate效率低的话(实际上也是使用不当所致,hibernate是实际上是不适用于拥有高负载的工程项目),还不如直接用spring提供的jdbc简单框架(template),同样支持对象映射。spring的优缺点:

优点
a.?spring能有效地组织你的中间层对象,不管你是否选择使用了ejb。如果你仅仅使用了struts或其他为j2ee的?api特制的framework,
spring致力于解决剩下的问题。
b.?spring能消除在许多工程中常见的对singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对
象的程度。
c.?通过一种在不同应用程序和项目间一致的方法来处理配置文件,spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类
要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读javadoc甚至源编码?有了spring,你仅仅需要看看类的javabean属性
。inversion?of?control的使用(在下面讨论)帮助完成了这种简化。
d.??通过把对接口编程而不是对类编程的代价几乎减少到没有,spring能够促进养成好的编程习惯。
e.?spring被设计为让使用它创建的应用尽可能少的依赖于他的apis。在spring应用中的大多数业务对象没有依赖于spring。
f.??????使用spring构建的应用程序易于单元测试。
g.??????spring能使ejb的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用pojos或local?ejbs来实现业务接口,却不会影响
调用代码。
h.??????spring帮助你解决许多问题而无需使用ejb。spring能提供一种ejb的替换物,它们适用于许多web应用。例如,spring能使用aop提
供声明性事务管理而不通过ejb容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个jta实现。
i.??????spring为数据存取提供了一个一致的框架,不论是使用的是jdbc还是o/r?mapping产品(如hibernate)。
spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。
缺点:使用人数不多、jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

以上内容,是我在网络上找到的,希望对你有帮助~~
软件
前端设计
程序设计
Java相关