当前位置: 首页 > news >正文

MyBatis的第三天笔记

4. MyBatis核心配置文件详解

4.1 配置文件结构

MyBatis核心配置文件采用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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
    </mappers>
</configuration>

4.2 核心标签说明

4.2.1 configuration根标签
  • 作为配置文件的根标签
  • 包含所有MyBatis的配置信息
4.2.2 environments标签
<?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>
    <!--默认使用开发环境-->
    <!--<environments default="dev">-->
    <!--默认使用生产环境-->
    <environments default="production">
        <!--开发环境-->
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
        <!--生产环境-->
        <environment id="production">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
    </mappers>
</configuration>
  • 用于配置多个环境,如开发环境、测试环境、生产环境等
  • default属性:指定默认使用的环境ID
  • 可以配置多个environment子标签
4.2.3 environment标签
  • 配置具体的环境信息
  • id属性:环境的唯一标识
  • 主要包含两个子标签:transactionManager和dataSource
4.2.4 transactionManager标签
<transactionManager type="JDBC"/>
<transactionManager type="MANAGED"/>
  • 配置事务管理器
  • type属性可选值:
    • JDBC:使用JDBC原生的事务管理机制
      • 开启事务:conn.setAutoCommit(false);
      • 处理业务…
      • 提交事务:conn.commit();
    • MANAGED:将事务管理交给其他容器(如Spring),交给容器去管理事务,但目前使用的是本地程序,没有容器的支持,当mybatis找不到容器的支持时:没有事务。也就是说只要执行一条DML语句,则提交一次
4.2.5 dataSource标签
  • 配置数据源
<dataSource type="UNPOOLED">
<dataSource type="POOLED">
<dataSource type="JNDI">
  • type属性可选值:
    • UNPOOLED:不使用连接池
    • POOLED:使用连接池
    • JNDI:使用JNDI查找数据源
UNPOOLED数据源

可配置的属性:

  • driver:JDBC驱动的类名
  • url:数据库的JDBC URL
  • username:数据库用户名
  • password:数据库密码
  • defaultTransactionIsolationLevel:默认的连接事务隔离级别
  • defaultNetworkTimeout:默认的网络超时时间
POOLED数据源

除了包含UNPOOLED的所有属性外,还可以配置:

  • poolMaximumActiveConnections:最大活动连接数。 默认值10
  • poolMaximumIdleConnections:最大空闲连接数。默认值5
  • poolMaximumCheckoutTime:强行回归池的时间。默认值20秒。
  • poolTimeToWait:当无法获取到空闲连接时,每隔20秒打印一次日志,避免因代码配置有误,导致傻等。(时长是可以配置的)
JNDI数据源

JNDI的方式:表示对接JNDI服务器中的连接池。这种方式给了我们可以使用第三方连接池的接口。如果想使用dbcp、c3p0、druid(德鲁伊)等,需要使用这种方式。
可配置的属性:

  • initial_context:用于在InitialContext中寻找上下文(可选)
  • data_source:引用数据源实例的上下文路径
4.2.6 mappers标签
  • 配置SQL映射文件
  • 可以包含多个mapper子标签
  • mapper标签的配置方式:
    • resource属性:使用相对于类路径的资源引用
    • url属性:使用完全限定资源定位符
4.2.7 properties

mybatis提供了更加灵活的配置,连接数据库的信息可以单独写到一个属性资源文件中,假设在类的根路径下创建jdbc.properties文件,配置如下:

jdbc.driver=数据库连接驱动
jdbc.url=数据库名  
jdbc.username=数据库用户名
jdbc.password=数据库密码

在mybatis-config.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>

    <!--引入外部属性资源文件-->
    <properties resource="jdbc.properties"/>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--${key}使用-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
    </mappers>
</configuration>

4.3 最佳实践

  1. 环境配置
<environments default="development">
    <!-- 开发环境 -->
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <!-- 开发环境配置 -->
        </dataSource>
    </environment>
    <!-- 生产环境 -->
    <environment id="production">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <!-- 生产环境配置 -->
        </dataSource>
    </environment>
</environments>
  1. 使用指定环境
// 使用默认环境
SqlSessionFactory factory = builder.build(inputStream);
// 使用指定环境
SqlSessionFactory factory = builder.build(inputStream, "development");
  1. 事务管理器选择
  • 单独使用MyBatis时,使用JDBC类型
  • 与Spring集成时,使用MANAGED类型
  1. 数据源选择
  • 一般情况下使用POOLED类型
  • 在Web应用中可以考虑使用JNDI类型
  • 只有特殊需求时才使用UNPOOLED类

相关文章:

  • VSCode使用Remote-SSH连接服务器时启动失败glibc不符合
  • Java学习——day23(反射的对象创建与方法调用)
  • Text-to-SQL技术深度解析:从理论突破到工程实践
  • Jmeter+Jenkins+Ant自动化持续集成环境搭建
  • [ctfshow web入门] web7
  • PyQt6实例_A股日数据维护工具_完整项目代码_终结章
  • Gis相关记录备忘录
  • 软件工程第五章习题
  • 15-产品经理-维护需求
  • redis 和 MongoDB都可以存储键值对,并且值可以是复杂json,用完整例子分别展示说明两者在存储json键值对上的使用对比
  • 贪心算法(16)(java)俄罗斯套娃信封问题
  • 从零到一:用Java和Spring Security构建OAuth2授权服务器
  • 【Vue-vue基础知识】学习笔记
  • 强化学习Q-Learning:DQN
  • 17-产品经理-创建发布
  • Golang 项目平滑重启
  • Python小练习系列 Vol.13:用装饰器记录函数执行时间
  • 蓝桥杯2024年第十五届省赛真题-爬山
  • 刺杀大使--bfs还是比dfs快+二分
  • 专题|MATLAB-R语言Logistic逻辑回归增长模型在互联网金融共生及移动通信客户流失分析实例合集
  • 上海黄浦:新婚夫妻来登记可“摇号”定制无人机表演,每周三对
  • 【社论】鸿蒙破壁,向最难处攻坚
  • 可显著提高公交出行率,山东、浙江多县常态化实施城区公交免费
  • 东南亚五大经济体一季度增长放缓,美国关税大棒或阻全年增长
  • 去年中企海外新增风电装机量5.4GW,亚太区域占比过半
  • 俄乌上周在土耳其直接谈判,外交部回应