浅谈mybatis

mybatis

apache的一个开源项目iBatis,(是一个基于java的持久层框架,提供的持久层框架包括SQL Mapsdata access object (DAOs)

Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML或注解来配置和映射原生信息,将接口和javapojo(普通的java对象)映射成数据库中的记录

每个mybatis应用程序主要都是使用SqlSessionFacctory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得,sqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定于的配置类的实例获得。

 

优点:

简单易学

Mybatis不会对应用程序或者数据库的现有设计较强任何影响,sql写在xml里,便于统一管理和优化

解除了sql与程序代码的耦合,通过DAL层,将业务逻辑和数据访问逻辑分离,是系统的设计更清晰,更易维护

提供映射标签,支持对象与数据库的orm字段关系映射

提供对象关系映射标签,支持对象关系组件维护

提供xml标签,支持编写动态sql

缺点:

编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。

SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

二级缓存机制不佳

 

流程:

(1) 加载配置并初始化

触发条件:加载配置文件

处理过程:将sql的配置信息加载成一个个MappedStatement对象,存储在内存。

 

(2) 接收调用请求

触发条件:调用mybatis提供的API

传入参数:为sqlid和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理

 

(3) 处理操作请求

触发条件:API接口层传递请求过来

传入参数:为SQLid和传入参数对象

处理过程:

1:根据sqlid查找对应的MappedStatement对象

2:根据传入参数对象解析MappedStatement对象,得到最终要执行的 SQL和执行传入参数

3:获得数据库连接,根据得到的最终sql语句和执行参数到数据库执行,并得到执行结果。

4:根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果

5:释放资源

                                                 

 

(4) 返回最终处理结果

 

功能架构

(1) API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用 数据处理层来完成数据处理

(2) 数据处理层:负责SQL查找、解析、执行和执行结果映射处理。主要目的:根据调用的请求完成一次数据库操作

(3) 基础支撑层:负责最基本的功能支撑,包括连接管理、事务管理、配置加载、缓存处理,将他们作为最基础的组件,为上层的数据处理层提供最基础的支撑。

 


架构详细过程:

1、 mybatis配置

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

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

2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

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

4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sqlid即是Mapped statementid

6、 Mapped Statementsql执行输入参数进行定义,包括HashMap、基本类型、pojoExecutor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7、 Mapped Statementsql执行输出结果进行定义,包括HashMap、基本类型、pojoExecutor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

 

 

猜你喜欢

转载自blog.csdn.net/qq_39667655/article/details/80265826