1. 插件(plugins)
    1. MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用
    2. 允许使用插件来拦截的方法调用包括
      1. Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
      2. ParameterHandler (getParameterObject, setParameters)
      3. ResultSetHandler (handleResultSets, handleOutputParameters)
      4. StatementHandler (prepare, parameterize, batch, update, query)
    3. 方法
      1. 只需实现 Interceptor 接口,并指定了想要拦截的方法签名即可
      2. 例子
        1. 拦截在 Executor 实例中所有的 “update” 方法调用
        2. // ExamplePlugin.java @Intercepts({@Signature( type= Executor.class, method = "update", args = {MappedStatement.class,Object.class})}) public class ExamplePlugin implements Interceptor { public Object intercept(Invocation invocation) throws Throwable { return invocation.proceed(); } public Object plugin(Object target) { return Plugin.wrap(target, this); } public void setProperties(Properties properties) { } }
        3. <!-- mybatis-config.xml --> <plugins> <plugin interceptor="org.mybatis.example.ExamplePlugin"> <property name="someProperty" value="100"/> </plugin> </plugins>
  2. databaseIdProvider
    1. 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性
    2. MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句
    3. <databaseIdProvider type="DB_VENDOR" />
    4. <databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle" /> </databaseIdProvider>
  3. 映射器(mappers)
    1. 概念
      1. 用于引用定义好的映射定义,告诉mybatis去哪里找我们的sql定义配置
    2. 四中方式
      1. 直接引用xml文件
        1. <mappers> <mapper resource="com/yu/res/UserMapper.xml" /> </mappers>
      2. 通过绝对路径引用,注意在绝对路径前加上:“file:///”
        1. <mappers> <mapper url="file:///D:/workspace/mywork/MyBatis/src/com/yu/res/UserMapper.xml"/> </mappers>
      3. 引用mapper接口对象的方式
        1. <mappers> <mapper resource="com.yu.mapper.UserMapper" /> </mappers>
      4. 引用mapper接口包的方式
        1. <mappers> <package name="com.yu.mapper"/> </mappers>
  4. 配置环境(environments)
    1. 概念
      1. 配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中
      2. 不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。
    2. 使用场景
      1. 1)为了开发设置不同的数据库配置
      2. 2)测试和生产环境数据库不同
      3. 3)有多个数据库却共享相同的模式,即对不同的数据库使用相同的SQL映射
    3. 代码
      1. <!-- 对事务的管理和连接池的配置 --> <environments default="oracle_jdbc"> <environment id="oracle_jdbc"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.oracle.driverClassName}" /> <property name="url" value="${jdbc.oracle.url}" /> <property name="username" value="${jdbc.oracle.username}" /> <property name="password" value="${jdbc.oracle.password}" /> </dataSource> </environment> <environment id="mysql_jdbc"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.mysql.driverClassName}" /> <property name="url" value="${jdbc.mysql.url}" /> <property name="username" value="${jdbc.mysql.username}" /> <property name="password" value="${jdbc.mysql.password}" /> </dataSource> </environment> </environments>
      2. 用default指定默认的数据库链接::<environments default="oracle_jdbc">
    4. 根据数据库环境,获取SqlSessionFactory
      1. SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
      2. SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);
  5. environment中的配置
    1. transactionManager
      1. 事务管理器
      2. 例子
        1. <transactionManager type="JDBC" />
      3. type取值
        1. JDBC:简单的使用JDBC的提交和回滚设置,一览与从数据员得到的链接来管理事务范围
        2. MANAGED:这个配置几乎什么都没做,它从来不提交或回滚一个链接,而它让容器来管理事务的整个生命周期
    2. dataSource
      1. 数据源
      2. 例子
        1. <dataSource type="POOLED"> <property name="driver" value="${jdbc.mysql.driverClassName}" /> <property name="url" value="${jdbc.mysql.url}" /> <property name="username" value="${jdbc.mysql.username}" /> <property name="password" value="${jdbc.mysql.password}" /> </dataSource>
      3. type取值
        1. UNPOOLED
          1. 这个数据源的实现是每次被请求时打开和关闭连接。速度会有一些慢,适用于简单的应用程序。
        2. POOLED
          1. 这是JDBC链接对象的数据源连接池的实现,用来避免创建新的链接实例时必要的连接和认证时间。适用于当前Web应用程序用来快速响应请求
        3. JNDI
          1. 这个数据源是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后设置JNDI上下文的引用