Skip to main content

Mybatis配置文件

按照 MyBatis 的规定,<configuration> 元素中的子元素应该按照以下顺序排列:

<configuration>
<!-- 可选的属性元素,例如properties,用于配置 MyBatis 应用程序级属性 -->
<properties></properties>
<!-- 设置元素,包含 MyBatis 基础设置 -->
<settings></settings>
<!-- TypeAliases 类型别名,用于给Java对象起别名 -->
<typeAliases></typeAliases>
<!-- TypeHandlers 类型处理器,用于处理Java与jdbc类型的转换 -->
<typeHandlers></typeHandlers>
<!-- 对象工厂,用于创建结果对象 -->
<objectFactory></objectFactory>
<!-- 对象Wrapper类工厂,用于创建结果对象的包装器 -->
<objectWrapperFactory></objectWrapperFactory>
<!-- 反射器工厂,用于创建对象元数据解析器 -->
<reflectorFactory></reflectorFactory>
<!-- 插件,用于拦截MyBatis底层的JDBC操作 -->
<plugins></plugins>
<!-- 环境配置,包含事务管理器和数据源 -->
<environments></environments>
<!-- 数据库厂商标识,用于实现多厂商支持 -->
<databaseIdProvider></databaseIdProvider>
<!-- 映射器,用于配置执行的 SQL 语句 -->
<mappers></mappers>
</configuration>

例如:

<?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>
<property name="jdbcTypeForNull" value="NULL" />
<property name="logImpl" value="LOG4J" />
</properties>

<!-- 设置元素 -->
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<!-- ... 其他设置 ... -->
</settings>

<!-- TypeAliases 类型别名 -->
<typeAliases>
<typeAlias type="com.example.model.User" alias="user" />
<!-- ... 其他类型别名 ... -->
</typeAliases>

<!-- TypeHandlers 类型处理器 -->
<typeHandlers>
<typeHandler jdbcType="VARCHAR" javaType="com.example.model.Gender" handler="com.example.typehandler.GenderTypeHandler" />
<!-- ... 其他类型处理器 ... -->
</typeHandlers>

<!-- 对象工厂 -->
<objectFactory type="com.example.factory.MyObjectFactory" />

<!-- 对象Wrapper类工厂 -->
<objectWrapperFactory type="com.example.factory.MyObjectWrapperFactory" />

<!-- 反射器工厂 -->
<reflectorFactory type="com.example.factory.MyReflectorFactory" />

<!-- 插件 -->
<plugins>
<plugin interceptor="com.example.plugins.MyPlugin">
<property name="prop1" value="value1" />
<!-- ... 其他属性 ... -->
</plugin>
<!-- ... 其他插件 ... -->
</plugins>

<!-- 环境配置 -->
<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/testdb?useSSL=false" />
<property name="username" value="root" />
<property name="password" value="password" />
</dataSource>
</environment>
<!-- ... 其他环境 ... -->
</environments>

<!-- 数据库厂商标识 -->
<databaseIdProvider type="DB_VENDOR">
<property name="Oracle" value="oracle" />
<property name="MySQL" value="mysql" />
<!-- ... 其他数据库类型 ... -->
</databaseIdProvider>

<!-- 映射器 -->
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml" />
<!-- ... 其他映射器 ... -->
</mappers>

</configuration>

注意,这个配置文件仅供参考,实际项目中应该根据需要添加或删除相应的配置选项。

假设你的 Mapper 接口类为 com.hanami.mapper.MybatisMapper.java,映射文件为 com/hanami/mapper/MybatisMapper.xml,存放在 src/main/resources/mapper 目录下,可以按照以下方式在 MyBatis 的配置文件中配置:

<configuration>
<!-- ... 省略其他配置 ... -->
<mappers>
<!-- 方式一:使用 class 属性指定 Mapper 接口的完全限定名 -->
<mapper class="com.hanami.mapper.MybatisMapper" />

<!-- 方式二:使用 resource 属性指定映射文件所在的相对路径 -->
<mapper resource="mapper/MybatisMapper.xml" />

<!-- 方式三:同时使用 class 和 resource 属性 -->
<mapper class="com.hanami.mapper.MybatisMapper" resource="mapper/MybatisMapper.xml"/>

<!-- 方式四:使用 package 属性扫描指定包及子包下的 Mapper 接口 -->
<package name="com.hanami.mapper" />
</mappers>
</configuration>

mapper配置

假设你的 Mapper 接口类为 com.hanami.mapper.MybatisMapper.java,映射文件为 com/hanami/mapper/MybatisMapper.xml,存放在 src/main/resources/mapper 目录下,可以按照以下方式在 MyBatis 的配置文件中配置:

<configuration>
<!-- ... 省略其他配置 ... -->
<mappers>
<!-- 方式一:使用 class 属性指定 Mapper 接口的完全限定名 -->
<mapper class="com.hanami.mapper.MybatisMapper" />

<!-- 方式二:使用 resource 属性指定映射文件所在的相对路径 -->
<mapper resource="mapper/MybatisMapper.xml" />

<!-- 方式三:同时使用 class 和 resource 属性 -->
<mapper class="com.hanami.mapper.MybatisMapper" resource="mapper/MybatisMapper.xml"/>

<!-- 方式四:使用 package 属性扫描指定包及子包下的 Mapper 接口 -->
<package name="com.hanami.mapper" />
</mappers>
</configuration>

这里使用四种不同的方式来注册 MybatisMapper,分别为:

<configuration>
<!-- ... 省略其他配置 ... -->
<mappers>
<!-- 方式一:使用 class 属性指定 Mapper 接口的完全限定名 -->
<mapper class="com.hanami.mapper.MybatisMapper" />

<!-- 方式二:使用 resource 属性指定映射文件所在的相对路径 -->
<mapper resource="mapper/MybatisMapper.xml" />

<!-- 方式三:同时使用 class 和 resource 属性 -->
<mapper class="com.hanami.mapper.MybatisMapper" resource="mapper/MybatisMapper.xml"/>

<!-- 方式四:使用 package 属性扫描指定包及子包下的 Mapper 接口 -->
<package name="com.hanami.mapper" />
</mappers>
</configuration>
  1. 通过 class 属性注册 MybatisMapper 接口类。
  2. 通过 resource 属性注册 MybatisMapper.xml 映射文件。
  3. 通过 classresource 属性同时注册 MybatisMapper
  4. 通过 package 属性扫描 com.hanami.mapper 包及其子包下的所有 Mapper 接口。

你可以根据实际情况选择最适合你的方式来注册 Mapper 接口。