MyBatis:介绍及执行流程
Mybatis介绍
Mybatis
是apache
下的一个开源项目,是对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL
本身,而不需要花费精力去处理例如注册驱动、创建connection
、创建statement
、手动设置参数、结果集检索等jdbc繁杂的过程代码。- Mybatis 通过xml或注解的方式将要执行的各种statement
(statement、preparedStatemnt、CallableStatement)
配置起来,并通过 java 对象和statement
中的sql 进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射成 java 对象并返回。MyBatis架构框架图
MyBatis开发流程和配置
开发设计图
Mybatis配置
mybatis-config.xml
,此文件作为 mybatis 的全局配置文件,配置了 mybatis 的运行环境等信息。mapper.xml
文件即 sql 映射文件,文件中配置了操作数据库的 sql 语句。此文件需要在SqlMapConfig.xml
中加载。SqlSessionFactory
:通过mybatis环境等配置信息构造SqlSessionFactory
即会话工厂;线程安全,创建应在执行期间一直存在,不要重复创建,建议使用单例模式;创建sqlSession
。sqlSession
:即会话,操作数据库需要通过sqlSession
进行。Executor
:mybatis底层自定义了Executor
执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。Mapped Statement
也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml
文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
Mapped Statement对sql执行输入参数进行定义,包括HashMap
、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc
编程中对preparedStatement
设置参数。
Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo, Executor
通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
Mybatis与Hibernate比较
Hibernate优缺点
- 优点
- 不需要写sql语句,写hql语句。
- 数据库迁移,不需要修改sql,只需修改方言。
- 缺点
- 不适用于开发复杂的业务
- Hibernate优化比较复杂。
- HQL解析生成sql执行,降低项目性能。
- 生成sql语句比较难看,不易调试查错。
常用于传统项目,需求变化不频繁的项目:OA、ERP、经融
Mybatis优缺点
- 优点:
- 只需要集中精力在sql主句,不需要过多关注业务。
- 适用于需求变化较快的项目(互联网项目)。