MyBatis配置文件

MyBatis配置结构

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

  • configuration(配置)
    • properties(属性)
    • setting(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

属性(properties)

这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。例如:

<properties resource="db-config.properties"/>

这样就可以在db-config.properties文件中配置数据库信息,然后一参数的形式在mybatis.xml文件中调用,例如:

 <environments default="development">
        <environment id="development">
            <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>
    </environments>

设置(setting)

类型别名(typeAliases)

这个属性就是在注册实体类给实体类的全限定性类名起个别名(类似于小名),因为在写mapper文件的时候,需要配置实体类的全限定名,如果全限定名很长,那就很痛苦,此时就可以使用这个属性给你的类起个小名了,例如:

<typeAliases>
     <typeAlias type="com.kons.dao.User"/>
</typeAliases>

当然,项目不可能只有一个实体类,那样子还是要给所有的实体类起小名,也是很麻烦,MyBatis当然考虑这个问题了,此时可以使用package属性指定一个包名,例如:

<typeAliases>
     <package name="com.kons.dao"/>
</typeAliases>

默认情况下,会将com.kons.dao包下的类名首字母小写作为别名,例如:com.kons.dao.User的别名就是user。
另外还有注解配置别名的方法等。

类型处理器(typeHandlers)

对象工厂(objectFactory)

插件(plugins)

环境配置(environments)

配置MyBatis的运行环境

  • 运行环境的切换
    工作的项目不止一个环境,什么测试环境啊,正式环境什么的,往往要配置好几个数据库配置。此时就可以在environments里配置多个environment,如下:
  <environments default="development">
        <!--开发环境-->
        <environment id="development">
            <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>
        <!--测试环境-->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${test_url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

切换环境的时候,只要修改environments中default属性就可以了。

  • transactionManager标签
    该标签用于指定MyBatis所使用的事务管理器。 MyBatis 支持两种事务管理器类型:
    • JDBC
      该事务器就是我们之前通过Connection的commit()方法提交,通过rollback()方法回滚,默认是需要手动提交的。
    • MANAGED
      由容器来管理事务的整个事务的生命周期,默认情况下会关闭连接,将来学习spring框架之后,就不用在配置事务管理器了,spring会使用自带的管理器。
  • dataSource标签
    该项主要用于配置数据源和数据库连接基本属性,有以下三种内建的数据源类型:
    • UNPOOLED
      该配置表示不使用连接池,每次请求都会创建一个数据库连接,使用完毕后再关闭。当项目对数据库性能要求不大的时候,可以使用该配置。
    • POOLED
      改配置表示使用mybatis自带的数据库连接池,可以在dataSource下的property属性中设置数据库连接池的基本信息,该部分可以在mybatis的官网中看到。
    • JNDI
      配置外部数据源

数据库厂商标识(databaseIdProvider)

映射器(mappers)

这个属性就是告诉mybatis去哪里找sql语句,有四种方式:

  1. 使用相对于类路径的资源引用
    <mappers>
        <mapper resource="mapper/user.xml"/>
    </mappers>
  1. 使用完全限定资源定位符
    <mappers>
        <mapper resource="file:///mapper/user.xml"/>
    </mappers>
  1. 使用映射器接口实现类的完全限定类名
    该方式的使用,需要满足以下几个要求:
    (1)映射文件名要与 Dao 接口名称相同
    (2)映射文件要与接口在同一包中
    (3)映射文件中的 namespace 属性值为 Dao 接口的全类名
    <mappers>
        <mapper class="com.kons.dao.userMapper"/>
    </mappers>
  1. 将包内的映射器接口实现全部注册为映射器
    这种方式的使用需要满足以下几个条件:
    (1)dao 使用 mapper 动态代理实现
    (2)映射文件名要与 Dao 接口名称相同
    (3)映射文件要与接口在同一包中
    (4)映射文件中的 namespace 属性值为 Dao 接口的全类名
    <mappers>
        <mapper package="com.kons.dao"/>
    </mappers>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容