MyBatis配置包含对MyBatis行为有显著影响的设置和属性。文件的高级结构如下:
properties是可外部化的、可替换的属性,可以在典型的Java属性文件实例中配置,也可以通过properties元素的子元素传递。例如:
<properties resource="dbconfig.properties">properties>
如果一个属性存在于其中一个以上的地方,MyBatis会按如下顺序加载它们:
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>
<typeAlias type="com.mybatis.bean.Employee" alias="emp"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
有了这个配置,别名(emp)现在可以在任何地方使用。代替了type(com.mybatis.bean.Employee)
<typeAliases>
<package name="domain.blog"/>
typeAliases>
@Alias("emp")
public class Employee{
... }
MyBatis可以配置多个环境。这有助于我们出于各种原因将SQL映射应用到多个数据库。例如,我们的开发、测试和生产环境可能有不同的配置。或者,我们可能有多个共享相同模式的生产数据库,我们希望对这两个数据库使用相同的SQL映射。有许多用例。
虽然我们可以配置多个环境,但是您只能为每个SqlSessionFactory实例选择一个。
因此,如果希望连接两个数据库,需要创建SqlSessionFactory的两个实例,每个实例一个。对于三个数据库,您需要三个实例,等等。
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>
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>
既然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接口为了开发快速可以使用注解;
包名。(批量注册)
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
mappers>
<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映射文件中,这正是下面将要讨论的内容。