简介
Mybatis框架的核心组成部分:mybatis-config.xml、SqlSession、Executor、StatementHandler、ResultSetHandler。
原理
JDBC数据库操作
流程: 建立连接(数据源配置信息)->传递sql(sql语句)->传递参数(sql参数)->sql执行->处理结果(映射关系)->关闭连接。
ORM框架的本质是抽取共性、封装逻辑。
括号中代表变化的部分。
- 数据源配置信息:配置文件,在启动时从配置文件中读取并建立数据源对象。
- Sql语句:配置文件(代码),在启动时抽取解析,以
的形式存储。 - Sql参数:java bean对象,在执行前从对象中抽取。
- 映射关系:配置文件(代码),根据映射关系读取结果集并创建java bean返回。
配置文件
Mybatis的全局配置文件 mybatis-config.xml,配置的内容有:
- properties(属性)
先解析其子节点<property>
属性,再解析resource
属性,后者会覆盖前者。 - settings(全局配置参数)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境集合属性对象)
- environment(环境子属性对象)
- transactionManager(事务管理)
- dataSource(数据源)
- environment(环境子属性对象)
- mappers(映射器)
具体参见:Mybatis3
SqlSession
Mybatis的程序入口是SqlSessionFactoryBuilder
,它的作用是通过mybatis-config.xml
配置文件创建Configuration
对象,然后通过build()
方法创建SqlSessionFactory
对象,而SqlSessionFactory
主要功能是创建SqlSession
对象。
SqlSession
对象的主要功能是完成一次数据库的访问和结果的映射,不是线程安全的。SqlSession
对数据库的操作都是通过Executor
来完成的。
SqlSession
对象的getMapper()
方法,Mybatis会根据传入的接口类型和对应的XML配置文件生成一个代理对象(Mapper对象)。通过这个Mapper对象就可以访问SqlSession
对象,然后执行相应的sql操作。
Executor
Executor
是在调用SqlSessionFactory
的openSession()
过程中被创建的,默认创建的类型是SimpleExecutor
,Executor
对象的主要功能是调用StatementHandler
访问数据库。
|
|
StatementHandler
StatementHandler
是真正访问数据库的地方,在进行sql操作后,会调用ResultSetHandler
处理查询结果。
在解析sql语句时,会先调用ParameterHandler
的setParameters()
方法设置参数,对于每个参数再调用相应的TypeHandler
的setParameter()
去设置。
ResultSetHandler
在对查询结果进行处理时,也会调用TypeHandler
对相应类型的属性进行处理。
实例
PO
|
|
映射文件
|
|
dao接口
Mybatis会根据接口实现相应的代理对象。
配置文件
|
|
测试
|
|
Mybatis和Hibernate
Hibernate:标准的ORM框架,自动生成sql语句,对sql语句进行优化、修改较困难。
Mybatis:专注sql本身,程序员自己维护sql语句,sql修改优化比较方便。
Wiki: Unlike ORM frameworks, MyBatis does not map Java objects to database tables but Java methods to SQL statements.