MyBatis–SqlSessionFactory概述及创建方式「建议收藏」

MyBatis–SqlSessionFactory概述及创建方式「建议收藏」SqlSessionFactory概述使用MyBatis首先是使用配置或者代码去生产SqlSessionFactory,而MyBatis提供了构造器SqlSessionFactoryBuilder。MyBatis提供了一个类org.apache.ibatis.session.Configuration作为引导,采用的是Builder模式。具体的分步则是在Configurat…

大家好,又见面了,我是你们的朋友全栈君。

SqlSessionFactory概述

使用 MyBatis 首先是使用配置或者代码去生产 SqlSessionFactory,而 MyBatis 提供了构造器 SqlSessionFactoryBuilder。

MyBatis提供了一个类org.apache.ibatis.session.Configuration 作为引导,采用的是 Builder 模式。具体的分步则是在 Configuration 类里面完成的。

在 MyBatis 中,既可以通过读取配置的 XML 文件的形式生成 SqlSessionFactory,也可以通过 Java 代码的形式去生成 SqlSessionFactory。

推荐采用 XML 的形式,因为代码的方式在需要修改的时候会比较麻烦。当配置了 XML 或者提供代码后,MyBatis 会读取配置文件,通过 Configuration 类对象构建整个 MyBatis 的上下文。

注意: SqlSessionFactory 是一个接口,在 MyBatis 中它存在两个实现类:SqlSessionManager 和 DefaultSqlSessionFactory。

一般而言,具体是由 DefaultSqlSessionFactory 去实现的,而 SqlSessionManager 使用在多线程的环境中,它的具体实现依靠 DefaultSqlSessionFactory,它们之间的关系如下图所示:
MyBatis--SqlSessionFactory概述及创建方式「建议收藏」

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,而 SqlSessionFactory 唯一的作用就是生产 MyBatis 的核心接口对象 SqlSession,所以它的责任是唯一的,往往会采用单例模式处理它。

使用 XML 构建 SqlSessionFactory

首先,在 MyBatis 中的 XML 分为两类,一类是基础配置文件,通常只有一个,主要是配置一些最基本的上下文参数和运行环境;另一类是映射文件,它可以配置映射关系、SQL、参数等信息。

<?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><!--别名-->
        <typeAliases alias="user" type="com.mybatis.po.User"/>
    </typeAliases>
    <!-- 数据库环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <!-- MySQL数据库驱动 -->
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <!-- 连接数据库的URL -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="1128" />
            </dataSource>
        </environment>
    </environments>
    <!-- 将mapper文件加入到配置文件中 -->
    <mappers>
        <mapper resource="com/mybatis/mapper/UserMapper.xml" />
    </mappers>
</configuration>
  • <typeAlias> 元素定义了一个别名 user,它代表着 com.mybatis.po.User 这个类。这样定义后,在 MyBatis 上下文中就可以使用别名去代替全限定名了。
  • <environment> 元素的定义,这里描述的是数据库。它里面的 <\transactionManager> 元素是配置事务管理器,这里采用的是 MyBatis 的 JDBC 管理器方式。
  • <dataSource> 元素配置数据库,其中属性 type=“POOLED” 代表采用 MyBatis 内部提供的连接池方式,最后定义一些关于 JDBC 的属性信息。
  • <mapper> 元素代表引入的那些映射器,在谈到映射器时会详细讨论它。

有了基础配置文件,就可以用一段很简短的代码来生成 SqlSessionFactory 了,如下所示:

SqlSessionFactory factory = null;
String resource = "sqlMapConfig.xml";
InputStream is;
try { 
   
    InputStream is = Resources.getResourceAsStream(resource);
    factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) { 
   
    e.printStackTrace();
}

首先读取 sqlMapConfig.xml,然后通过 SqlSessionFactoryBuilder 的 Builder 方法去创建 SqlSessionFactory。整个过程比较简单,而里面的步骤还是比较烦琐的,只是 MyBatis 采用了 Builder 模式为开发者隐藏了这些细节。这样一个 SqlSessionFactory 就被创建出来了。

使用代码创建 SqlSessionFactory

// 数据库连接池信息
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword ("1128");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setDefeultAutoCommit(false);
// 采用 MyBatis 的 JDBC 事务方式
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment ("development", transactionFactory, dataSource);
// 创建 Configuration 对象
Configuration configuration = new Configuration(environment);
// 注册一个 MyBatis 上下文别名
configuration.getTypeAliasRegistry().registerAlias("role", Role.class);
// 加入一个映射器
configuration.addMapper(RoleMapper.class);
//使用 SqlSessionFactoryBuilder 构建 SqlSessionFactory
SqlSessionFactory SqlSessionFactory =
new SqlSessionFactoryBuilder().build(configuration);
return SqlSessionFactory;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141719.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • gg修改器自动点击脚本_gg修改器变速教程

    gg修改器自动点击脚本_gg修改器变速教程源代码:PrivateSubCommand1_Click()Dimbackback=mciSendString&(“CLOSENN”,0,0,0)EndSubPrivateSubCommand2_Click()Dimbackback=mciSendString&(“OPEN”App.Path”\TEST.mid””TYPESEQUENCERALIASNN”,0&,0,…

  • HashMap多线程下发生死循环的原因

    HashMap多线程下发生死循环的原因

  • 89c51单片机流水灯操作

    89c51单片机流水灯操作要用51单片机实现流水灯操作我想是每个初学者学习单片机,了解嵌入式的第一个动手的小实验吧,今天在重新学习的时候遇到了一点小问题,在这里和大家分享一下。要想控制流水灯操作其实是用单片机给每个二极管高低电平来控制灯的亮与不亮。我用的51单片机学习板的二极管的硬件原理图如下图所示板子上电之后,J2是跳线帽,一般是连接上的,再过来是LED1~LED8共8个发光二极管,然后经过电阻连接到51…

  • UVA10375 Choose and divide 质因数分解

    UVA10375 Choose and divide 质因数分解

  • JavaMD5[通俗易懂]

    JavaMD5[通俗易懂]publicclassCalPrivateKey{publicstaticvoidmain(String[]args) {StringappKey=”cee56d5722ea3afbef390e4dd1beda77″;StringappSecret=”010b02dd9b580f116c5352c5ecb7ca92″;St

  • 高级I/O函数之sendfile函数[通俗易懂]

    高级I/O函数之sendfile函数[通俗易懂]sendfile函数在两个文件描述符之间传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,被称为零拷贝。函数定义为:#include&lt;sys/sendfile.h&gt;ssize_tsenfile(intout_fd,intin_fd,off_t*offset,size_tcount);in_fd参数是待读出内容的文件描述符,out…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号