MyBatis之配置文件详解(一)

1、配置文件概述

在创建完配置文件时一定要给配置文件添加约束头,约束头相对固定,使用时直接复制即可:

<?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 文件
  • settings: 配置
  • typeAliases: 用于设置类型的别名
  • typeHandlers:类型处理器
  • objectFactory:对象工厂
  • plugins:插件
  • environments:用于配置数据源环境
    • environment:环境变量
      • transactionManager:事务管理器
      • dataSource:数据源
  • databaseIdProvider:数据库厂商标识
  • mappers:用于加载映射器

上面这些元素标签就是整个配置文件中涉及的所有元素!在配置文件中需要按照上述顺序来定义元素标签,可以省略其中某个标签,但是顺序不能改变。

2、properties 元素

properties元素标签用于引入外部文件或者设置变量,在这个标签内定义的属性可以在配置文件引用。

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

在配置文件的其他位置可以使用${name}取值。properties元素还可以引入外部文件:

#我们定义一个 jdbc.properties 资源文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username=root
password=root
<configuration>
    <!--引入外部配置文件:优先使用外部文件-->
    <!-- 引入完成之后,我们就可以通过 propertie 元素进行引用  -->
    <properties resource="jdbc.properties" />
<configuration>

properties元素标签有两个属性:resourceurl,都是用于定义地址。resource定义相对地址文件,url定义绝对地址文件(且必须加上 file:)。

当配置文件中重复定义了某个属性时,MyBatis 定义了读取顺序:

  1. 首先读取在 properties 元素体内指定的属性
  2. 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性
  3. 最后读取作为方法参数传递的属性(Java传值),并覆盖之前读取过的同名属性

我们还可以给属性设置一个默认值,例如:

<properties resource="jdbc.properties">
    <!-- 如果属性 'name' 没有被配置,'username' 属性的值默认为'ut_user' -->
    <property name="name" value="${name:mysql}"/>
</properties>

如果想要使用这种功能必须要开启占位符功能:

<properties resource="jdbc.properties">
  <!-- ... -->
  <!-- 启用占位符 -->
  <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> 
  <!-- 修改默认值的分隔符,将默认的 : 替换成 ?: -->
  <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> 
</properties>

总结一下配置:

<properties resource="jdbc.properties">
    <!-- 定义一个名为 password 的属性 值为 123456 -->
    <!-- 在jdbc.文件中有相同名称的值,所以在之后使用过程中会被覆盖 -->
    <property name="password" value="123456"/>
    <!-- 启用占位符 -->
    <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
    <!-- 修改默认值的分隔符,将默认的 : 替换成 ?: -->
    <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/>
</properties>

3、environments 元素

environments元素用于环境配置,它下面的子元素environment用于具体的配置环境。MyBatis 可以适应多种环境,所以可以配置多个environment

environments元素有一个唯一的一个属性default,用于指定一个默认使用的环境的名称。


environment元素也有一个唯一的一个属性id,用于指定当前环境的名称,它有两个子元素:transactionManagerdataSource。两个属性的具体用法:

  • transactionManager:事务管理器,类型有两种:
    • JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
    • MANAGED:它不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文),默认情况下它会关闭连接。
  • dataSource:配置数据源,可以通过type属性定义连接池,其属性值有三种:
    • UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。

    • POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。

    • JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

实际开发中,我们通常将 environments元素和properties元素一起使用:
在这里插入图片描述

4、typeAliases 元素

typeAliases元素朱用于为 Java 类型设置一个类型别名。 它主要用于映射文件中,降低全限定类名书写。在映射文件中,我们经常会用到resultType属性,这个属性用于定义返回结果的全限定名:

<select id="getUserList" resultType="com.***.User">
        select * from mybatis.user
</select>

如果多个地方使用了 resultType属性,那需要重复定义多次,比较繁琐。所以我们可以在配置文件给 Java 类型设置一个类型别名:

<typeAliases>
    <typeAlias type="com.***.User" alias="User"/>
</typeAliases>

这样就设置了好了一个类型别名,当然也可以在typeAliases元素中定义多个类型别名。将映射文件中全限定名的替换:

<!-- resultType 使用的是类型别名 -->
<select id="getUserList" resultType="User">
        select * from mybatis.user
</select>

typeAliases元素有另外一个package子元素,用于指定一个包名。MyBatis 会在包名下面搜索需要的 Java Bean。因为是自动扫描的,类的别名就是该类名不能去其他别名。

<typeAliases>
     <!-- com.***.pojo 为存放实体类的包名 -->
     <package name="com.***.pojo"/>
</typeAliases>

上述我们这是自定义的类型别名,而 Mybatis 也内置了一些常用属性的别名,都是不区分大小写的:
在这里插入图片描述

5、mappers 映射器

该标签的作用是加载映射文件的,在 MyBatis 中定义完映射文件之后,我们需要在配置文件中加载映射文件, 加载方式有如下几种:

<mappers>
  <!-- 1、使用相对类路径的资源引用 -->
  <mapper resource="com/***/UserMapper.xml"/>
  <!-- 2、使用绝对类路径的资源引用: -->
  <mapper url="file:///var/mappers/CadMapper.xml"/>
</mappers>

除了上述两种方式之外,还有另外的两种方式,这两种方式需要配合注解使用,我们先做了解:

<mappers>
 <!-- 使用映射器接口实现类的完全限定类名 -->
 <mapper class="org.mybatis.builder.AuthorMapper"/>
 <!-- 将包内的映射器接口实现全部注册为映射器 -->
 <package name="com.***.Mapper"/>
</mappers>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值