MyBatis可以配置成适应多种环境,这种机制有助于将SQL映射应用于多种数据库之中,现实情况下有多种理由需要这么做。
例如,开发、测试和生产环境需要有不同的配置;或者共享相同Schema的多个生产数据库,想使用相同的SQL映射。许多类似的用例。
但注意:尽管可以配置多个环境,每个SqlSessionFactory实例只能选择其一。
所以,如果想要连接两个数据库,就需要创建两个SqlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,以此类推,记起来很简单:
·每个数据库对应一个SqlSessionFactory实例
为了指定创建哪种环境,只要将它作为可选的参数传递给SqlSessionFactoryBuilder即可。可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties); |
如果忽略了环境参数,那么默认环境将会被加载,如下所示:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties); |
环境元素定义了如何配置环境:
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <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> |
注意关键点:
·默认的环境ID(比如:default=“development”)
·每个environment元素定义的环境ID(比如:id=”development”)
·事务管理器的配置(比如:type=”JDBC”)
·数据源的配置(比如:type=”POOLED”)
默认的环境和环境ID是自解释的,因此一目了然。可以对环境随意命名,但一定要保证默认的环境ID要匹配其中一个环境ID。