MyBatis配置-全局配置文件详解

0. 工程搭建

我们还是先来搭建一个新的工程吧,跟之前的区分一下。工程名我们就叫它 mybatis-02-configuration 吧,导入的依赖跟上一章一样,然后把上一章的那些代码原样拷贝下来,我们继续拿来用。

拷贝完成后的工程结构及文件应该是这样的:

6. 工程结构.png

OK ,我们开始学习。

全局配置文件一览

MyBatis 的全局配置文件,自上而下的编写内容如下:

  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
    • environment(环境变量)
      • transactionManager(事务管理器)
      • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

小册不会把这里面所有的内容都讲解,而是只选择一些我们平时开发中使用比较多,以及相对来讲比较重要的配置讲解。

1. properties-属性

properties 属性,它的作用是定义全局配置变量,并且它可以加载外部化的 properties 配置文件。下面我们来简单演示一下 properties 的使用。

1.1 简单使用

借助 IDE ,在 xml 中编写 <properties> 时,下面就会发现只有一个 <property> 标签,而且是标准的 key-value 格式:

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

所以我们可以来试着提取一下下面数据源的几个配置:

    <properties>
        <property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="123456"/>
    </properties>

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

下面的数据源在引用配置时,只需要使用 ${} 的表达式引用即可。

配置之后,重新运行之前留下的那个 MyBatisApplication6 ,发现一切正常,说明这样配置是没有任何问题的。

1.2 加载外部化配置文件

如果仅仅是为了在上面定义 property 的话,那这未免显得有那么一点点鸡肋,我们也没必要把它单独拎出来讲。<properties> 标签是可以直接声明 resource 或者 url 来加载外部化配置文件的。下面我们也简单演示一下。

先把 properties 文件编写出来:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

然后,使用 <properties> 标签把这个 properties 文件加载进来即可:

    <properties resource="jdbc.properties" />

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

是不是比上面的方式简单多了?所以这种写法才是我们平时使用相对比较多的方式。重新运行 MyBatisApplication6 ,程序仍然可以正常运行,说明这样写也是完全没问题的。

注意,resource 或者 url 只能声明一个文件, MyBatisApplication6 ,。如果真的需要一次性加载多个外部化配置文件,下面我们马上会说。

另外还有一点,resource 跟 url 是互斥的,二者只能取其一,如果两个都定义,MyBatis 都没办法初始化,会抛出异常!所以我们只需要声明一个属性即可。

1.3 加载多个外部化配置文件

如果真的需要一次性加载多个外部化配置文件,使用 xml 配置的方式是无法实现的。不过我们可以换一种思路来实现:Properties 这个类是可以加载多个 properties 文件到一个对象中的,所以我们可以基于这个思路来实现。

先来造两个外部化配置文件吧,这次我们把数据源连接的几个属性拆到两个文件中:(越写越感觉奇怪,这例子有点勉强哈,,,)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

然后,全局配置文件中的 <properties> 可以先暂时屏蔽掉了。

最后,我们来试试编程式加载这些 properties 文件:

public class LoadPropertiesApplication {
    
    public static void main(String[] args) throws Exception {
        InputStream xml = Resources.getResourceAsStream("mybatis-config.xml");
        // 使用Properties的API加载这些properties文件
        Properties properties = new Properties();
        properties.load(Resources.getResourceAsStream("jdbc1.properties"));
        properties.load(Resources.getResourceAsStream("jdbc2.properties
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋同学shl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值