MyBatis连接数据库配置的基本步骤和机制

 更新时间:2024年05月16日 08:42:10   作者:邓磊DL  
MyBatis 是一个流行的持久层框架,它通过使用XML或注解的方式将SQL语句、存储过程和Java方法进行绑定,从而避免了手写大量的JDBC代码和手动设置参数与结果集,本文给大家介绍了MyBatis连接数据库配置的基本步骤和机制,需要的朋友可以参考下

前言

MyBatis 是一个流行的持久层框架,它通过使用XML或注解的方式将SQL语句、存储过程和Java方法进行绑定,从而避免了手写大量的JDBC代码和手动设置参数与结果集。以下是 MyBatis 连接数据库的基本步骤和机制:

MyBatis源码版本:3.5.16

MyBatis-config.xml 示例

<environments default="development">  
    <environment id="development">  
        <transactionManager type="JDBC"/>  
        <dataSource type="POOLED">  
            <property name="driver" value="${db.driver}"/>  
            <property name="url" value="${db.url}"/>  
            <property name="username" value="${db.username}"/>  
            <property name="password" value="${db.password}"/>  
        </dataSource>  
    </environment>  
</environments>

1. 读取配置文件

MyBatis 通过 Resources 类读取配置文件。配置文件通常是 XML 格式,如 mybatis-config.xml

关键代码

String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource)

2. 解析配置文件

SqlSessionFactoryBuilder 使用 XMLConfigBuilder 解析配置文件,将 XML 配置转换为 Java 对象。

关键代码

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

XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);

XMLConfigBuilder 源码片段

private void parseConfiguration(XNode root) {  
  try {  
    // issue #117 先读取属性 
    propertiesElement(root.evalNode("properties"));  
    Properties settings = settingsAsProperties(root.evalNode("settings"));  
    loadCustomVfsImpl(settings);  
    loadCustomLogImpl(settings);  
    typeAliasesElement(root.evalNode("typeAliases"));  
    pluginsElement(root.evalNode("plugins"));  
    objectFactoryElement(root.evalNode("objectFactory"));  
    objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));  
    reflectorFactoryElement(root.evalNode("reflectorFactory"));  
    settingsElement(settings);  
    // read it after objectFactory and objectWrapperFactory issue #631  
    environmentsElement(root.evalNode("environments"));  
    databaseIdProviderElement(root.evalNode("databaseIdProvider"));  
    typeHandlersElement(root.evalNode("typeHandlers"));  
    mappersElement(root.evalNode("mappers"));  
  } catch (Exception e) {  
    throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);  
  }  
}

XMLConfigBuilder解析XML配置,并生成Configuration对象。

3. 创建 SqlSessionFactory

Configuration 对象包含了所有配置信息,包括环境配置、数据源配置等。SqlSessionFactoryBuilder 使用 Configuration 创建 DefaultSqlSessionFactory

关键代码

public SqlSessionFactory build(Configuration config) {  
  return new DefaultSqlSessionFactory(config);  
}

4. 建立数据库连接

DefaultSqlSessionFactory 创建 SqlSession 时,通过 Environment 配置和 DataSource 获取数据库连接。

DefaultSqlSessionFactory 源码片段

public SqlSession openSession() {  
  return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);  
}

openSessionFromDataSource 方法中,DataSource 被用于获取数据库连接。

关键代码

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level,  
    boolean autoCommit) {  
  //环境配置  
  final Environment environment = configuration.getEnvironment();  
  //事务工厂  
  final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);  
  //创建事务  
  Transaction tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);  
  //创建执行器  
  final Executor executor = configuration.newExecutor(tx, execType);  
  //返回SqlSession  
  return new DefaultSqlSession(configuration, executor, autoCommit);
}

5. 数据源配置

DataSource 配置在 mybatis-config.xml 文件中,通过 DataSourceFactory 创建具体的数据源实例。

关键代码

// 获取数据源工厂
String type = context.getStringAttribute("type");  
Properties props = context.getChildrenAsProperties();  
DataSourceFactory factory = (DataSourceFactory) resolveClass(type).getDeclaredConstructor().newInstance();  
factory.setProperties(props);    
// 获取数据源
DataSource dataSource = factory.getDataSource();

总结

MyBatis连接数据库的步骤包括:

  • 读取配置文件:通过 Resources 类读取 XML 文件。
  • 解析配置文件:使用 XMLConfigBuilder 解析 XML,生成 Configuration 对象。
  • 创建 SqlSessionFactory:使用 SqlSessionFactoryBuilderConfiguration 创建 DefaultSqlSessionFactory
  • 建立数据库连接DefaultSqlSessionFactory 创建 SqlSession,使用 DataSource 获取数据库连接。

以上就是MyBatis连接数据库配置的基本步骤和机制的详细内容,更多关于MyBatis连接数据库配置的资料请关注脚本之家其它相关文章!

相关文章

  • Java之Spring注解配置bean实例代码解析

    Java之Spring注解配置bean实例代码解析

    这篇文章主要介绍了Java之Spring注解配置bean实例代码解析,具有一定参考价值,文中还有有关Spring学习的资料下载链接及相关内容推荐,需要的朋友可以了解下。
    2017-09-09
  • Java实现本地文件批量重命名的示例代码

    Java实现本地文件批量重命名的示例代码

    本文主要介绍了Java实现本地文件批量重命名的示例代码,主要步骤为获取指定目录下的所有文件,对每个文件进行修改,将修改后的文件名赋给该文件,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Spring的循环依赖、三级缓存解决方案源码详细解析

    Spring的循环依赖、三级缓存解决方案源码详细解析

    这篇文章主要介绍了Spring的循环依赖、三级缓存解决方案源码详细解析,在Spring中,由于IOC的控制反转,创建对象不再是简单的new出来,而是交给Spring去创建,会经历一系列Bean的生命周期才创建出相应的对象,需要的朋友可以参考下
    2024-01-01
  • Java数据结构之对象的比较

    Java数据结构之对象的比较

    比较对象是面向对象编程语言的一个基本特征,下面这篇文章主要给大家介绍了关于Java数据结构之对象的比较,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • SpringBoot项目整合MybatisPlus并使用SQLite作为数据库的过程

    SpringBoot项目整合MybatisPlus并使用SQLite作为数据库的过程

    SQLite是一个紧凑的库,启用所有功能后,库大小可以小于 750KiB, 具体取决于目标平台和编译器优化设置, 内存使用量和速度之间需要权衡,这篇文章主要介绍了SpringBoot项目整合MybatisPlus并使用SQLite作为数据库,需要的朋友可以参考下
    2024-07-07
  • Java多线程之搞定最后一公里详解

    Java多线程之搞定最后一公里详解

    Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销
    2021-10-10
  • Spring中Feign的调用流程详解

    Spring中Feign的调用流程详解

    这篇文章主要介绍了Spring中Feign的调用流程详解,分析过了创建的代理是FeignInvocationHandler,那我们就打断点,停在它的反射方法上,看看到底做了什么,需要的朋友可以参考下
    2023-11-11
  • Java使用pdfbox实现给pdf文件加图片水印

    Java使用pdfbox实现给pdf文件加图片水印

    有时候需要给pdf加水印,市面上工具都是收费的要会员,还是自食其力吧;尝试过 spire.pdf.free 那个超过10页就不行了!所以本文还是使用了pdfbox,感兴趣的可以了解一下
    2022-11-11
  • mybatis-plus之如何实现in嵌套sql

    mybatis-plus之如何实现in嵌套sql

    这篇文章主要介绍了mybatis-plus之如何实现in嵌套sql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

    Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

    这篇文章主要介绍了Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例,非常具有实用价值,需要的朋友可以参考下
    2017-05-05

最新评论