构建SqlSessionFactory

每个mybatis应用都是以SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。以下是SqlSessionFactory的源码:

我们可以看到,SqlSessionFactory是一个工厂接口,而不是一个实现类。它的任务就是创建SqlSession。SqlSession类似于一个JDBC的Connection对象。

Mybatis提供了两种模式去创建SqlSessionFactory:一种是XML配置的方式;另一种是代码的方式。此处推荐用XML配置的方式,因为这种方式可以避免硬编码,也方便日后配置人员的修改,避免重复编译代码。

Configuration:Mybatis中的Configuration类,将存在于整个Mybatis应用的生命周期中,以便重复读取和运用。我们可以解析一次配置的XML文件保存到Configuration类对象中,方便我们从这个对象中读取配置信息。性能高,单例占用空间小,基本不占用存储空间,而且还可以反复使用。Configuration类对象保存着我们配置在MyBatis中的信息。

SqlSession的实现类:分别是DefaultSessionFactory和SqlSessionManager。

他们之间的关系图是:

1、 使用XML方式构建

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <!-- 定义别名 -->

    <typeAliases>

        <typeAlias alias="user" type="com.entity.User"/>

    </typeAliases>

    <!-- 定义数据库信息,默认使用development数据库构建环境 -->

    <environments default="development">

        <environment id="development">

            <!-- 采用jdbc事务管理 -->

            <transactionManager type="JDBC"/>

            <!-- 配置数据库链接信息 -->

            <dataSource type="POOLED">

                <property name="driver" value="com.mysql.jdbc.Driver"/>

                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>

                <property name="username" value="root"/>

                <property name="password" value=""/>

            </dataSource>

        </environment>

    </environments>

    <!-- 定义映射器 -->

    <mappers>

    <!-- 映射到,pojo的映射文件中去,就像是,输入账号密码正确了,就可以开始操纵数据了 -->

        <mapper resource="com/mapper/userMapper.xml"/>

    </mappers>

</configuration>

上面是一个简易的XML,包含

① 获取数据库连接实例的数据源(DataSource):

<dataSource type="POOLED">

                <property name="driver" value="com.mysql.jdbc.Driver"/>

                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>

                <property name="username" value="root"/>

                <property name="password" value=""/>

 </dataSource>

② 决定事务范围和控制方式的事务管理器(TransactionManager):

<transactionManager type="JDBC"/>

③ 映射器(SQL Mapper):

<mappers>

    <mapper resource="com/mapper/userMapper.xml"/>

</mappers>

也就是说,①这里配置了一个别名叫“user”,它代表“com.entity.User”;②我们配置了环境内容,它默认使用id是development的环境配置,包含的内容有:采用JDBC的事务管理模式、数据库的连接信息和配置映射器。

这里引入了一个XML,它的作用是提供SQL和SQL对POJO的映射规则定义。Mybatis将解析这个XML,来为我们生成映射器。


String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = null;

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

  我们创建了一个XML文件输入流,用SqlSessionFactoryBuilder读取XML的信息来创建SqlSessionFactory的对象。

Mybatis的解析程序会将mybaits-config.xml文件配置的信息解析到Configuration类对象里面去,然后利用SqlSessionFactoryBuilder读取这个对象为我们创建SqlSessionFactory。

2、 使用代码方式构建

首先构建Configuration类对象。然后往对象里面注册我们构建SqlSessionFactory所需要的信息即可。

//构建数据连接池

PooledDataSource dataSource = new PooledDataSource();

dataSource.setDriver("com.mysql.jdbc.Driver");

dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");

dataSource.setUsername("root");

dataSource.setPassword("");

//构建数据库事务方式

TransactionFactory transactionFactory = new JdbcTransactionFactory();

//创建了数据库运行环境

Environment environment = new Environment("development",transactionFactory,dataSource);

//构建Configuration对象

Configuration configuration = new Configuration(environment);

//注册一个Mybatis上下文别名

configuration.getTypeAliasRegistry().registerAlias("user",User.class);

//加入一个映射器

configuration.addMapper(UserMapper.class);

//使用SqlSessionFactoryBuilder构建SqlSessionFactory

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

return sqlSessionFactory;

①   初始化了一个数据库连接池。

②   定义了JDBC的数据库事务管理方式。

③   用数据库连接池和事务管理方式创建了一个数据库运行环境,并命名为development。

④   创建了一个Configuration类对象,并把数据库运行环境注册给它。

⑤   注册一个user的别名。

⑥   加入一个映射器。

⑦   用SqlSessionFactoryBuilder通过Configuration对象创建SqlSessionFactory。

(六)mybatis之构建SqlSessionFactory的更多相关文章

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

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

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

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

  3. 构建SqlSessionFactory 的过程

    1 SqlSessionFactory 的核心功能是创建 SqlSession 接口,而 SqlSessionFactory 是通过 SqlSessionFactoryBuilder 去构建. 构建步 ...

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

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

  5. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  6. 【转载】Gradle学习 第六章:构建脚本基础

    转载地址:http://ask.android-studio.org/?/article/11 6.1. Projects and tasks 项目和任务Everything in Gradle si ...

  7. Docker学习(六)Dockerfile构建自定义镜像

    Docker学习(六)Dockerfile构建自定义镜像 前言 通过前面一篇文章可以知道怎么去使用一个镜像搭建服务,但是,如何构造自己的一个镜像呢,docker提供了dockerfile可以让我们自己 ...

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

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

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

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

随机推荐

  1. 基于粒子群优化的无约束50维Rosenbrock函数求解

    基于粒子群优化的无约束50维Rosenbrock函数求解 一.问题重述 无约束50维的Rosenbrock函数可以描述如下: 其中, 0 要求按PSO算法思想设计一个该问题的求解算法. Rosenbr ...

  2. 3-3 浮点型字面量 & 3-4浮点型案例

    双精度的浮点类型,末尾加d或者D 3-4浮点型案例 如果一个浮点类型的末尾什么也不写 他表示就是一个double类型的.所以这里定义报错了. float f=1234.328; 把一个范围大的数赋值给 ...

  3. UVa 820 Internet Bandwidth (裸板网络流)

    题意:有一个计算机网络,输入节点数n,输入网络流源点和汇点src,des,再输入双向边数m.给出m条边的负载,求最大流. 析:直接上网络流的最大流. 代码如下: #pragma comment(lin ...

  4. DOM学习笔记(一)DOM树

    DOM 定义了访问和操作 HTML 文档的标准方法. HTML 文档中的所有内容都是节点,将 HTML 文档表达为树结构,称为节点树 HTML DOM 树 HTML DOM 是关于如何获取.修改.添加 ...

  5. lightoj1064 【DP求方案】

    题意: n个相同的骰子,问你掷出>=x点数的可能性: 思路: dp[i][j]代表前 i 个骰子掷出 j 点数的方案数; 然后Σdp[n][x]-dp[n][6*n]就好了 卧槽,一开始想的是拆 ...

  6. thinkphp5.0 页面缓存

    在application\config.php里加 //以下为静态缓存配置 'app_debug' => false,//false为开启静态缓存模式 'html_cache_on' => ...

  7. Unity5自动命名Assetbundle并打包

    http://www.shihuanjue.com/?p=57 using UnityEngine; using System.Collections; using UnityEditor; usin ...

  8. 2014-5-16 NOIP模拟赛

    Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...

  9. uoj#269. 【清华集训2016】如何优雅地求和(数论)

    传送门 首先,如果\(f(x)=1\),那么根据二项式定理,有\(Q(f,n,k)=1\) 当\(f(x)=x\)的时候,有\[Q=\sum_{i=0}^ni\times \frac{n!}{i!(n ...

  10. 毕业N年后,请不要像我一样被档案烦死

    目录 一. 提醒大学生:深刻重视档案,避免以后麻烦! 二.说说我因为档案造成的烦心事! 三.说说档案这档子事: 四.档案如此重要,为什么有些人却成了弃档族? 五.档案该怎么操作才能不当"弃档 ...