什么是MyBatis
Mybatis是一个持久层框架,他避免了几乎所有JDBC代码的手动设置和获取结果集的过程
通过使用xml配置或者注解和映射原始映射的方式将java接口,实体类或者普通对象映射 成数据库数据信息
为什么需要MyBatis
Mybatis是一个半自动持久层框架,对象关系映射,它能把数据保存在数据库中,也能从数 据库中读取数据,其实传统的JDBC也能实现,但是它的代码重复太多,比如数据库建立连 接,提取数据时封装,但是使用了Mybatis可以减少代码的重复,提高了开发效率。
MyBatis的优点和缺点
优点:
1.简单易学,省略了传统JDBC 50% 的代码量。
2.解除sql与程序代码的耦合,通过DAO层使得业务层和数据访问层的分离,提高了可维护 性,系统设计更加清晰,易维护。
3.把sql语句写在xml便于管理和优化,不会对程序或数据库有任何影响。
缺点:
1.编写SQL语句的工作量很大。
2.SQL语句依赖于数据库,导致数据库移植性差。
什么是持久层:
持久层是把数据保存在数据库或者是保存长时间的设备中(如硬盘)
为什么需要持久层
因为数据保存在内存中可能会断电,这样会数据丢失,所以把数据保存在持久化的设备上
MyBatis重要概念
Mapper配置:
基于XML的Mapper配置文件实现,现在可以用注解的方式或者MyBatis提供 的API来实现
Mapper接口:
自定义的一个数据操作接口,类似于Dao接口,早期我们需要自定义实现,现在MyBatis会为Mapper接口创建动态代理对象。
Executor(执行器):
MyBatis中所有的Mapper语句的执行都是通过Executor进行的,Executor是MyB的一个核心接口
SQLSession:
MyBatis关键对象,是执行持久化操作的独享,类似于JDBCdConnection,SQLSession对象,完全包含了所有执行SQL操作的方法,它的底层封装了JDBC连接,可以使用SqlSession实例来执行被映射的SQL语句。
SqlsessionFactory:
MyBatis关键对象,它是单个数据库映射关系经过编译后的内存镜像。SqlSessionFactory对象的实例通过SQLSessionFactoryBuilder对象类会的,而SQLSessionFactoryBuilder则从XML配置文件或一个预先预定的Configuration的实例构建
MyBatis工作流程
- 首先先假装Mapper配置的SQL映射文件,或者注解和原始映射。
- 创建会话工厂,MyBatis通过读取配置文件的信息来构造出会话工厂(SqlsessionFactory)
- 创建会话,根据会话工厂,MyBatis可以通过它来创建会话对象(SQLSession),会话对象是一个接口,该接口中包含了对数据库操作的增、删、改、查方法
- 创建执行器,因为会话对象本身不能直接操作数据库,所以它使用了一个叫做数据库执行器的接口来帮它执行操作
- 封装SQL对象,执行器将待处理的SQL信息封装到一个对象中(MappedStatement),该对象包括SQL语句,输入参数映射信息和输出结果映射信息
- 操作数据库,拥有了执行器和SQL信息封装对象就使用它们来访问数据库了,最后再返回操作结果,结束流程。