Mybatis框架(三):Mybatis的配置文件详解

一、配置文档的顶层结构

configuration(配置)

二、properties(属性)

properties属性配置有三种方式:

方式一:在 properties 元素体内指定的属性配置数据库参数

配置文件SqlMapConfig.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:可以在标签内部配置连接数据库的信息。也可以通过属性引用外部配置文件信息-->
    <properties>
        <property name="driver" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </properties>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的基本信息 -->
                <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="com/wedu/mybatis07/dao/IUserDao.xml"/>
    </mappers>
</configuration>

方式二:根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件

数据库连接信息jdbc.properties文件 

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

配置文件SqlMapConfig.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>
    <!--resource属性:用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下。-->
    <properties resource="jdbc.properties"/>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的基本信息 -->
                <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="com/wedu/mybatis07/dao/IUserDao.xml"/>
    </mappers>
</configuration>

注意:properties文件中两个不同参数之间的间隔符是“&”不是“&amp;” 。 

 方式三:读取作为方法参数传递的属性

数据库连接信息jdbc.properties文件 

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

 配置文件SqlMapConfig.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="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的基本信息 -->
                <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="com/wedu/mybatis07/dao/IUserDao.xml"/>
    </mappers>
</configuration>

 程序代码方式传递参数

public static SqlSession getSqlSession(){
    SqlSession session = null;
    try {
        // 加载数据库配置文件
        Properties properties = new Properties();
        properties.load(Resources.getResourceAsStream("jdbc.properties"));
        // 加载mybatis的配置文件
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"), properties);
        return sessionFactory.openSession();
    } catch (IOException e) {
        e.printStackTrace();
        throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    }
}

注意:如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:

  • 在 properties 元素体内指定的属性首先被读取。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。 

三、settings(设置)

1、cacheEnabled:二级缓存配置

<!--配置全局变量-->
<settings>
    <!--cacheEnabled:全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。-->
    <setting name="cacheEnabled" value="true"/>
</settings>

2、lazyLoadingEnabled:延迟加载配置

<!--配置全局变量-->
<settings>
    <!--lazyLoadingEnabled:延迟加载的全局开关-->
    <setting name="lazyLoadingEnabled" value="true"/>
</settings>

3、aggressiveLazyLoading:延迟加载配置

<!--配置全局变量-->
<settings>
    <!--aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载-->
    <setting name="aggressiveLazyLoading" value="false"/>
</settings

四、typeAliases(类型别名)

设置别名方式一:使用typeAlias配置别名

<!--配置别名-->
<typeAliases>
    <!--typeAlias用于配置别名。type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就不再区分大小写-->
    <typeAlias type="com.wedu.mybatis07.domain.User" alias="user"/>
</typeAliases>

配置别名的方式二:使用package配置别名

<!--配置别名-->
<typeAliases>
    <!-- 用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写-->
    <package name="com.wedu.mybatis07.domain"/>
</typeAliases>

五、environments(环境配置)

1、配置环境的注意点

  • 默认使用的环境 ID(比如:default="development")。
  • 每个 environment 元素定义的环境 ID(比如:id="development")。
  • 事务管理器的配置(比如:type="JDBC")。
  • 数据源的配置(比如:type="POOLED")。

2、三种数据源类型

  • UNPOOLED: 这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。 
  • POOLED: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
  • JNDI :这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

六、mappers(映射器)

配置映射器的三种方式

方式一:使用相对于类路径的资源引用

<!--配置映射文件的位置-->
<mappers>
    <!-- 使用相对于类路径的资源引用 -->
    <mapper resource="com/wedu/mybatis07/dao/IUserDao.xml"/>
</mappers>

方式二: 使用映射器接口实现类的完全限定类名

<!--配置映射文件的位置-->
<mappers>
    <!-- 使用映射器接口实现类的完全限定类名 -->
    <mapper class="com.wedu.mybatis02.dao.IUserDao"/>
</mappers>

方式三:将包内的映射器接口实现全部注册为映射器

<!-- 配置映射文件的位置 -->
<mappers>
	<!-- 将包内的映射器接口实现全部注册为映射器 -->
	<package name="com.itheima.dao"></package>
</mappers>

注:参照mybatis官方文档:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html

发布了134 篇原创文章 · 获赞 10 · 访问量 7372

猜你喜欢

转载自blog.csdn.net/yu1755128147/article/details/103378605