MyBatis配置介绍

configuration结构

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

属性properties

通过 properties 配置,我们可以将一些重要的配置属性抽离到其它的 .properties 文件。

比如,dataSource 中的数据库 url、用户名和密码,我们可以单独以 datasource.properties 文件来存储,然后在 mybatis-config.xml 文件中导入使用。

在 resources 目录下新建 datasource.properties 文件,并填入以下内容:

url=jdbc:mysql://localhost:3306/imooc?useSSL=false
username=root
password=123456

然后在 mybatis-config.xml 文件中通过 properties 配置来引入 datasource.properties 文件:

<?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>
  <!--  引入datasource.properties  -->
  <properties resource="datasource.properties"/>
  <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="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

通过 properties 中的 resource 属性引入 datasource.properties 后,我们就可以使用占位符的方式去动态替换配置,如 ${url},表示从 datasource.properties 文件中取出 url 项并填充在此处。

它们在目录中的位置如下:

src/main/resources
├── datasource.properties
├── mybatis-config.xml

设置setting

Untitled

当使用它们时,你只需要在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>
  <settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
  </settings>
</configuration>

别名typeAliases

MyBatis 在指定 Java 类时需要使用到类的全路径,如 com.imooc.mybatis.model.Blog,typeAliases 可以为全路径定义一个别名,这样就能减少一定的重复工作。

例如,将 com.imooc.mybatis.model.Blog 的别名定义为 Blog:

<?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>
  <typeAliases>
    <typeAlias type="com.imooc.mybatis.model.Blog" alias="Blog"/>
  </typeAliases>
</configuration>

MyBatis 还支持为一个包下所有类定义别名:

<?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>
  <typeAliases>
    <package name="com.imooc.mybatis.model"/>
  </typeAliases>
</configuration>

这样在 com.imooc.mybatis.model 包中的所有类都有了别名,每个类的别名都是其类的名称首字母小写,如 Author 类的别名为 author。

类处理器typeHandlers

typeHandler

对象工厂objectFactory

MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)来完成。MyBatis 默认的对象工厂仅仅只是实例化目标类,我们可以自定义一个对象工厂类来覆盖默认的对象工厂。

配置如下:

<?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>
  <objectFactory type="org.mybatis.example.ExampleObjectFactory"/>
</configuration>

绝大多数情况下,这个操作都是极其危险的,改变了 MyBatis 默认的对象创建行为可能会带来一定的兼容错误,所以我们不做过多介绍,如果你确实需要它,可以查阅相关的资料。

插件 plugins

环境配置 environment

环境配置是最为复杂的一项配置,MyBatis 提供了多环境配置机制,例如:开发环境和生产环境上的数据库配置就大概率不一样。

每个 environment 都有一个唯一的 id 字段,且 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="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/imooc?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

在每个 environment 下又有两个子配置项,它们分别负责管理事务和数据源

事务管理器 transactionManager

在 xml 文件中对应 <transactionManager type="JDBC"/>,其中 type 属性对应了事务管理器的两种类型,分别是JDBC和MANAGED。

  • JDBC :直接使用了 JDBC 的提交和回滚机制。
  • MANAGED:让容器来管理事务的整个生命周期,例如 spring 容器。

如果你使用 spring 作为容器,那么 transactionManager 会被自动配置且可用。

数据源dataSource

在 xml 文件中对应<dataSource type="POOLED">,其中 type 属性代表了数据源的类型,可选的有三种类型,如下:

  • UNPOOLED:非池化数据源,每次使用时打开,结束后关闭,不推荐。
  • POOLED:池化数据源,连接池管理连接,推荐。
  • JNDI:在 EJB 这类容器中使用,几乎不用。

数据库厂商表识 databaseIdProvider

映射器 mappers

通过 mappers 配置,我们可以指定所对应 SQL 映射文件,这样 MyBatis 才能找到另一部分的 SQL 配置文件。

mappers 可以包含多个 mapper,mapper 的加载共有 4 种方式。

相对类路径

通过 resource 属性指定 mapper .xml 文件所对应的类路径。

<mappers>
  <mapper resource="com/imooc/mybatis/mapper/UserMapper.xml"/>
</mappers>

URL路径

通过url属性指定mapper.xml文件所对应的文件路径

<mappers>
  <mapper url="file:///mapper/UserMapper.xml"/>
</mappers>

类路径

通过 class 属性指定 mapper 类所对应的类路径。

<mappers>
  <mapper class="com.imooc.mybatis.mapper.UserMapper"/>
</mappers>

包路径

通过制定包路径,将包中的所有接口类自动扫描为 mapper。

<mappers>
  <package name="com.imooc.mybatis.mapper"/>
</mappers>

小结

  • MyBatis 的配置是比较多的,本小节列举了一些常用且重要的配置,如果你还不满足,可以阅读这里的官方配置文档
  • MyBatis 的另一部分 SQL 配置虽然分散在了包中,但通过 mappers 这个中间桥梁,二者又紧密的结合在一起了。
  • 在真实的开发中,会有专门的类库来提供这些配置,但你需要了解它们,以便在需要时迅速作出反应。
posted @ 2020-08-01 09:08  柒丶月  阅读(144)  评论(0编辑  收藏  举报