核心配置文件
官方文档:
plain
https://mybatis.org/mybatis-3/zh_CN/configuration.html
- mybatis-config.xml
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
plain
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
环境配置(environments)
environment(环境变量)
MyBatis 可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
- 这里可以指定默认选项

- 默认使用的环境 ID(比如:default="development")。
- 每个 environment 元素定义的环境 ID(比如:id="development")。
- 事务管理器的配置(比如:type="JDBC")。
- 数据源的配置(比如:type="POOLED")。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。
transactionManager(事务管理器)
- 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
- Mybats默认的事务管理器就是JDBC,连接池:POOLED
dataSource(数据源)
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
- 大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):
属性(properties)
我们可以通过properties属性来实现引用配置文件
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。[db.properties]
- 编辑一个配置文件db.properties
properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username=root
password=123456
- 在mybatis-config.xml引入db.properties外部配置文件
xml
<!--放入最上面,引入外部配置文件-->
<properties resource="db.properties"/>
<!--也可以自定义添加属性,比如外部配置文件并没有username和password-->
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>

- 可以看见环境设置里面的变量不需要再写死了,我们只需要引入外部配置文件
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>
<properties resource="db.properties"/>
<!--环境设置,因为有s代表复数,可以配置多个环境environments-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<!--&相当于原来的&符号进行了转义,因为XML中需要一些转义-->
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--没有给Mapping.XML都需要在Mybatis核心配置文件中注册-->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>

- 可以直接引入外部文件
- 可以在其中增加一些属性配置
- 如果增加的属性配置和外部文件都有同一个字段,优先使用外部文件!
类型别名(typeAliases)
- 类型别名可为 Java 类型设置一个缩写名字。
- 它仅用于 XML 配置,意在降低冗余的全限定类名书写
xml
<typeAliases>
<!--可以给实体类起一个别名-->
<typeAlias type="com.cike.pojo.user" alias="user"/>
</typeAliases>
- 也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean
- 扫描实体类的包,它默认别名是这个类的类名,首字母小写
xml
<typeAliases>
<!--可以给实体类起一个别名-->
<package name="com.cike.pojo"/>
</typeAliases>

通过注解取别名,适用于包扫描
java
@Alias("user1")
public class user {}

下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
| 别名 | 映射的类型 |
|---|---|
| _byte | byte |
| _char (since 3.5.10) | char |
| _character (since 3.5.10) | char |
| _long | long |
| _short | short |
| _int | int |
| _integer | int |
| _double | double |
| _float | float |
| _boolean | boolean |
| string | String |
| byte | Byte |
| char (since 3.5.10) | Character |
| character (since 3.5.10) | Character |
| long | Long |
| short | Short |
| int | Integer |
| integer | Integer |
| double | Double |
| float | Float |
| boolean | Boolean |
| date | Date |
| decimal | BigDecimal |
| bigdecimal | BigDecimal |
| biginteger | BigInteger |
| object | Object |
| date[] | Date[] |
| decimal[] | BigDecimal[] |
| bigdecimal[] | BigDecimal[] |
| biginteger[] | BigInteger[] |
| object[] | Object[] |
| map | Map |
| hashmap | HashMap |
| list | List |
| arraylist | ArrayList |
| collection | Collection |
| iterator | Iterator |
总结:
- 第一种方式可以DIY别名,第二种则需要在实体类进行注解起DIIY别名、否则它扫描包的时候是实体类首字母小写的别名
- 第一种,在实体类比较少的情况下可以使用
- 第二种,尸体了比较多的时候可以使用
设置(settings)
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为
- 要记得:
| logImpl(日志实现)主要这个 | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J(3.5.9 起废弃) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
| --- | --- | --- | --- |
| cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
| lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 <font style="color:rgb(221, 17, 68);background-color:rgb(247, 247, 249);">fetchType</font>
属性来覆盖该项的开关状态。 | true | false | false |
需要了解的:
| 设置名 | 描述 | 有效值 | 默认值 |
|---|---|---|---|
| cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false |
| lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 <font style="color:rgb(221, 17, 68);background-color:rgb(247, 247, 249);">fetchType</font> 属性来覆盖该项的开关状态。 |
true | false |
| useColumnLabel | 使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。 | true | false |
| useGeneratedKeys (自动生成主键) | 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 | true | false |
| mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 | true | false |
| logImpl(日志实现) | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J(3.5.9 起废弃) |
更多的看一看官网:
plain
https://mybatis.org/mybatis-3/zh_CN/configuration.html#settings
一个配置完整的 settings 元素的示例如下:
xml
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="safeResultHandlerEnabled" value="true"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
<setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver"/>
<setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumTypeHandler"/>
<setting name="callSettersOnNulls" value="false"/>
<setting name="returnInstanceForEmptyRow" value="false"/>
<setting name="logPrefix" value="exampleLogPreFix_"/>
<setting name="logImpl" value="SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING"/>
<setting name="proxyFactory" value="CGLIB | JAVASSIST"/>
<setting name="vfsImpl" value="org.mybatis.example.YourselfVfsImpl"/>
<setting name="useActualParamName" value="true"/>
<setting name="configurationFactory" value="org.mybatis.example.ConfigurationFactory"/>
</settings>
其他配置
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- 插件(plugins)
- Mybatis-generator-core
- Mybatis-Plus
- 通用mapper
映射器
MapperRegistry:注册绑定我们的Mapper文件
一共有四种方式:
- 使用相对于类路径的资源引用
- 使用映射器接口实现类的完全限定类名
- 将包内的映射器接口全部注册为映射器
- 使用完全限定资源定位符(URL)"不推荐使用"
方式一:使用resource绑定注册【推荐使用】
xml
<!--使用相对于类路径的资源引用-->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
方式二:使用class绑定注册
xml
<mappers>
<!--使用映射器接口实现类的完全限定类名-->
<mapper class="com.cike.dao.UserMapper"/>
</mappers>
注意点:
- 接口和它的Mapper配置文件必须同名!
- 接口和它的Mapper配置文件必须在同一个包下!

方式三:使用扫描包进行注入绑定
注意点:
- 接口和它的Mapper配置文件必须同名!
- 接口和它的Mapper配置文件必须在同一个包下!
xml
<mappers>
<!--将包内的映射器接口全部注册为映射器 -->
<package name="com.cike.dao"/>
</mappers>