菜鸟对SSM框架的理解(二)

MyBatis框架的理解

在我上学的时候,对mybatis的理解就是增强的JDBC,它是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
为什么要使用mybatis框架?简单的说一下mybatis相对jdbc的优势:
1.mybatis是把连接数据库的信息都是写在配置文件中,因此不存在硬编码问题,方便后期维护。
2.mybatis执行的sql语句都是通过配置文件进行配置,不需要写在java代码中。
3.mybatis的连接池管理、缓存管理等让连接数据库和查询数据效率更高。
4.很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持,而JDBC提供了可扩展性,所以只要这个数据库有针对Java的jar包就可以就可以与MyBatis兼容),开发人员不需要考虑数据库的差异性。
mybatis通过xml或注解进行配置,将java对象与sql语句中的参数自动映射生成最终执行的sql语句,并将sql语句执行结果自动映射成java对象,返回给业务层(service)应用。
mybatis的原理和流程:
mybatis流程分为4步:
1.返回创建SqlSessionFactory对象
2.返回SqlSession的实现类DefaultSqlSession对象
3.返回一个MapperProxy的代理对象
4.执行CRUD流程
原理:
1.<span style="color:#ab4642">获取sqlSessionFactory对象</span>根据配置文件(全局,sql映射)初始化出Configuration对象解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSession; 注意:MappedStatement:代表一个增删改查的详细信息
2.获取sqlSession对象:返回一个DefaultSQlSession对象,包含Executor和Configuration; 这一步会创建Executor对象;
Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
3.<span style="color:#ab4642">获取接口的代理对象(MapperProxy):</span>DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy;
使用MapperProxyFactory创建一个MapperProxy的代理对象代理对象里面包含了,DefaultSqlSession(Executor)
4<span style="color:#ab4642">执行增删改查方法:</span>
(1)创建一个StatementHandler对象(同时也会创建ParameterHandler和ResultSetHandler)
  (2)   调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler来给sql设置参数
  (3)   调用StatementHandler的增删改查方法
(4) ResultSetHandler封装结果
 以上是我个人对MyBatis框架的理解,欢迎各位大佬指点一下我这个菜鸟!




暂无评论