mybatis配置文件详解

 

 

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文件中直接使用别名便可。其使用的意义在于减小全限定类名的冗余。

  1. 使用<typeAliases>元素配置别名的方法以下:

     <typeAliases>
            <typeAlias alias="user" type="com.itheima.po.User"/>
        <!--若是省略alias属性,mybatis会默认将类名首字母小写后的名称做为别名-->
    </typeAliases>
  1. 当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>
相关文章
相关标签/搜索