mybatis的架构

MyBatis理论总结_数据库

 

MyBatis理论总结_hibernate_02
 

mybatis的2个核心对象:SqlSessionFactory、SqlSession

SqlSession封装了jdbc,提供了大量的操作数据库的方法。
SqlSession是线程不安全的,每一个线程都应该有自己的SqlSession实例,并且该实例不能被共享。

SqlSessionFactory用于创建SqlSession,SqlSessionFactory是线程安全的。

 

mybatis的执行过程

1、从配置文件中读取mybatis配置

2、加载xml映射文件

3、创建会话工厂SqlSessionFactory

4、通过会话工厂创建SqlSession对象

5、创建Executor实例
mybatis底层定义了一个Executor接口来操作数据库,可以根据SqlSession传递的参数动态生成需要执行的sql语句。mybatis给Executor接口提供了多种实现。

6、创建MappedStatement对象
Executor接口中操作数据库的方法都有一个MappedStatement类型的参数,此参数封装了映射信息,一个增删改查元素对应一个MappedStatement对象,元素的id就是MappedStatement对象的id。

7、将输入参数组装到sql语句中

8、通过Executor实例执行sql语句

9、将结果集映射为指定类型

 

mybatis、hibernate的比较

都是orm框架,orm Object Relational Mapping 对象关系映射,Object指的是java对象(po),Relational指的是关系数据库中的数据。
 

  • hibernate是标准的orm框架,自动生成操作数据库的方法、sql语句,编码量少,开发效率高于mybatis;mybatis是半自动的orm框架,需要自己写sql语句、操作数据库的方法。

  • hibernate使用门槛高,需要掌握数据关系模型、复杂的hql;mybatis简单易上手

  • hibernate自动生成了大量的sql语句、方法,很多都用不到、冗杂,死板、不好维护;mybatis可根据需求编写sql语句、方法,支持动态sql,可自定义映射规则,支持存储过程,灵活、好维护。

  • hibernate具有良好的数据库无关性,移植性好,更换数据库类型时,只需更改方言;mybatis不支持数据库无关性。

  • hibernate对多表关联查询支持较差,更新操作需要发送整个po对象(所有字段),不支持储存过程,不能进行sql优化来提高性能,适合场景简单、对性能要求不高的项目;mybatis对关联映射、多表查询支持较好,可通过sql优化来提高性能(因为是自己写sql语句),复杂、对性能有要求的项目使用mybatis更合适。