13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

创新互联MyBatis教程:MyBatis 3 XML配置-环境配置

环境配置(environments)

Mybatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同Schema的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的锡林浩特网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

不过要记住:尽管可以配置多个环境,但每个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 ​元素定义了如何配置环境。


  
    
      
    
    
      
      
      
      
    
  

注意一些关键点:

默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。

事务管理器(transactionManager)

在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):


  

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用TransactionFactory接口实现类的全限定名或类型别名代替它们。

public interface TransactionFactory {
  default void setProperties(Properties props) { // 从 3.5.2 开始,该方法为默认方法
    // 空实现
  }
  Transaction newTransaction(Connection conn);
  Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);
}

在事务管理器实例化后,所有在 XML 中配置的属性将会被传递给 ​setProperties()​ 方法。你的实现还需要创建一个 ​Transaction接口的实现类,这个接口也很简单:

public interface Transaction {
  Connection getConnection() throws SQLException;
  void commit() throws SQLException;
  void rollback() throws SQLException;
  void close() throws SQLException;
  Integer getTimeout() throws SQLException;
}

使用这两个接口,你可以完全自定义 MyBatis 对事务的处理。

数据源(dataSource)

dataSource元素使用标准的JDBC数据源接口来配置 ​JDBC连接对象的资源。

有三种内建的数据源类型(也就是 ​type="[UNPOOLED|POOLED|JNDI]"​):

UNPOOLED​– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。​UNPOOLED ​类型的数据源仅仅需要配置以下 6 种属性:

作为可选项,你也可以传递属性给数据库驱动。只需在属性名加上“​driver.​”前缀即可,例如:

这将通过 ​DriverManager.getConnection(url, driverProperties)​ 方法传递值为 UTF8 的 ​encoding ​属性给数据库驱动。

POOLED​– 这种数据源的实现利用“池”的概念将 ​JDBC连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。

除了上述提到 ​UNPOOLED下的属性外,还有更多属性用来配置 ​POOLED ​的数据源:

JNDI ​– 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。这种数据源配置只需要两个属性:

和其他数据源配置类似,可以通过添加前缀“​env.​”直接把属性传递给 ​InitialContext​。比如:

这就会在 ​InitialContext ​实例化时往它的构造方法传递值为 UTF8 的 ​encoding ​属性。

你可以通过实现接口 ​org.apache.ibatis.datasource.DataSourceFactory​ 来使用第三方数据源实现:

public interface DataSourceFactory {
  void setProperties(Properties props);
  DataSource getDataSource();
}

org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory​ 可被用作父类来构建新的数据源适配器,比如下面这段插入 C3P0 数据源所必需的代码:

import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {

  public C3P0DataSourceFactory() {
    this.dataSource = new ComboPooledDataSource();
  }
}

为了令其工作,记得在配置文件中为每个希望 MyBatis 调用的 ​setter ​方法增加对应的属性。 下面是一个可以连接至 PostgreSQL 数据库的例子:


  
  
  
  

标题名称:创新互联MyBatis教程:MyBatis 3 XML配置-环境配置
网页网址:http://cdbrznjsb.com/article/dhsoiic.html

其他资讯

让你的专属顾问为你服务