前些日子简单的总结了一下 mybatis和hibernate
下面我试着从以下三个方面对他们做个一个比较:
(1)运行原理,运行过程:
hibernate:
configuration.configure()读取解析在src路径下hibernate.cfg.xml文件,通buildSessionFactory得到SessionFactory,再由SessionFactory得到 session这个容器(对数据各种操作由它来完成)。而hibernate.cfg,xml中主要描述了对于数据库的连接参数(驱动类,账号,密码,数据库名),以及映射文件(说到底hibernate是一个orm框架所以映射文件是它必不可少的组成部分),映射文件描述了实体类和数据库中表的对于关系。当我们通过session去操作的时候,hibernate会根据映射文件的描述生成相应的sql,再由jdbc去操作数据库。
mybatis
,解析myconfig.xml得到sqlsessionfactory;myconfig.xml和hibernate.cfg.xml有些类似,对于数据库的连接参数(驱动类,账号,密码,数据库名),以及映射文件(映射文件描述的是对数据库操作的sql,mybatis将这些sql交 给jdbc 对数据库进行操作),当通过sqlsession去控制数据的时候,我们只需要选择相应的语句标签Id即可,如果有需要加入到数据库的数据,我们需要把他封装层一个类,这也是面向对象编程的一种体现。
(2)优点
hibernate,与mybatis都是非常优秀的持久层框架,它们都可以让程序员用面向对象的思想去管理数据库,hibernate可以通过级联更新数据,级联删除数据,对数据的管理显得很方便,而且易于移植。mybatis的sql易于优化,管理。
(3)缺点
对于hiberante通过它的运行原理,我们发现不管怎么样,它自己都会生成sql语句,对于少量数据的操作没问题,但是一旦数据量变大,表与表之间的关系变得复杂的时候,hibernate就显得很吃力,在这种情况下,需要使用者有很深厚的使用功底。而对于mybatis而言,,但是因为sql是自己写的,所以工作量很大,并且不易于移植。
(4)总结:
mybatis的优点其实也是mybatis的缺点,正因为mybatis使用简单,数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql的使用水平上了。sql写在xml里,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难,也非常受限,无法像jdbc那样在代码里根据逻辑实现复杂动态sql拼接。mybatis简单看就是提供了字段映射和对象关系映射的jdbc,省去了数据赋值到对象的步骤而已,除此以外并无太多作为,不要把它想象成hibernate那样强大,简单小巧易用上手,方便浏览修改sql就是它最大的优点了。
mybatis适用于小型且程序员能力较低的项目和人群使用,对于中大型项目来说我并不推荐使用,如果觉得hibernate效率低的话(实际上也是使用不当所致,hibernate是实际上是不适用于拥有高负载的工程项目),还不如直接用spring提供的jdbc简单框架(Template),同样支持对象映射。