这个系列文章会说一下目前比较流行的持久层开源框架MyBatis,不过不会讲到其源码实现,因为我还没有看过...后面更多的是讲下配置和使用。对源码有情节的同学推荐下徐郡明老师的这本《MyBatis技术内幕》,我近期也打算阅读,等读罢会在另一个系列文章里分享心得。
回到正文,在SSH时代我们持久层框架更多的使用的是Hibernate。Hibernate是建立在若干pojo通过xml映射文件提供的规则映射到数据库表上的,是全表映射。pojo对象可以通过工具自动生成,通过sql或hql和数据库进行交互,同时支持对数据的一级缓存和二级缓存。Hibernate的基本交互方式如下图所示:
Hibernate的优点和缺点也是非常明显的。
优点有:
1.消除了代码的映射规则,全部被分离到了xml或者注解里去配置;
2.无需再管理数据库连接,也配置到xml里;
3.一个会话中,不要操作多个对象,只操作session对象即可;
4.关闭资源值需要关闭一个session即可;
缺点
1.全表映射带来不便,比如更新时需要发送所有的字段;
2.无法根据不用的条件组装不同的sql;
3.对多表关联和复杂sql查询支持较差,需要自己写sql,返回后需要自己拼装成pojo;
4.不能有效支持存储过程;
5.hql性能较差,无法优化;
面对互联网项目不断变化的业务场景,Hibernate逐渐显得略加笨重。毕竟当我们享受了全自动的功能,也要接受其带来的限制和不灵活。这个时候,“半自动”的iBatis应运而生(后更名为MyBatis)应运而生。MyBatis需要手工配置提供pojo,sql和映射关系,但是几乎可以做到JDBC所能做到的所有事情。MyBatis的基本交互方式如下图所示:
和Hibernate相比,MyBatis的优缺点如下:
优点:
1.动态sql,可配置动态表名列名等;
2.优化sql,可配置sql映射规则;
3.支持存储过程;
4.可以自动映射;
缺点:
缓存、日志、级联功能不如Hibernate强大
下一篇文章:MyBatis知识盘点【贰】_MyBatis组件概览