Mybatis-Configuration(二)

plugins(插件)

1. Plugins概念

  • 在某种情况下,需要在执行程序的过程中对某一点进行拦截,并在拦截后做出一系列处理,此时就需要使用一种拦截器。
  • 在 MyBatis 中,对某种方法进行拦截调用的机制,被称为 plugin 插件
  • 插件通过动态代理机制,可以介入四大对象的任何一个方法的执行

2. 四大对象

  • Executor(update,query,flushStatements,commit,rollback,getTransaction,close,isClosed)
  • ParameterHandler(getParameterObject,setParameters)
  • ResultSetHandler(handleResultSets,handleOutputParameters)
  • StatementHandler(prepare,parameterize,batch,update,query)

3. 定义一个插件

  • 实现 Interceptor 接口
  • 并且指定需要拦截的方法的签名信息
//此注解声明此类是一个插件类
//其中可以声明多个 @Signature 
//type 为拦截的方法所属的接口类型
//method 为拦截的方法名称
//args 是参数信息
@Intercepts({
	
    @Signature(
        type=Executor.class,
        method="query",
		args={
			MappedStatement.class,
			Object.class,
            RowBounds.class,
			ResultHandler.class
		}
    )
	
})
public class QueryPlugin implements Interceptor {
    
	//intercept 方法是一个对目标方法进行拦截的抽象方法
	public Object intercept(Invocation invocation) throws Throwable {
        return invocation.proceed();
    }
 
	//plugin 方法的作用是将拦截器插入目标对象
    public Object plugin(Object target) {
        return Plugin.wrap(target,this);
    }
 
	//setProperties 方法的作用是将全局配置文件中的参数注入插件类中
    public void setProperties(Properties arg0) {}
 
}

4. plugins(插件)

<plugins>
    <plugin interceptor="cn.com.mybatis.test.QueryPlugin">
        <property name="someProperty" value="100"/>
    </plugin>
</plugins>

environments(环境配置)

1. environments

<!-- 
	environments:mybatis可以配置多种环境 
	default指定使用某种环境。可以达到快速切换环境
    尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境
-->
<environments default="dev_mysql">

	<!-- 
		environment:配置一个具体的环境信息
		id:代表当前环境的唯一标识
		transactionManager:事务管理器
		dataSource:数据源
		transactionManager、dataSource属性必须有
	-->
	<environment id="dev_mysql">
		<transactionManager type="JDBC"></transactionManager>
		<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="dev_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>

2. 事务管理器(transactionManager)

  • JDBC(JdbcTransactionFactory):使用了jdbc的提交和回滚设置,依赖于从数据源得到的连接来管理事务范围
  • MANAGED(ManagedTransactionFactory):不提交或者回滚一个连接,让容器来管理事务的整个生命周期,比如JEE应用服务器的上下文
  • 自定义事务管理器:实现TransactionFactory接口,type指定为全类名
<transactionManager type="[JDBC|MANAGED]">
    <property name="closeConnection" value="false"/>
</transactionManager>

3. 数据源(dataSource)

  • UNPOOLED: 这个数据源的实现会每次请求时打开和关闭连接。
  • POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。
  • JNDI :这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
  • 自定义数据源:实现DataSourceFactory接口,type是全类名
<dataSource type="[UNPOOLED|POOLED|JNDI]">
  <property name="driver" value="org.postgresql.Driver"/>
  <property name="url" value="jdbc:postgresql:mydb"/>
  <property name="username" value="postgres"/>
  <property name="password" value="root"/>
</dataSource>

databaseIdProvider(数据库厂商标识)

  • databaseIdProvider
<!—
	databaseIdProvider:支持多数据库厂商的;
	type="DB_VENDOR":VendorDatabaseIdProvider
		作用:就是得到数据库厂商的标识(驱动getDatabaseProductName())
			mybatis就能根据数据库厂商标识来执行不同的sql
-->
<databaseIdProvider type="DB_VENDOR">
	<!-- 为不同的数据库厂商起别名 -->
	<property name="MySQL" value="mysql"/>
	<property name="Oracle" value="oracle"/>
	<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
  • mapper.xml中 
<select id="getEmpById" resultType="com.my.mybatis.bean.Employee"
	databaseId="mysql">
	select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="com.my.mybatis.bean.Employee"
	databaseId="oracle">
	select EMPLOYEE_ID id,LAST_NAME	lastName,EMAIL email 
	from employees where EMPLOYEE_ID=#{id}
</select>

mappers(映射器)

  • mapper映射:注册sql映射的配置文件
<!-- 使用相对于类路径的资源引用 -->
<mappers>
	<mapper resource="com/mybatis/dao/AuthorMapper.xml"/>
</mappers>

<!-- 使用完全限定资源定位符(URL) -->
<mappers>
	<mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
	<mapper class="com.mybatis.dao.AuthorMapper"/>
</mappers>

<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
	<package name="com.mybatis.dao"/>
</mappers>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值