SSM框架集|MyBatis核心配置文件概述


MyBatis核心配置文件概述

  • 配置文件的层级关系
  • 常用配置的解析
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • environments(环境配置)
    • mapper(映射器)

配置文件的层级关系 MyBatis的配置文件包括了会深深影响MyBatis行为的设置和属性信息。配置文档的层级结构如下:
SSM框架集|MyBatis核心配置文件概述
文章图片

注意:一定要按照层级关系来写标签,不然会报错(比如:将mapper(映射器)写在environments(环境配置前面),就会出错)
常用配置的解析 properties(属性) 实际开发中,习惯将数据源的配置文件信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件。
properties文件配置:
SSM框架集|MyBatis核心配置文件概述
文章图片

整个配置文件中用来替换需要动态配置的属性值:
SSM框架集|MyBatis核心配置文件概述
文章图片

在上面的例子中的driver和url属性将会由jdbc.properties文件中对应的值来替换,这样就为了配置提供了更多的灵活选择。
链接:https://mybatis.org/mybatis-3/zh/configuration.html#settings
一个配置完整的 settings 元素的示例如下:
> ="cacheEnabled" value="https://www.it610.com/article/true"/> ="lazyLoadingEnabled" value="https://www.it610.com/article/true"/> ="multipleResultSetsEnabled" value="https://www.it610.com/article/true"/> ="useColumnLabel" value="https://www.it610.com/article/true"/> ="useGeneratedKeys" value="https://www.it610.com/article/false"/> ="autoMappingBehavior" value="https://www.it610.com/article/PARTIAL"/> ="autoMappingUnknownColumnBehavior" value="https://www.it610.com/article/WARNING"/> ="defaultExecutorType" value="https://www.it610.com/article/SIMPLE"/> ="defaultStatementTimeout" value="https://www.it610.com/article/25"/> ="defaultFetchSize" value="https://www.it610.com/article/100"/> ="safeRowBoundsEnabled" value="https://www.it610.com/article/false"/> ="mapUnderscoreToCamelCase" value="https://www.it610.com/article/false"/> ="localCacheScope" value="https://www.it610.com/article/SESSION"/> ="jdbcTypeForNull" value="https://www.it610.com/article/OTHER"/> ="lazyLoadTriggerMethods" value="https://www.it610.com/article/equals,clone,hashCode,toString"/>

settings(设置) 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
typeAliases(类型别名) 这个标签可以为java类型设置一个缩写名字。他仅用于xml配置,主要为了降低冗余的权限类名。
SSM框架集|MyBatis核心配置文件概述
文章图片

我们可以使用配置typeAliases,定义别名:
SSM框架集|MyBatis核心配置文件概述
文章图片

这样我们就可以在resultType下使用我们定义好的别名,而不用使用权限类名的书写。
environments(环境配置) MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
注意:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境
如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推。
每个数据库对应一个 SqlSessionFactory 实例
为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader, environment); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader, environment, properties);

如果忽略了环境参数,那么将会加载默认环境,如下所示:
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader, properties);

environments元素定义了如何配置环境变量
SSM框架集|MyBatis核心配置文件概述
文章图片

其中,事务管理器(transactionManager)类型有两种:
  • JDBC:这个配置就是直接使用了JDBC的提交和回滚事物,他依赖于从数据源得到的连接来管理事物作用域。
  • MANAGED:这个配置几乎没做什么,他从来不提交或回滚一个连接,而是让容器来管理事物的整个生命周期(比如JEE应用服务器的上下文)。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为。
其中,数据源(dataSource)类型有三种:
  • UNPOOIED:这个数据源的实现只是每次被请求时打开和关闭连接。
  • POOLED:这种数据源的实现利用 ”池“ 的概念将JDBC连接对象组织起来。
  • JNDI:这个数据源的实现是为了能在EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。
mapper(映射器) 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。例如:
该标签的作用是加载映射的,加载方式有如一下几种:
使用相对于类路径的资源引用,例如:

使用完全限定资源定位符(URL),例如:

使用映射器接口实现类的完全限定类名,例如:

【SSM框架集|MyBatis核心配置文件概述】将包内的映射器接口实现全部注册为映射器,例如:

    推荐阅读