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)

构建SqlSessionFactory 的过程的更多相关文章

  1. MyBatis框架原理1:构建SqlSessionFactory的过程

    SqlSessionFactoryBuilder 首先创建了一个SqlSessionFactoryBuilder对象,然后调用该对象的build方法加载全局XML配置的流文件构建出一个SqlSessi ...

  2. 从底层源码浅析Mybatis的SqlSessionFactory初始化过程

    目录 搭建源码环境 POM依赖 测试SQL Mybatis全局配置文件 UserMapper接口 UserMapper配置 User实体 Main方法 快速进入Debug跟踪 源码分析准备 源码分析 ...

  3. mybatis源码探索笔记-1(构建SqlSessionFactory)

    前言 mybatis是目前进行java开发 dao层较为流行的框架,其较为轻量级的特性,避免了类似hibernate的重量级封装.同时将sql的查询与与实现分离,实现了sql的解耦.学习成本较hibe ...

  4. Java框架篇---Mybatis 构建SqlSessionFactory

    从 XML 中构建 SqlSessionFactory 基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory 的实例可以通过 ...

  5. 两种方式(xml+代码)构建SqlSessionFactory+完整实现

    首先创建类.接口.数据库: entity包下Admin类: package com.wbg.springJavaConfig.entity; public class Admin { private ...

  6. (六)mybatis之构建SqlSessionFactory

    构建SqlSessionFactory 每个mybatis应用都是以SqlSessionFactory的实例为中心的.SqlSessionFactory的实例可以通过SqlSessionFactory ...

  7. 关于React前端构建的一般过程 - 理论篇

    概要 本文以个人阅读实践经验归纳前端架构构建过程,以Step by Step方式说明创建一个前端项目的过程.并会对每个阶段所使用的技术进行可替代分析,如Express替换Hapi或者Koa的优缺点分析 ...

  8. mybatis学习(一)不使用 XML 构建 SqlSessionFactory

    如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <dependency> <groupId>org.mybatis&l ...

  9. Python程序包的构建和发布过程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

随机推荐

  1. ubuntu systemtap-sdt-dev

    http://kr.archive.ubuntu.com/ubuntu/pool/universe/s/systemtap/systemtap-sdt-dev_3.0-7_amd64.deb

  2. IIS发布站点错误收集

    转载:http://www.cnblogs.com/hangwei/p/4249406.html 本文主要收集IIS在发布站点过程中遇到的错误,并提供解决办法.并亲测可行.如果您也在使用IIS发布站点 ...

  3. CAS3.5.x(x>1)支持OAuth2 server

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. 使用WCF测试客户端 z

    http://blog.csdn.net/u013036274/article/details/50570989 [是什么] WCF测试客户端(WCF Test Client)是一个用来测试WCF服务 ...

  5. 判断浏览器内核JS代码

    <script type="text/javascript"> var Sys = {}; var ua = navigator.userAgent.toLowerCa ...

  6. Python学习(七)面向对象 ——封装

    Python 类的封装 承接上一节,学了Student类的定义及实例化,每个实例都拥有各自的name和score.现在若需要打印一个学生的成绩,可定义函数 print_score() 该函数为类外的函 ...

  7. Nodejs安装使用,以及不错的Nodejs或者JS资料整理

    先按照这个教程来学习:Node.js教程 - 菜鸟教程网 在mac上使用brew安装了nodejs,中间还是用到了先下载到cache目录的方法. 但是后来发现这样按照的node,没有安装npm. 找到 ...

  8. C#高级编程五十七天----位数组

    位数组 假设须要处理非常多位,就能够使用BitArray类和BitVector32.BitArray位于命名空间System.Collections中. BitVector32位于命名空间System ...

  9. mysql 下 计算 两点 经纬度 之间的距离

    公式如下,单位米: 第一点经纬度:lng1 lat1 第二点经纬度:lng2 lat2 round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2* ...

  10. 怎样获取shell函数的返回值及shell命令的返回值?

    1.获取shell函数调用的返回值: #!/bin/sh info() { cat jlb.sh } res=`info` echo "state: "$? echo " ...