MyBatis——(4)MyBatis_全局配置文件

MyBatis配置包含对MyBatis行为有显著影响的设置和属性。文件的高级结构如下:
在这里插入图片描述

1,properties

properties可外部化的、可替换的属性,可以在典型的Java属性文件实例中配置,也可以通过properties元素的子元素传递。例如:

<!--
		1、mybatis可以使用properties来引入外部properties配置文件的内容;
		resource:引入类路径下的资源
		url:引入网络路径或者磁盘路径下的资源
	  -->
	<properties resource="dbconfig.properties"></properties>
	

如果一个属性存在于其中一个以上的地方,MyBatis会按如下顺序加载它们:

  • 属性中指定的主体属性元素读取第一,
  • 属性从类路径加载资源或url属性的属性元素读取第二,并覆盖任何重复的属性已经指定,
  • 读取属性作为方法参数传递,并覆盖任何重复的属性可能被从身体和资源属性加载/ url属性。
    因此,优先级最高的属性是那些作为方法参数传入的属性,然后是资源/ url属性,最后是properties元素主体中指定的属性。

2,settings

settings是非常重要的调整,它们修改了MyBatis在运行时的行为方式。

此篇描述了settings设置、以及它们的含义和默认值。

<settings>  
<setting name="cacheEnabled" value="true"/>  
<setting name="lazyLoadingEnabled" value="true"/> 
 <setting name="multipleResultSetsEnabled" value="true"/>  
 <setting name="useColumnLabel" value="true"/>  
 <setting name="useGeneratedKeys" value="false"/>  
 <setting name="autoMappingBehavior" value="PARTIAL"/>  
 <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>  <setting name="defaultExecutorType" value="SIMPLE"/> 
<setting name="defaultStatementTimeout" value="25"/> 
<setting name="defaultFetchSize" value="100"/>  
<setting name="safeRowBoundsEnabled" value="false"/> 
 <setting name="mapUnderscoreToCamelCase" value="false"/> 
 <setting name="localCacheScope" value="SESSION"/>  
 <setting name="jdbcTypeForNull" value="OTHER"/>  
 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

3,typeAliases

  • 类型别名是Java类型的短名称。它只与XML配置相关,它的存在只是为了减少完全限定类名的冗余类型化。
<typeAlias type="com.mybatis.bean.Employee" alias="emp"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>

有了这个配置,别名(emp)现在可以在任何地方使用。代替了type(com.mybatis.bean.Employee)

  • 我们还可以指定一个包,MyBatis将在其中搜索beans。
<typeAliases>  
<package name="domain.blog"/> 
</typeAliases>
  • 使用@Alias注解为某个类型指定新的别名
@Alias("emp")
public class Employee{    ... }

4,environments

MyBatis可以配置多个环境。这有助于我们出于各种原因将SQL映射应用到多个数据库。例如,我们的开发、测试和生产环境可能有不同的配置。或者,我们可能有多个共享相同模式的生产数据库,我们希望对这两个数据库使用相同的SQL映射。有许多用例。
虽然我们可以配置多个环境,但是您只能为每个SqlSessionFactory实例选择一个。
因此,如果希望连接两个数据库,需要创建SqlSessionFactory的两个实例,每个实例一个。对于三个数据库,您需要三个实例,等等。

  • 每个数据库一个SqlSessionFactory实例
    要指定要构建的环境,只需将其作为一个可选参数传递给SqlSessionFactoryBuilder
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment); 
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties

如果省略环境,则加载默认环境,如下所示:

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader); 
 SqlSessionFactory factory =sqlSessionFactoryBuilder.build(reader,properties);

环境元素定义如何配置环境。

  • environments:环境,mybatis可以配置多种环境 ,default指定使用某种环境。可以达到快速切换环境。

  • environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识

  • transactionManager:事务管理器;type:事务管理器的类型;
    JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
    自定义事务管理器:实现TransactionFactory接口.type指定为全类名

  • dataSource:数据源; type:数据源类型;
    UNPOOLED(UnpooledDataSourceFactory)
    |POOLED(PooledDataSourceFactory)
    |JNDI(JndiDataSourceFactory)
    自定义数据源:实现DataSourceFactory接口,type是全类名

<environments default="dev_mysql">
		<environment id="dev_mysql">
			<transactionManager type="JDBC"></transactionManager>
			<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>
	
		<environment id="dev_oracle">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${orcl.driver}" />
				<property name="url" value="${orcl.url}" />
				<property name="username" value="${orcl.username}" />
				<property name="password" value="${orcl.password}" />
			</dataSource>
		</environment>
	</environments>

5,databaseIdProvider

MyBatis能够根据您的数据库供应商执行不同的语句多数据库供应商的支持基于映射语句databaseId属性MyBatis将加载所有没有databaseId属性或具有与当前属性匹配的databaseId的语句。如果发现有和没有databaseId时相同的语句,则将丢弃后者
要启用多供应商支持,请按如下方式将databaseIdProvider添加到mybatis-config.xml文件中

<databaseIdProvider type="DB_VENDOR" />

DB_VENDOR实现databaseIdProvider将databaseId设置为databaseId,这是DatabaseMetaData#getDatabaseProductName()返回的字符串。考虑到该字符串通常太长,同一产品的不同版本可能会返回不同的值,
您可能希望通过添加如下属性将其转换为更短的字符串:

<databaseIdProvider type="DB_VENDOR">
		<!-- 为不同的数据库厂商起别名 -->
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	</databaseIdProvider>

6, mappers

既然MyBatis的行为已经用上面的配置元素配置好了,我们就可以定义映射的SQL语句了。 但是首先,我们需要告诉MyBatis在哪里可以找到它们。在这方面,Java并没有提供任何好的自动发现方法,所以最好的方法就是告诉MyBatis在哪里可以找到映射文件。您可以使用

  • 类路径相关的资源引用、

  • 完全限定的url引用(包括文件:/// url)、
    resource:引用类路径下的sql映射文件
    mybatis/mapper/EmployeeMapper.xml
    url:引用网路路径或者磁盘路径下的sql映射文件
    file:///var/mappers/AuthorMapper.xml

  • 类名
    注册接口
    class:引用(注册)接口,
    1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
    2、没有sql映射文件,所有的sql都是利用注解写在接口上;
    推荐:
    比较重要的,复杂的Dao接口我们来写sql映射文件
    不重要,简单的Dao接口为了开发快速可以使用注解;

  • 包名。(批量注册)

<!-- Using classpath relative resources -->
 <mappers>  
 <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>  
 <mapper resource="org/mybatis/builder/BlogMapper.xml"/> 
  <mapper resource="org/mybatis/builder/PostMapper.xml"/> 
  </mappers>
<!-- Using mapper interface classes -->
<mappers> 
<mapper class="org.mybatis.builder.AuthorMapper"/> 
<mapper class="org.mybatis.builder.BlogMapper"/>  
<mapper class="org.mybatis.builder.PostMapper"/>
<mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> 
</mappers>
<package name="com.atstudying.mybatis.dao"/>

这些语句只是告诉MyBatis从这里到哪里。其余的细节都在每个SQL映射文件中,这正是下面将要讨论的内容。

发布了152 篇原创文章 · 获赞 73 · 访问量 3266

猜你喜欢

转载自blog.csdn.net/qq_44891295/article/details/103805651