MyBatis框架

3.7 environments 环境配置

  • MyBatis可以配置多种环境,比如开发、测试和生产环境需要有不同的配置
  • 每种环境使用一个environment标签进行配置并指定唯一标识符
  • 可以通过environments标签中的default属性指定一个环境的标识符来快速的切换环境
  • environment-指定具体环境

id:指定当前环境的唯一标识

transactionManager、和dataSource都必须有

<environments default="oracle">

                   <environment id="mysql">

                            <transactionManager type="JDBC" />

                            <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="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>

  • transactionManager

type:  JDBC | MANAGED | 自定义

         JDBC:使用了 JDBC 的提交和回滚设置,依赖于从数据源得到的连接来管理事务范                   围。 JdbcTransactionFactory

         MANAGED:不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如 JEE                 应用服务器的上下文)。 ManagedTransactionFactory

         自定义:实现TransactionFactory接口,type=全类名/别名

  • dataSource

type:  UNPOOLED | POOLED | JNDI | 自定义

         UNPOOLED:不使用连接池, UnpooledDataSourceFactory

         POOLED:使用连接池, PooledDataSourceFactory

         JNDI: 在EJB 或应用服务器这类容器中查找指定的数据源

         自定义:实现DataSourceFactory接口,定义数据源的获取方式。

  • 实际开发中我们使用Spring管理数据源,并进行事务控制的配置来覆盖上述配置

3.8 databaseIdProvider数据库厂商标识

  • MyBatis 可以根据不同的数据库厂商执行不同的语句

<databaseIdProvider type="DB_VENDOR">

                 <property name="MySQL" value="mysql"/>

                 <property name="Oracle" value="oracle"/>

</databaseIdProvider>

  • Type: DB_VENDOR, 使用MyBatis提供的VendorDatabaseIdProvider解析数据库厂商标识。也可以实现DatabaseIdProvider接口来自定义.

会通过 DatabaseMetaData#getDatabaseProductName() 返回的字符串进行设置。由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其变短.

Property-name:数据库厂商标识

Property-value:为标识起一个别名,方便SQL语句使用databaseId属性引用

  • 配置了databaseIdProvider后,在SQL映射文件中的增删改查标签中使用databaseId

来指定数据库标识的别名

<select id="getEmployeeById"

         resultType="com.atguigu.mybatis.beans.Employee"

         databaseId="mysql">

                    select * from tbl_employee where id = #{id}

</select>

  • MyBatis匹配规则如下:
  • 如果没有配置databaseIdProvider标签,那么databaseId=null
  • 如果配置了databaseIdProvider标签,使用标签配置的name去匹配数据库信息,匹配上设置databaseId=配置指定的值,否则依旧为null
  • 如果databaseId不为null,他只会找到配置databaseId的sql语句
  • MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库databaseId 属性的所有语句。如果同时找到带有 databaseId 和不带databaseId 的相同语句,则后者会被舍弃。

3.9 mappers 映射器

  • 用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件
  • mapper逐个注册SQL映射文件

resource : 引入类路径下的文件

url :      引入网络路径或者是磁盘路径下的文件

         class :    引入Mapper接口.

                   有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置.

                            没有SQL映射文件 , 使用注解在接口的方法上写SQL语句.

<mappers>

                   <mapper resource="EmployeeMapper.xml" />

                   <mapper class="com.atguigu.mybatis.dao.EmployeeMapper"/>

                   <package name="com.atguigu.mybatis.dao"/>

</mappers>

 

  • 使用批量注册,这种方式要求SQL映射文件名必须和接口名相同并且在同一目录下

<mappers>

                   <package name="com.atguigu.mybatis.dao"/>

</mappers>