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

  1):如何配置

<environments default="development"> <!--默认使用的环境 ID(比如:default="development")。-->
<environment id="development"><!--每个 environment 元素定义的环境 ID(比如:id="development")。-->
<transactionManager type="JDBC"/><!--事务管理器的配置(比如:type="JDBC")-->
<dataSource type="POOLED"><!--数据源的配置(比如: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>
</environments>

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

    • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
    • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>

    提示:使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置,这个两个分别对应JdbcTransactionFactory类生成的JdbcTransaction 对象实现和 ManagedTransactionFactory类生成的ManagedTransaction 对象实现

    A:自定义事务管理器,需要实现TransactionFactory接口跟Transaction接口,其中TransactionFactory接口已经被JdbcTransactionFactory类跟ManagedTransactionFactory类实现,我们可以直接实现接口或者使用已有的实现类生成的对象,这里我们使用已有的实现类生成的对象JdbcTransaction类

public class MyTransaction extends JdbcTransaction implements Transaction {

    public MyTransaction(DataSource ds, TransactionIsolationLevel desiredLevel, boolean desiredAutoCommit) {
super(ds, desiredLevel, desiredAutoCommit);
} public MyTransaction(Connection connection) {
super(connection);
} //获取连接
@Override
public Connection getConnection() throws SQLException {
return super.getConnection();
} //提交
@Override
public void commit() throws SQLException {
super.commit();
} //回滚
@Override
public void rollback() throws SQLException {
super.rollback();
} //关闭
@Override
public void close() throws SQLException {
super.close();
} //超时时间
@Override
public Integer getTimeout() throws SQLException {
return super.getTimeout();
}
}

    B:在mybatis配置文件中注册自定义事务管理

<!--type:自定义类的全限定类名-->
<transactionManager type="com.james.mybatis.transaction.MyTransaction"/>

  3):dataSource:使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")

    • UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接
      • driver – 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
      • url – 这是数据库的 JDBC URL 地址。
      • username – 登录数据库的用户名。
      • password – 登录数据库的密码。
      • defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
      • defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)。查看 java.sql.Connection#setNetworkTimeout() 的 API 文档以获取更多信息。
      • driver.encoding=UTF8 –  传递属性给数据库驱动。这将通过 DriverManager.getConnection(url, driverProperties) 方法传递值为 UTF8 的 encoding 属性给数据库驱动
    • POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间
    • JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用

2.databaseIdProvider:MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性

  1):为了支持多厂商特性,mybatis配置文件中使用<databaseIdProvider type="DB_VENDOR" />就能解决

  2): DB_VENDOR 实现会将 databaseId 设置为 DatabaseMetaData#getDatabaseProductName() 返回的字符串。 由于通常情况下这些字符串都非常长,而且相同产品的不同版本会返回不同的值,你可能想通过设置属性别名来使其变短:

<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>

    在提供了属性别名时,databaseIdProvider 的 DB_VENDOR 实现会将 databaseId 设置为数据库产品名与属性中的名称第一个相匹配的值,如果没有匹配的属性,将会设置为 “null”。 在这个例子中,如果 getDatabaseProductName() 返回“Oracle (DataDirect)”,databaseId 将被设置为“oracle”。  

  3):还可以通过实现接口 org.apache.ibatis.mapping.DatabaseIdProvider 并在 mybatis-config.xml 中注册来构建自己的 DatabaseIdProvider,把配置文件的Type设置为自定义类的全限定类名。

3:mappers:告诉 MyBatis 到哪里去找映射文件;可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等

<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>

  

最新文章

  1. Linux IPTABLES端口转发
  2. poj 3069 Saruman&#39;s Army
  3. WEB前端开发CSS基础样式全面总结
  4. Vue组件之自定义表单组件
  5. Timer1控件的属性
  6. Java多线程——&lt;一&gt;概述、定义任务
  7. HDU1863 畅通project 【最小生成树Prim】
  8. 文档在线预览开源实现方案二:OpenOffice + pdf.js
  9. node.js下mongoose简单操作实例
  10. ConcurrentHashMap、HashTable、HashMap的区别
  11. (五)solr7.1.0之solrJ的使用
  12. ThinkPHP的Rbac权限控制
  13. 51 nod 1610 路径计数(Moblus+dp)
  14. JQuery常用功能的性能优化
  15. jmeter-PC注册遇到的问题与解决
  16. Git,Github和Gitlab简介和使用方法
  17. centos 7 安装iptables防火墙
  18. org.springframework.jdbc.UncategorizedSQLException
  19. bzoj1215
  20. 2018.08.04 洛谷P3380 【模板】二逼平衡树(树套树)

热门文章

  1. pwnable.kr-mistake-witeup
  2. 实战:一种在http请求中使用protobuffer+nginx+lua收集打点日志的方案
  3. Java 审计之XXE篇
  4. makefile的隐式规则
  5. LeetCode刷题总结-DFS、BFS和回溯法篇
  6. jvm优化案例
  7. SQLMAP注入Access数据库
  8. python图像的绘制
  9. 实时,异步网页使用jTable, SignalR和ASP。NET MVC
  10. CentOS 7 系统的安装