01主配置文件说明与细节配置
<environments>:环境集标签,就是用于配置数据库的环境,一个environments 中可以包含多个 environment,例如 测试/开发/上线, 这里默认是开发环境,default属性需要和environment的id属性保持一致,可以定义多个 environment 元素,通过default属性来切换不同的环境.

<environment>:用于配置具体环境参数,例如配置事务,连接池等.
<transactionManager>:配置使用的事务类型,JDBC表示默认事物,MANAGER表示没有事务
<dataSource>:配置数据源的参数,POOLED,具体参数参看PooledDataSource的set方法
<property>:配置属性,例如数据库四大连接参数
<mappers>:配置映射文件信息的
<mapper class|resource>:配置具体指定的mapper文件
class属性:配置使用注解时指定有注解的映射接口
resource属性:指定XML映射文件
<properties>:mybatis对propertis文件的支持
<typeAliases>:用于配置别名
<typeHandlers>:用于配置自定义类型处理器.
<settings>:配置Mybatis的默认设置的.
02总配置文件的标签顺序

如下所示是主配置文件的文档声明:
<!DOCTYPEconfiguration
PUBLIC"-//mybatis.org//DTDConfig3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
文档声明中指定了当前XML文件的XML约束,它是一个dtd文件,dtd约束指定了配置文件中标签的顺序,如下所示:
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,
objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
这句话的意思就是configuration 标签下的标签的顺序以及标签出现的个数的声明
根据这个声明可以看到顺序为:
1.properties
2.settings
3.typeAliases
4.typeHandlers
5.objectFactory
6.objectWrapperFactory
7.reflectorFactory
8.plugins
9.environments
10.databaseIdProvider
11.mappers
DTD规则文件标签的出现的次数说明
? , * , + 正则表达式的次数
如果声明的标签后?:表示出现0-1次
如果声明的标签后*:表示出现0-N次
如果声明的标签后+:表示出现1-N次
如果声明的标签后什么都没有:表示出现1次
03.typeAliases别名配置

在UserMapper.xml文件中User无论是作为参数还是作为查询返回数据类型,都需要写上全限定名,实际可以写上简单类名即可,但是需要配置别名.
MyBatis框架提供了两种别名机制,一种是自定义别名,一种是内置别名
3.1 自定义别名
<typeAliases>:自定义别名配置
常见属性:
type: 要设置别名的数据类型(全限定名)
alias : 取的别名,一般都使用类的简单名称
代码示例:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfiguration
PUBLIC"-http://mybatis.org//DTDConfig3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--别名配置-->
<typeAliases>
<!-- 配置单个类型的别名
type:要设置别名的数据类型(全限定名)
alias:取的别名,一般都使用类的简单名
-->
<typeAliastype="com.xyr.domain.User"alias="user"/>
</typeAliases>
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC"/>
<dataSourcetype="POOLED">
<propertyname="driver"value="com.mysql.jdbc.Driver"/>
<propertyname="url"value="jdbc:mysql://localhost:3306/mybatis?
useUnicode=true&characterEncoding=utf8"/
<propertyname="username"value="root"/>
<propertyname="password"value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapperresource="com/xyr/mapper/UserMapper.xml"/>
</mappers>
</configuration>
如果配置成功,在映射文件里面可以直接使用别名:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC"http://mybatis.org//DTDMapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.xyr.mapper.UserMapper">
<selectid="selectOne"parameterType="int"resultType="user">
select*fromuserwhereid=#{id}
</select>
<selectid="selectAll"resultType="user">
select*fromuser;
</select>
<insertid="saveUser"parameterType="user">
insertintouservalues(null,#{name},#{password},#{age});
</insert>
</mapper>
包扫描配置别名
<packagename="com.xyr.domain"/>
name属性 : 对应要取别名的包,自动会为包下面的所有的类取别名,别名就是当前类名的简单名称
3.2 内置别名
所谓的内置别名,就是Mybatis框架自带别名.
Mybatis已经将常用的数据类型的别名内置声明了.所以这些内置的别名不需要配置就可以直接使用.
内置的别名就是,Mybatis框架默认已经设置的别名.
|
别名 |
映射的类型 |
|
_byte |
byte |
|
_long |
long |
|
_short |
short |
|
_int |
int |
|
_integer |
int |
|
_double |
double |
|
_float |
float |
|
_boolean |
boolean |
|
string |
String |
|
byte |
Byte |
|
long |
Long |
|
short |
Short |
|
int |
Integer |
|
integer |
Integer |
|
double |
Double |
|
float |
Float |
|
boolean |
Boolean |
|
date |
Date |
|
decimal |
BigDecimal |
|
bigdecimal |
BigDecimal |
|
object |
Object |
|
map |
Map |
|
hashmap |
HashMap |
|
list |
List |
|
arraylist |
ArrayList |
|
collection |
Collection |
|
iterator |
Iterator |
04properties 读取配置文件

一般开发会将单独的数据库连接字符串配置到一个独立的 以 .properties 的配置文件中
Mybaits框架中配置文件 的 <properties>标签可以读取配置文件中的内容。并可以使用${}的OGNL语法设置给框架的数据库连接操作代码
1. 在classpath下面创建一个db.properties数据库连接配置文件
mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
mysql.user=root mysql.password=root
2. 在mybatis-config.xml主配置文件中配置<properties>标签读取配置文件,位置是在configuration标签的第一个位置
<!--根标签,在内部配置MyBatis框架信息
-->
<configuration>
<!--读取classpath下面的数据库配置文件、 读取以后在下面连接数据库的配置中就可以使用 ${配置文件key}获取对应的数据库连接相关信息
-->
<propertiesresource="db.properties"/>
3. 连接数据库的配置修改为 ${key}的方式
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfiguration
PUBLIC"-//mybatis.org//DTDConfig3.0//EN"
"//mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置properties标签用来引入数据库连接配置-->
<propertiesresource="db.properties"/>
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC"/>
<dataSourcetype="POOLED">
<propertyname="driver"value="${mysql.driver}"/>
<propertyname="url"value="${mysql.url}"/>
<propertyname="username"value="${mysql.user}"/>
<propertyname="password"value="${mysql.password}"/> </dataSource>
</environment>
</environments>
<mappers>
<mapperresource="com/xyr/mapper/UserMapper.xml"/>
</mappers>
</configuration>
05settings标签

Mybatis默认设置了很多默认配置.有时候,我们需求与默认的配置的参数不一样,
我们就需要修改这些默认配置的参数.
如:Mybatis已经对骆驼命名法的支持,但默认是不开启的.可以通过mapUnderscoreToCamelCase参数设置为true支持
表示Mybatis启动可以配置的设置
|
设置名 |
描述 |
有效值 |
默认值 |
|
cacheEnabled |
全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 |
true | false |
true |
|
lazyLoadingEnabled |
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 |
true | false |
false |
|
aggressiveLazyLoading |
开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考 lazyLoadTriggerMethods)。 |
true | false |
false (在 3.4.1 及之前的版本中默认为 true) |
|
multipleResultSetsEnabled |
是否允许单个语句返回多结果集(需要数据库驱动支持)。 |
true | false |
true |
|
useColumnLabel |
使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。 |
true | false |
true |
|
useGeneratedKeys |
允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 |
true | false |
False |
|
autoMappingBehavior |
指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。 |
NONE, PARTIAL, FULL |
PARTIAL |
|
autoMappingUnknownColumnBehavior |
指定发现自动映射目标未知列(或未知属性类型)的行为。 NONE: 不做任何反应 WARNING: 输出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN) FAILING: 映射失败 (抛出 SqlSessionException) |
NONE, WARNING, FAILING |
NONE |
|
defaultExecutorType |
配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。 |
SIMPLE REUSE BATCH |
SIMPLE |
|
defaultStatementTimeout |
设置超时时间,它决定数据库驱动等待数据库响应的秒数。 |
任意正整数 |
未设置 (null) |
|
defaultFetchSize |
为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。 |
任意正整数 |
未设置 (null) |
|
defaultResultSetType |
指定语句默认的滚动策略。(新增于 3.5.2) |
FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同于未设置) |
未设置 (null) |
|
safeRowBoundsEnabled |
是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。 |
true | false |
False |
|
safeResultHandlerEnabled |
是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 false。 |
true | false |
True |
|
mapUnderscoreToCamelCase |
是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 |
true | false |
False |
|
localCacheScope |
MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。 |
SESSION | STATEMENT |
SESSION |
|
jdbcTypeForNull |
当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 |
JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。 |
OTHER |
|
lazyLoadTriggerMethods |
指定对象的哪些方法触发一次延迟加载。 |
用逗号分隔的方法列表。 |
equals,clone,hashCode,toString |
|
defaultScriptingLanguage |
指定动态 SQL 生成使用的默认脚本语言。 |
一个类型别名或全限定类名。 |
org.apache.ibatis.scripting.xmltags.XMLLanguageDriver |
|
defaultEnumTypeHandler |
指定 Enum 使用的默认 TypeHandler 。(新增于 3.4.5) |
一个类型别名或全限定类名。 |
org.apache.ibatis.type.EnumTypeHandler |
|
callSettersOnNulls |
指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。 |
true | false |
false |
|
returnInstanceForEmptyRow |
当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。(新增于 3.4.2) |
true | false |
false |
|
logPrefix |
指定 MyBatis 增加到日志名称的前缀。 |
任何字符串 |
未设置 |
|
logImpl |
指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 |
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING |
未设置 |
|
proxyFactory |
指定 Mybatis 创建可延迟加载对象所用到的代理工具。 |
CGLIB | JAVASSIST |
JAVASSIST (MyBatis 3.3 以上) |
|
vfsImpl |
指定 VFS 的实现 |
自定义 VFS 的实现的类全限定名,以逗号分隔。 |
未设置 |
|
useActualParamName |
允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(新增于 3.4.1) |
true | false |
true |
|
configurationFactory |
指定一个提供 Configuration 实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为static Configuration getConfiguration() 的方法。(新增于 3.2.3) |
一个类型别名或完全限定类名。 |
未设置 |
|
shrinkWhitespacesInSql |
Removes extra whitespace characters from the SQL. Note that this also affects literal strings in SQL. (Since 3.5.5) |
true | false |
false |
1. 如支持驼峰命名法
<!--配置默认的参数-->
<settings>
<!--默认支持骆驼命名法--> <settingname="mapUnderscoreToCamelCase"value="true"/>
//把u_id转成uId
</settings>
JavaBean如下所示:
publicclassUser2{
privateIntegeruId;
privateStringuName;
privateStringuPwd;
privateStringuAge;
//此处get/set/toString方法省略... }
UserMapper类如下所示:
/**
*测试驼峰命名法
*@paramid
*@return
*/
User2findOne(Integerid);
UserMapper.xml配置如下所示;
<selectid="findOne"parameterType="int"resultType="user2">
selectidu_id,nameu_name,passwordu_pwd,ageu_agefromuserwhereid=#{id}
</select>
测试类如下所示:
@Test publicvoidtestFindOne(){
try(SqlSessionsqlSession=MyBatisUtils.getSession()){
UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);
User2user2=userMapper.findOne(4);
System.out.println(user2);
}
}
2. 日志配置
<settings>
<settingname="logImpl"value="LOG4J"/>
</settings>
06mappers标签

mappers标签中可以包含多个子mapper标签,每一个mapper标签对应的是一个映射配置,这个映射配置可以是XML配置,也可以是注解配置
mapper的属性如果是resource,那么表示使用XML文件配置,如果是class,表示使用注解配置
如下所示是XML配置:
<mappers>
<mapperresource="com/xyr/mapper/UserMapper.xml"/>
</mappers>
如下所示是注解配置:
<mapperclass="com.xyr.mapper.UserMapper"/>
在实际开发中我们的Mapper类或者Mapper.xml文件很多,这个是配置比较繁琐,我们可以配置包扫描,包扫描会自动扫描某个包下所有的mapper,代码如下所示:
<packagename="com.xyr.mapper"/>