构建SqlSessionFactory 的过程

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)
原文地址:https://www.cnblogs.com/zhaopengcheng/p/7149708.html