MyBatis学习笔记[2]之MyBatis概述和架构原理

MyBatis介绍

MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,使得开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动,创建connection,创建statement,手动设置参数,结果集检索等JDBC繁杂的过程代码。

MyBatis通过XML或者注解的方式将要执行的各种statement(statament,preparedStatement,CallableStatement)配置起来,并通过Java对象和statement中的SQL进行映射生成最终执行的SQL语句,最后由MyBatis框架执行SQL并将结果映射成Java对象并返回。

MyBatis 架构

MyBatis学习笔记[2]之MyBatis概述和架构原理

  • MyBatis配置

    SqlMapConfig.xml,此文件作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息。

    mapper.xml文件即SQL映射文件,文件中配置了操作数据库的SQL语句,此文件需要在SqlMapConfig.xml中加载。

  • 通过MyBatis环境等配置信息构造了SqlSessionFactory即会话工厂

  • 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行

  • MyBatis底层自定义了Excutor执行器接口操作数据库,Excutor接口有两个实现,一个是基本执行器,一个是缓存执行器

  • Mapped Statement也是MyBatis一个底层封装对象,它包装了MyBatis配置信息以及SQL映射信息等,mapper.xml文件中一个SQL对应一个Mapped Statement对象,SQL的id既是Mapped statementid

  • Mapped Statement对SQL执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行SQL前将输入的Java对象映射至SQL中,输入参数映射就是JDBC编程中的对preparedStatement设置参数

  • Mapped Statement对SQL执行输出结果进行定义,包含HashMap、基本类型、pojo,Excutor通过Mapped Statement在执行SQL后将输出结果映射至Java对象中,输出结果映射过程相当于JDBC编程中对结果的解析处理过程

MyBatis与Hibernate

MyBatis不完全是一个ORM框架,它需要自己编写SQL语句,但是可以通过XML或者注解的方式灵活配置要运行的SQL语句,并将Java对象和SQL语句映射生成最终执行的SQL,最后将SQL执行结果再映射生成Java对象。MyBatis可以严格控制SQL执行性能,非常适合对关系数据模型要求不高的软件开发,但是灵活的前提是MyBatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套SQL映射文件,工作量大。

Hibernate关系映射能力强,数据库无关性好,对于关系模型要求高的软件可以提高代码效率。但是用好Hibernate要考虑如何设计O/R映射,在性能和对象模型如何权衡,需要较强的经验和能力。