构建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)
构建SqlSessionFactory 的过程的更多相关文章
- MyBatis框架原理1:构建SqlSessionFactory的过程
SqlSessionFactoryBuilder 首先创建了一个SqlSessionFactoryBuilder对象,然后调用该对象的build方法加载全局XML配置的流文件构建出一个SqlSessi ...
- 从底层源码浅析Mybatis的SqlSessionFactory初始化过程
目录 搭建源码环境 POM依赖 测试SQL Mybatis全局配置文件 UserMapper接口 UserMapper配置 User实体 Main方法 快速进入Debug跟踪 源码分析准备 源码分析 ...
- mybatis源码探索笔记-1(构建SqlSessionFactory)
前言 mybatis是目前进行java开发 dao层较为流行的框架,其较为轻量级的特性,避免了类似hibernate的重量级封装.同时将sql的查询与与实现分离,实现了sql的解耦.学习成本较hibe ...
- Java框架篇---Mybatis 构建SqlSessionFactory
从 XML 中构建 SqlSessionFactory 基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory 的实例可以通过 ...
- 两种方式(xml+代码)构建SqlSessionFactory+完整实现
首先创建类.接口.数据库: entity包下Admin类: package com.wbg.springJavaConfig.entity; public class Admin { private ...
- (六)mybatis之构建SqlSessionFactory
构建SqlSessionFactory 每个mybatis应用都是以SqlSessionFactory的实例为中心的.SqlSessionFactory的实例可以通过SqlSessionFactory ...
- 关于React前端构建的一般过程 - 理论篇
概要 本文以个人阅读实践经验归纳前端架构构建过程,以Step by Step方式说明创建一个前端项目的过程.并会对每个阶段所使用的技术进行可替代分析,如Express替换Hapi或者Koa的优缺点分析 ...
- mybatis学习(一)不使用 XML 构建 SqlSessionFactory
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <dependency> <groupId>org.mybatis&l ...
- Python程序包的构建和发布过程
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
随机推荐
- cocos3.0使用cocostudio动画帧结合地图对象键值创建精灵动画
内容例如以下: #include "cocos2d.h" #include "cocostudio/CocoStudio.h" //精灵猫和其它精灵的tag t ...
- MySQL在windows系统的安装
原文:https://blog.csdn.net/wokaowokaowokao12345/article/details/76736152 MySQL在windows系统的安装 原创 2017年08 ...
- iOS开源项目:DYNavigationController
DYNavigationController是一个实现了左右滑动导航的项目. https://github.com/dyang/DYNavigationController 首先用之前的跟视图初始化D ...
- iOS: xcode打包上传iTunes失败,iTunes Store operation failed,this action can not complete .try again
通过xcode点击“upload to app store”上传到itunes,结果一直提示“itunes store operation failed” 原因:网速的问题,我之前也遇到过,网速好的时 ...
- C#的四个基本技巧
1.如果可能尽量使用接口来编程 .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类.然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更加稳定.可用 ...
- MS SQL 中判断 数据库, 存储过程,表,临时表,视图,函数,用户,用户创建对象 等是否存在 SQL脚本
摘自: http://www.111cn.net/database/mssqlserver/39107.htm sql判断存储过程是否存在 判断数据库教程是否存在 Sql代码 if exists (s ...
- PHP超过三十秒怎么办Maximum execution time of 30 seconds exceeded
1 如图所示, Maximum execution time of 30 seconds exceeded 2 在php.ini文件中查找"max_execution_time"把 ...
- android源代码在线阅读
http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/
- octopress github 换电脑 使用
octopress github 换电脑 使用
- 〖Linux〗ltib的使用帮助
scue@Link:/home/work/ltib$ ./ltib --help This script is used to manage the building of BSPs with com ...