Mybatis是apache一个开源项目。是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力处理例如注册驱动、创建连接,创建statement,手动设置参数,结果集等过程
Mybatis通过xml或注解的方式将要执行的各种statement配置起来,通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybaits框架执行sql并将结果映射成java对象返回.
Mybatis架构
Mybatis配置文件
SqlMapConfig.xml
Mapper.xml
mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。通过mybatis环境等配置信息构造SqlSessionFactory
由会话工厂创建sqlSession,操作数据库需要通过sqlSession进行。
mybatis底层自定义了Executor执行器接口操作数据库。Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个mapped Statement对象,sql的id即是 Mapped statement id
Mapped Statement 对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Execuor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
Mapped Statement 对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Execuor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程.
Mybatis的功能架构分为三层:
- API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理
- 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是更具调用的请求完成一次数据库操作。
- 基础支撑层:负责最基础的功能支撑,包裹连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑
Mybatis的优缺点
优点
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多
- 解除sql与程序代码的耦合:通过提高DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易于维护,更易段元测试。SQL和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射变迁,支持对象关系组建维护
- 提供xml标签,支持编写动态sql.
缺点
- 编写SQL语句时工作量大,尤其是字段多、关联表多时。
- SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
- 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大。
- 二级缓存机制不佳。
SqlSession作用:
1.向SQL语句传入参数
- 执行SQL语句
3.获取执行SQL语句的结果
4.事务的控制