mybatis全局配置文件
一、配置文档的顶层结构
二、约束文件配置
元素顺序有严格要求,不能随便放置。
在联网的情况下是可以不添加配置文件约束的,但是没有网络的情况下,只能从本地加载这个约束文件。配置dtd文件可以编写xml的时候ide进行提示
1.dtd文件在jar包中的如下位置,复制出两个文件到别的目录
2.idea中dtd文件配置
3.eclipse中的配置
三、重要属性说明
常用的配置属性为properties,typeAliases,mappers
properties属性
<!--加载类路径下的属性文件-->
<properties resource="mysql.properties"></properties>
<!--加载指定目录下的属性文件-->
<properties url="d:mysql.properties "></properties>
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
- 在 properties 元素体内指定的属性首先被读取。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。
setting设置
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项的意图、默认值等。
typeAliases(类型别名)
类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:
<typeAliases>
<typeAlias alias="User" type= "com.review.bean.User" />
<typeAlias alias="Order" type= "com.review.bean.Order" />
</typeAliases>
也可以批量设置别名,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名,若有注解,则别名为其注解值。
<typeAliases>
<package name="com.review.bean"/>
</typeAliases>
@Alias("author")
public class Author {
...
}
值得注意的是,MyBatis已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,我们在起别名的时候千万不要占用已有的别名
rs类型处理器
类型处理器(typeHandlers)
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
我们可以重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型
环境配置(environments)
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中 使用相同的 SQL 映射。有许多类似的使用场景。
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:
- 每个数据库对应一个 SqlSessionFactory 实例
为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
①mybatis-config.xml中定义:
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
②获取SQLSessionFactory
InputStream inputStream= this.getClass().getResourceAsStream("mysql.properties");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream,"test");
事务管理器(transactionManager)
•type: JDBC | MANAGED | 自定义
–JDBC:使用了 JDBC 的提交和回滚设置,依赖于从数据源得到的连接来管理事务范围。 JdbcTransactionFactory
–MANAGED:不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 ManagedTransactionFactory
–自定义:实现TransactionFactory接口,type=全类名/别名
Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
数据源(dataSource)
•type: UNPOOLED | POOLED | JNDI | 自定义
–UNPOOLED:不使用连接池, UnpooledDataSourceFactory
–POOLED:使用连接池, PooledDataSourceFactory
–JNDI: 在EJB 或应用服务器这类容器中查找指定的数据源
–自定义:实现DataSourceFactory接口,定义数据源的获取方式。
数据库厂商标识(databaseIdProvider)
•MyBatis 可以根据不同的数据库厂商执行不同的语句。
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
•Type: DB_VENDOR
–使用MyBatis提供的VendorDatabaseIdProvider解析数据库厂商标识。也可以实现DatabaseIdProvider接口来自定义。
•Property-name:数据库厂商标识
•Property-value:为标识起一个别名,方便SQL语句使用databaseId属性引用
映射器(mappers)
mappers告诉mybatis到哪里去找SQL映射文件
有四种方式
<!-- 使用相对于类路径的资源引用 --> <mappers> <mapper resource="com/review/bean/User.xml"/> <mapper resource="com/review/bean/Order.xml"/> </mappers>
<!-- 使用完全限定资源定位符(URL) --> <mappers> <mapper url="D:/mappers/User.xml"/> <mapper url="D:/mappers/Order.xml"/> </mappers>
<!-- 使用映射器接口实现类的完全限定类名 --> <mappers> <mapper class="com.review.bean.User"/> <mapper class="com.review.bean.Order"/> </mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 --> <mappers> <package name="com.review.mapper"/> </mappers>
参考链接:
推荐阅读