mybatis配置文件详解

详情参见:https://www.cnblogs.com/black-spike/p/7765732.html

 

1. <properties>元素

<properties>是一个配置属性的元素,该元素通常用来将内部的配置外在化,即通过外部的配置来动态的替换内部定义的属性。

例如:数据库的连接属性,就可以通过专门配置db.properties然后替换掉里面的配置信息。

编写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>元素

<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

配置举例如下:

<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>
原文地址:https://www.cnblogs.com/jasonboren/p/10516538.html