浅谈mybatis
mybatis
是apache的一个开源项目iBatis,(是一个基于java的持久层框架,提供的持久层框架包括SQL Maps和data access object (DAOs))
Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML或注解来配置和映射原生信息,将接口和java的pojo(普通的java对象)映射成数据库中的记录
每个mybatis应用程序主要都是使用SqlSessionFacctory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得,sqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定于的配置类的实例获得。
优点:
l 简单易学
l Mybatis不会对应用程序或者数据库的现有设计较强任何影响,sql写在xml里,便于统一管理和优化
l 解除了sql与程序代码的耦合,通过DAL层,将业务逻辑和数据访问逻辑分离,是系统的设计更清晰,更易维护
l 提供映射标签,支持对象与数据库的orm字段关系映射
l 提供对象关系映射标签,支持对象关系组件维护
l 提供xml标签,支持编写动态sql
缺点:
l 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
l SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
l 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
l 二级缓存机制不佳
流程:
(1) 加载配置并初始化
触发条件:加载配置文件
处理过程:将sql的配置信息加载成一个个MappedStatement对象,存储在内存。
(2) 接收调用请求
触发条件:调用mybatis提供的API
传入参数:为sql的id和传入参数对象
处理过程:将请求传递给下层的请求处理层进行处理
(3) 处理操作请求
触发条件:API接口层传递请求过来
传入参数:为SQL的id和传入参数对象
处理过程:
1:根据sql的id查找对应的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对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。