1. <properties>
元素java
<properties>
是一个配置属性的元素,该元素一般用来将内部的配置外在化,即经过外部的配置来动态的替换内部定义的属性。mysql
例如:数据库的链接属性,就能够经过专门配置db.properties而后替换掉里面的配置信息。sql
编写db.properties数据库
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://1localhost:3306;DatabaseName=mybatis
jdbc.username=root
jdbc.password=123456
配置<properties>
属性缓存
<properties resource="db.properties"></properties>
这个时候只须要在引用db.properties中的数据库相关信息就能够了服务器
<dataSource type="POOLED">
<!-- 数据库驱动 -->
<property name="driver" value="${jdbc.driver}" />
<!-- 链接数据库的url -->
<property name="url" value="${jdbc.url}" />
<!-- 链接数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!-- 链接数据库的密码 -->
<property name="password" value="${jdbc.password}" />
</dataSource>
2.<settings>
元素mybatis
<settings>
元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。<settings>元素中常见的配置及其描述以下表所示。并发
设置参数 | 描述 | 有效值 | 默认值 |
cacheEnabled | 该配置影响全部映射器中配置的缓存全局开关 | ture|false | false |
lazyLoadingEnabled | 延迟加载的全局开关。开启时全部关联对象都会延迟加载。特定关联关系中能够经过设置fetchType属性来覆盖该项的开关状态 | ture|false | false |
agressiveLazyLoading | 关联对象属性的延迟加载开关。当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象彻底加载;反之,每种属性都会按需加载 | ture|false | true |
multipleResultSetsEnabled | 是否容许单一语句返回多结果集(须要驱动兼容) | ture|false | true |
useColumnLabel | 使用列标签代替列名。不一样的驱动在这方面有不一样的表现。具体可参考驱动文档或经过测试两种模式来观察所用驱动的行为。 | ture|false | true |
useGeneratedKeys | 容许JDBC支持自动生成主键,须要驱动兼容。若是设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不兼容但仍可正常工做。 | ture|false | false |
autoMappingBehavior | 指定mybatis应如何自动映射列到字段或属性。NONE表示取消自动映射;PARTIAL只会自动映射没有定义嵌套结果集映射的结果集;FULL会自动映射任意复杂的结果集(不管是否嵌套) | NONE、PARTIAL、FULL | PARTIAL |
defaultExecutorType | 配置默认的执行器。SIMPLE就是普通的执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新。 | SIMPLE、REUSE、BATCH | SIMPLE |
defaultStatementTimeOut | 设置超时时间。它决定驱动等待数据库响应的秒数。当没有设置的时候,它取的就是驱动默认的时间。 | 任何正整数 | 没有设置 |
mapUnderscoreToCamelCase | 是否开启自动驼峰命名规则(camel case)映射 | true|false | false |
jdbcTypeForNull | 当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动须要指定列的JDBC类型,多数状况直接使用通常类型便可。如NULL、Varchar、other等。 | NULL、Varchar、other | other |
配置举例以下:app
<settings>框架
<setting name="cacheEnabled" value="true"/>
<setting name="LazyLoadingEnabled" value="true"/>
<settings>
3.<typeAliases>
元素
<typeAliases>
元素用于为配置文件中的Java类型设置别名。别名设置好了事后能够在mapper.xml文件中直接使用别名便可。其使用的意义在于减小全限定类名的冗余。
使用<typeAliases>
元素配置别名的方法以下:
<typeAliases>
<typeAlias alias="user" type="com.itheima.po.User"/>
<!--若是省略alias属性,mybatis会默认将类名首字母小写后的名称做为别名-->
</typeAliases>
当POJO类过多时,能够经过自动扫描包的形式自定义别名,具体以下:
<typeAliases>
<package name="com.itheima.po"/>
<!--mybatis会将全部com.itheima.po包中的POJO类以首字母小写的非限定类名来做为它的别名-->
</typeAliases>
建议使用扫描包的形式设置别名。
注意:上面设置别名的方式只适用于没有使用注解的状况,若是在程序中使用了注解,则其别名为注解的值。例如:
@Alias(value="user")
public class User{
//属性和方法。。。。
}
除了使用<typeAliases>元素自定义别名外,mybatis框架还默认为许多常见的java类型(如数值、字符串、日期等)提供了相应的别名,以下表所示。
别名 | 映射的类型 |
_byte | btye |
_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 |
以上表格中列举的别名能够直接在mybatis中使用,可是因为不区分大小写,在使用的时候须要注意重复定义的问题。
4.<typeHandlers>
元素
mybatis在预处理语句(prepareStatement)中设置一个参数或者从结果集(ResultSet)中取出一个值时,都会用到其框架内部注册了的typehandler(类型处理器)进行相关的处理。typeHandler的做用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。也就是将数据库类型与java类型映射关联起来。
为了方便转换,mybatis提供了默认一些默认的类型处理器,以下表所示。
类型处理器 | java类型 | jdbc类型 |
BooleanTypeHandler | java.lang.Boolean ,boolean | 数据库兼容的BOOLEAN |
ByteTypeHandler | java.lang.Byte ,byte | 数据库兼容的numeric或byte |
ShortTypeHandler | java.lang.Short ,short | 数据库兼容的numeric或者short integer |
IntegerTypeHandler | java.lang.Integer ,int | 数据库兼容的numeric或者integer |
LongTypeHandler | java.lang.Long ,long | 数据库兼容的numeric或者long integer |
FloatTypeHandler | java.lang.Float ,float | 数据库兼容的numeric或者Float |
DoubleTypeHandler | java.lang.Double ,double | 数据库兼容的numeric或者double |
BigDecimalTypeHandler | java.math.BigDecimal | 数据库兼容的numeric或者decimal |
StringTypeHandler | java.lang.String | char,varchar |
ClobTypeHandler | java.lang.String | clob、longvarchar |
ByteArrayTypeHandler | byte[] | 数据库兼容的字节流类型 |
BlobTypeHandler | byte[] | blob、longvarbinary |
DateTypeHandler | java.util.Date | timestamp |
SqlTimestampTypeHandler | java.sql.timestamp | timestamp |
SqlDateTypeHandler | java.sql.Date | date |
SqlTimeTypeHandler | java.sql.time | time |
若是以上类型处理器没法知足需求时能够经过自定义类型处理器。<typeHandler>
元素能够在配置文件中注册自定义的类型处理器,它的使用方式有两种。
1.注册一个类的类型处理器
<typeHandlers>
<typeHandler handler="com.itheima.type.CustomtypeHandler" />
</typeHandlers>
2.注册一个包中全部的类型处理器
<typeHandlers>
<package name="com.itheima.type" />
</typeHandlers>
5.<objectFactory>
元素
MyBatis中默认的ObjectFactory的做用是实例化目标类,它既能够经过默认构造方法实例化,也能够在参数映射存在的时候经过参数构造方法来实例化。一般使用默认的ObjectFactory便可。
大部分场景下都不用配置和修改默认的ObjectFactory ,若是想覆盖ObjectFactory的默认行为,能够经过自定义ObjectFactory来实现,具体以下:
1.自定义一个对象工厂
public class MyObjectFactory extends DefaultObjectFactory {
private static final long serialVersionUID = -4114845625429965832L;
public <T> T create(Class<T> type) {
return super.create(type);
}
public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes,
List<Object> constructorArgs) {
return super.create(type, constructorArgTypes, constructorArgs);
}
public void setProperties(Properties properties) {
super.setProperties(properties);
}
public <T> boolean isCollection(Class<T> type) {
return Collection.class.isAssignableFrom(type);
}
}
2.在配置文件中使用<objectFactory>
元素配置自定义的ObjectFactory
<objectFactory type="com.itheima.factory.MyObjectFactory">
<property name="name" value="MyObjectFactory"/>
</objectFactory>
在开发中这个元素没有怎么使用,通常了解就能够了,知道有这个东西就行。
6.<plugins>
元素
MyBatis容许在已映射语句执行过程当中的某一点进行拦截调用,这种拦截调用是经过插件来实现的。元素的做用就是配置用户所开发的插件。 若是用户想要进行插件开发,必需要先了解其内部运行原理,由于在试图修改或重写已有方法的行为时,极可能会破坏MyBatis原有的核心模块。慎用。
7.<environments>
元素
<environments>
元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,咱们能够经过元素配置多种数据源,即配置多种数据库。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
...
</environments>
<transactionManager>
元素用于配置事务管理,它的type属性用于指定事务管理的方式,即便用哪一种事务管理器;<dataSource>
元素用于配置数据源,它的type属性用于指定使用哪一种数据源。
在MyBatis中,能够配置两种类型的事务管理器,分别是JDBC和MANAGED。关于这两个事务管理器的描述以下:
JDBC:此配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源获得的链接来管理事务的做用域。
MANAGED:此配置历来不提交或回滚一个链接,而是让容器来管理事务的整个生命周期。默认状况下,它会关闭链接,但一些容器并不但愿这样,为此能够将closeConnection属性设置为false来阻止它默认的关闭行为。
注意:若是项目中使用的是Spring+ MyBatis,则没有必要在MyBatis中配置事务管理器,由于实际开发中,会使用Spring自带的管理器来实现事务管理。
对于数据源的配置,MyBatis提供了UNPOOLED、POOLED、JNDI三种数据源类型。
UNPOOLED 配置此数据源类型后,在每次被请求时会打开和关闭链接。它对没有性能要求的简单应用程序是一个很好的选择。在使用时,须要配置5种属性。
Pooled
此数据源利用“池”的概念将JDBC链接对象组织起来,避免了在建立新的链接实例时所须要初始化和认证的时间。这种方式使得并发Web应用能够快速的响应请求,是当前流行的处理方式。在使用时,能够配置更多的属性。
JNDI
能够在EJB或应用服务器等容器中使用。容器能够集中或在外部配置数据源,而后放置一个JNDI上下文的引用。在使用时,须要配置2个属性。
9.<mappers>
元素
<mappers>
元素用于指定MyBatis映射文件的位置,通常可使用如下4种方法引入映射器文件
1.使用类路径引入(经常使用)
<mappers>
<mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>
2.使用本地文件路径引入
<mappers>
<mapper url="file:///D:/com/itheima/mapper/UserMapper.xml"/>
</mappers>
3.使用接口类引入
<mappers>
<mapper class="com.itheima.mapper.UserMapper"/>
</mappers>
4.使用包名引入(经常使用)
<mappers> <package name="com.itheima.mapper"/></mappers>