简介
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.