mybatis核心配置信息必须严格按照格式标准进行配置
配置名称 | 配置含义 | 配置简介 |
---|---|---|
configuration | 包裹所有配置文件 | 整个配置文件的顶级标签 |
properties | 属性 | 该标签可以引入外部配置的属性,也可以自己配置。该配置标签所在的同一个配置文件均可引用此配置中的属性 |
setting | 全局配置参数 | 用来配置一些改变运行时行为的信息,例如是否使用缓存机制,是否使用延迟加载,是否使用错误机制等。并且可以设置最大并发请求数量、最大并发事务数量,以及是否启动命名空间等 |
typeAliases | 类型别名 | 用来设置一些别名来代替Java的长类型声明(如java.lang.int变成int),减少配置编码的冗余 |
typeHandlers | 类型处理器 | 将SQL中返回的数据库类型转换成相应Java类型的处理器配置 |
objectFactory | 对象工厂 | 实例化目标类的工厂类配置 |
plugins | 插件 | 可以通过插件修改Mybatis的核心行为,例如对语句执行的某一点进行拦截调用 |
environments | 环境集合属性变量 | 数据库环境信息的集合。在一个配置文件中,可以有多种数据库环境集合,这样可以使Mybatis将SQL同时映射至多个数据库 |
environment | 环境子属性对象 | 数据库环境配置的详细配置 |
transactionManager | 事务管理 | 指定Mybatis的事务管理器 |
dataSource | 数据源 | 使用其中的type指定数据源的连接类型,在标签对中可以使用property属性指定数据库连接池的其他信息 |
mappers | 映射器 | 配置SQL映射文件的位置,告知MyBatis去哪里加载SQL映射配置 |
<?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>
<!-- 1.properties属性引入外部配置文件 -->
<properties resource="com/mybatis/example/config.properties">
<!-- property里面的属性全局均可使用 -->
<property name="username" value="root"/>
<property name="pasword" value="123"/>
</properties>
<!--2. 全局配置参数 -->
<settings>
<!-- 设置是否启动缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 设置是否启用懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<!-- 3.别名设置 -->
<typeAliases>
<typeAlias type="com.mybatis.domain.User" alias="user"/>
<typeAlias type="com.mybatis.domain.Customer" alias="customer"/>
</typeAliases>
<!-- 4.类型转换器 -->
<typeHandlers>
<!-- 一个简单类型转换器 -->
<typeHandler handler="com.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>
<!-- 5.对象工厂 -->
<objectFactory type="com.mybatis.example.ExampleObjectFactory">
<!-- 对象工厂注入的参数 -->
<property name="someProperty" value="100"/>
</objectFactory>
<!-- 6.插件 -->
<plugins>
<plugin interceptor="com.mybatis.example.ExamplePlugin">
<property name="someProperty" value="100"/>
</plugin>
</plugins>
<!-- 7.environments数据库环境配置 -->
<!-- 和Spring整合后environments配置将配废除 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 8.加载映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml" />
<mapper resource="com/mybatis/mapper/CustomerMapper.xml" />
</mappers>
</configuration>
各个配置参数的详解:
properties参数用来引入一个外部属性文件:
引入一个config.properties文件
<!-- 1.properties属性引入外部配置文件 -->
<properties resource="com/mybatis/example/config.properties">
<!-- property里面的属性全局均可使用 -->
<property name="username" value="root"/>
<property name="pasword" value="123"/>
</properties>
config.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///ssm
username=root
password=123
properties标签引入它避免了数据库信息的“硬编码”,当需要连接其他数据库的时候,只需要连接其他数据库时,只需要更改数据库的配置文件即可。
当propertieszhong you property子标签时,并且子标签配置了引的属性文件的属性值,这时取的就是property子标签中的value值。
在properties变迁中引入的配置文件信息以及property子标签中的配置的信息,在其他标签中可以使用""占位符的方式来获取,在"{}"占位符的方式来获取,在""占位符的方式来获取,在"{}"中填写引入的配置文件中参数的name或者property子标签的name。
例如:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
setting配置影响Mybatis框架在运行时的一些行为,在这就不详细介绍了,只需大致了解setting中包含了哪些设置,然后在需要用的时候,查看setting的文档即可。
setting配置常用来实现缓存、延迟加载和分页设置。
Setting配置的样例:
https://blog.youkuaiyun.com/qq_37745636/article/details/98953127
typeAliases配置
在MyBatis的SQL映射配置文件中,常使用parameterType、resultType之类的参数设置SQL语句的输入/输出参数,一般参数都是一个java类型的数据,有基本数据类型或引用数据类型,单数一般都要声明该类型的全路径名称,例如“java.lang.String”、“com.mybatis.domain.User”。
而通过在typeAliases配置中声明该类的全路径名称,然后给它一个别名,在SQL映射配置文件中指定输入/输出参数类型时使用别名。
<typeAliases>
<typeAlias type="com.mybatis.domain.User" alias="user"/>
<typeAlias type="com.mybatis.domain.Customer" alias="customer"/>
</typeAliases>
MyBatis还提供了批量定义别名的方法,指定包名即可,程序会为该包下的所有包装类加上别名。定义别名的规范就是对应包装类的类名首字母变成小写。
<typeAliases>
<package name="com.mybatis.domain" />
</typeAliases>
还可以通过注解的方式来实现
@Alias("user")
public class User {
}
Mybatis已经为Java的常见类型默认指定了别名,可以直接使用。
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | java.lang.String |
byte | java.lang.Byte |
long | java.lang.Long |
short | java.lang.Short |
int | java.lang.Integer |
integer | java.lang.Integer |
double | java.lang.Double |
boolean | java.lang.Boolean |
date | java.util.Date |
decimal | java.math.BigDecimal |
bigdecimal | java.math.BigDecimal |
object | java.lang.Object |
map | java.util.Map |
hashmap | java.util.HashMap |
list | java.util.List |
arraylist | java.util.ArrayList |
collection | java.util.Collection |
iterator | java.util.Iterator |
可以从上面发现规律: 基本数据类型的别名是“_”加上基本数据类型的名称,引用数据类型的别名是数据类型的名称首字母小写。
建议:在实体类中定义属性时尽量使用引用数据类型。
在返回值是个List集合的时候,ResultType中还是写返回的list集合中对象的别名。
environments配置环境
<!-- 7.environments数据库环境配置 -->
<!-- 和Spring整合后environments配置将配废除 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
environments中的default属性配置默认的环境,而environment中的id则是这个环境的id。
数据管理器(transactionManager)有两种类型:分别是JDBC和MANAGED。配置为JDBC,相当于直接使用JDBC的提交和回滚设置。配置为MANAGED,则不提交和回滚连接,而是有容器来管理事务的生命周期。
关于数据源(dataSource),在mybatis中有三种内建的数据源类型:分别是“UNPOOLED”、“POOLED”,与“JNDI”。其中UNPLOOED设置每次请求时打开和关闭连接,而POOLED可以设置一个管理数据库连接的资源池,用来合理控制数据库的连接与关闭次数,利用“池”的概念将JDBC连接对象组织起来。而JNDI则配置连接外部数据源的信息。
mappers配置分析
mappers标签下有多个mapper标签,每一个mapper标签中配置的都是一个独立的Mapper映射配置文件的路径。有以下几种配置方式:
第一种,使用相对路径进行配置:
<mappers>
<mapper resource="com/mybatis/mappers/UserMapper.xml" />
</mappers>
第二种,使用绝对路径进行配置:
<mappers>
<mapper url="file:///var/mappers/UserMapper.xml" />
</mappers>
第三种,使用接口信息进行配置:
<mappers>
<mapper class="com.mybatis.mappers.UserMapper" />
</mappers>
第四种,使用接口所在包进行配置:
<mappers>
<mapper class="com.mybatis.mappers" />
</mappers>