1 SqlSessionFactory 的核心功能是创建 SqlSession 接口,而 SqlSessionFactory 是通过 SqlSessionFactoryBuilder 去构建。
构建步骤1)XMLConfigBuilder 解析配置的XML文件,读出配置参数,然后将配置数据存放到 Configuration 类中。Mybatis 几乎所有的配置都在 Configuration 类中。
2)使用 Configuration 去创建 SqlSessionFactory ,Mybatis 的 SqlSessionFactory 是一个接口,而不是实现类。mybatis 提供了默认的 SqlSessionFactory 实现类,org.apache.ibatis.session.defaults.DefaultSqlSessionFactory。因此大多数情况下我们不需要自己去创建 SqlSessionFactory 的实现类。
2 构建 Configuration 它的作用如下
- 读入配置文件,包括基础配置的XML 文件和映射器的XML 文件
- 初始化基础配置和重要的类对象,比如Mybatis 别名、映射器、ObjectFactory 和 typeHandler 对象等
- 提工单例,为后续创建 SessionFactory 服务并提供配置参数。
- 执行一些对象方法,初始化一些配置信息
Configuration 对象是单例的,是通过 XMLConfigBuilder 去构建的。
3 映射器的内部组成,是由3部分组成的
- MappedStatement,他保存映射器的节点(select | insert | delete | update),和SQL 语句、缓存、resultMap、parameterType、resultType
- SqlSource,它是提供 BoundSql 对象的地方,他是 MappedStatement 的一个属性
- BoundSql,他是建立 SQL 和参数的地方。3个常用属性:SQL、parameterObject、parameterMappings
对于参数和SQL主要适用对象是 BoundSql 对象。
- parameterObject 是参数本身,我们可以传递POJO、Map、简单对象、@Param等
- 传递简单对象(int/String/float/double),mybatis会将其转换成为包装对象。比如我们传递一个 int 他会把参数转换成 Integer 对象
- 如果传递的是 POJO 或者 Map 那么 parameterObject 就是你传入的 POJO 或者 Map不变。
- 传递多个参数,没有使用 @Param 那么 mybatis会把 parameterObject 变为一个 Map<String, Object> 对象,其键值的关系是按照顺序来的,类似于{"1":p1,"2":p2...,"param1":p1,"param2":p2...},所以在编写SQL的时候可以使用#{param1} 或 #{1} 去引用参数
- 传递多个参数,并使用 @Param 注解, mybatis会把 parameterObject 变为一个 Map<String, Object> 对象,只是把键值换成了 @Param 注解的值。比如,@Param("key1") String p1, @Param("key2") String p2,那么这个 parameterObject 对象就是{"key1":p1,"key2":p2}
4 构建 SqlSessionFactory,有Configuration 对象,构建 SqlSessionFactory 就很方便。
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputstream)