【Mybatis进阶】-- mybatis架构

来源:互联网 发布:棉花数据 编辑:程序博客网 时间:2024/05/01 19:52

1.什么是mybatis


  MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而

不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的

过程代码,通过mybatis提供的映射方式,自由灵活的生成满足需要的sql语句。


  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)

配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将

结果映射成java对象并返回。


2.mybatis架构图



3.架构解析


1、SqlMapConfig.xml

  mybatis的全局配置文件,名称不固定,开发者可自定义。SqlMapConfig.xml中配置了数据源、事务等mybatis运行

环境、配置映射文件(配置sql语句)。

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

2、SqlSessionFactory

  会话工厂,根据SqlMapConfig.xml配置文件创建。跟spring整合后,通过单例模式管理,即会话工厂一旦创建,

只使用一个实例。 作用即创建SqlSession


3、SqlSession

  会话,是一个面向开发者的接口。在sqlsession内部提供了很多操作数据库的方法,如返回单个对象的selectOne

返回多个对象的selectList。


  需要注意的是sqlsession不是线程安全的,不能共享使用。最佳应用场合为方法体内,定义成局部变量使用。

每个线程应该有它自己的sqlsession实例,打开一个会话使用完毕后立即关闭。


4、Executor

  执行器,也是一个接口,包含两个实现,一个是基本执行器、一个是缓存执行器

  作用:SqlSession内部通过执行器操作数据库


5、mapped statement

  底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped

Statement对象,mapper.xml中sql的id即是Mapped statement的id。

  作用:对操作数据库存储封装,包括 sql语句,输入参数、输出结果类型


6、输入参数映射

  输入参数映射就是jdbc编程中对preparedStatement设置参数。Mapped Statement对sql执行输入参数进行定义,

包括HashMap、基本类型、pojo。Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中。


7、输出结果映射

  输出结果映射过程相当于jdbc编程中对结果的解析处理过程。Mapped Statement对sql执行输出结果进行定义,包

括HashMap、基本类型、pojo。Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中。


4.与hibernate的异同


1)hibernate

  hibernate是一个标准ORM框架,入门门槛高,sql语句自动生成,不需要程序员自己手动编写。也正是由于

hibernate对sql语句的封装,使得对sql语句的优化和修改比较困难。

适用场景:需求变化小的中小型项目。例如后台管理系统OA、ERP、ORM。。。


2)mybatis

  支持原生sql,程序员只需专注编写sql语句,对sql修改和优化比较方便。mybatis是一个半自动化的ORM框架,程

序员可自己写sql,也可利用mybatis映射机制自动生成。

适用场景:需求变化较多的项目。例如互联网项目。



  本篇博文对mybatis的框架和内部实现机制做了详细介绍,接下来会通过一个入门程序对本篇内容做一个简单

实践,欢迎继续关注。




1 0
原创粉丝点击