Spring框架学习【SqlMapClientTemplate对Ibatis的封装】

本文介绍了Spring如何通过SqlMapClientFactoryBean管理Ibatis,作为IoC容器,配置Ibatis的配置文件、映射文件、数据源等。SqlMapClientFactoryBean实现了FactoryBean和InitializingBean接口,用于初始化和创建SqlMapClient。接着,文章讨论了SqlMapClientTemplate,它是对Ibatis操作的封装,提供了execute方法和对Ibatis API的封装,简化了开发者的工作。
摘要由CSDN通过智能技术生成

1. SqlMapClientFactoryBean:

Spring中通过SqlMapClientTemplate提供对Ibatis的支持,与Spring对Hibernate的支持类似,Spring中SqlMapClientFactoryBean就是管理Ibatis的IoC容器,我们首先分析SqlMapClientFactoryBean的源码:

[java] view plaincopyprint?
  1. //Spring管理Ibatis的IoC容器   
  2. public class SqlMapClientFactoryBean implements FactoryBean<SqlMapClient>, InitializingBean {  
  3.     //当前线程绑定Ibatis blob/clob等大字段数据处理器资源   
  4.     private static final ThreadLocal<LobHandler> configTimeLobHandlerHolder = new ThreadLocal<LobHandler>();  
  5.     public static LobHandler getConfigTimeLobHandler() {  
  6.         return configTimeLobHandlerHolder.get();  
  7.     }  
  8.     //Ibatis配置文件路径   
  9.     private Resource[] configLocations;  
  10.     //Ibatis映射文件路径   
  11.     private Resource[] mappingLocations;  
  12.     //Ibatis sqlMapClient属性   
  13.     private Properties sqlMapClientProperties;  
  14.     //数据源   
  15.     private DataSource dataSource;  
  16.     //使用Spring事务包装数据源   
  17.     private boolean useTransactionAwareDataSource = true;  
  18.     //事务配置类   
  19.     private Class transactionConfigClass = ExternalTransactionConfig.class;  
  20.     //事务配置属性   
  21.     private Properties transactionConfigProperties;  
  22.     //blob/clob等lob类型处理器   
  23.     private LobHandler lobHandler;  
  24.     //Ibatis sqlMapClient   
  25.     private SqlMapClient sqlMapClient;  
  26.     public SqlMapClientFactoryBean() {  
  27.         this.transactionConfigProperties = new Properties();  
  28.     //不允许事务自动提交   
  29.     this.transactionConfigProperties.setProperty("SetAutoCommitAllowed", "false");  
  30.     }  
  31.     //指定Ibatis sqlMapClient配置文件路径   
  32.     public void setConfigLocation(Resource configLocation) {  
  33.         this.configLocations = (configLocation != null ? new Resource[] {configLocation} : null);  
  34.     }  
  35.     //指定多个sqlMapClient配置文件路径,这些配置文件在运行时合并   
  36.     public void setConfigLocations(Resource[] configLocations) {  
  37.         this.configLocations = configLocations;  
  38.     }  
  39.     //指定Ibatis映射文件路径,这些映射文件在运行时被合并到SqlMapClient的配置中   
  40.     public void setMappingLocations(Resource[] mappingLocations) {  
  41.         this.mappingLocations = mappingLocations;  
  42.     }  
  43.     //指定Ibatis SqlMapClient可选的属性,即在SqlMapClient配置文件中通过属性   
  44. //文件设置的属性   
  45.     public void setSqlMapClientProperties(Properties sqlMapClientProperties) {  
  46.         this.sqlMapClientProperties = sqlMapClientProperties;  
  47.     }  
  48.     //设置Ibatis使用的数据源   
  49.     public void setDataSource(DataSource dataSource) {  
  50.         this.dataSource = dataSource;  
  51.     }  
  52.     //设置数据源是否使用事务包装   
  53.     public void setUseTransactionAwareDataSource(boolean useTransactionAwareDataSource) {  
  54.         this.useTransactionAwareDataSource = useTransactionAwareDataSource;  
  55.     }  
  56.     //设置Ibatis使用的事务配置类,默认是//com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig   
  57.     public void setTransactionConfigClass(Class transactionConfigClass) {  
  58.         if (transactionConfigClass == null || !TransactionConfig.class.isAssignableFrom(transactionConfigClass)) {  
  59.             throw new IllegalArgumentException("Invalid transactionConfigClass: does not implement " +  
  60.                     "com.ibatis.sqlmap.engine.transaction.TransactionConfig");  
  61.         }  
  62.         this.transactionConfigClass = transactionConfigClass;  
  63.     }  
  64.     //设置Ibatis事务配置类属性   
  65.     public void setTransactionConfigProperties(Properties transactionConfigProperties) {  
  66.         this.transactionConfigProperties = transactionConfigProperties;  
  67.     }  
  68.     //设置Ibatis使用的处理clob/blob等大字段的处理器   
  69.     public void setLobHandler(LobHandler lobHandler) {  
  70.         this.lobHandler = lobHandler;  
  71.     }  
  72.     //IoC容器初始化完成之后的回调方法,是InitializingBean接口的实现方法   
  73.     public void afterPropertiesSet() throws Exception {  
  74.         //配置lob处理器   
  75.         if (this.lobHandler != null) {  
  76.             configTimeLobHandlerHolder.set(this.lobHandler);  
  77.         }  
  78.         //创建Ibatis的SqlMapClient   
  79.         try {  
  80.             this.sqlMapClient = buildSqlMapClient(this.configLocations, this.mappingLocations, this.sqlMapClientProperties);  
  81.             //为创建的SqlMapClient设置数据源   
  82.             if (this.dataSource != null) {  
  83.                 //创建事务配置实例   
  84.                 TransactionConfig transactionConfig = (TransactionConfig) this.transactionConfigClass.newInstance();  
  85.                 //获取数据源   
  86.                 DataSource dataSourceToUse = this.dataSource;  
  87.                 //如果Ibatis配置指定使用事务包装的数据源,并且当前获取到的数据源   
  88.                 //不是事务包装数据源代理类型   
  89.                 if (this.useTransactionAwareDataSource && !(this.dataSource instanceof TransactionAwareDataSourceProxy)) {  
  90.                     //为指定数据源创建事务包装代理   
  91.                     dataSourceToUse = new TransactionAwareDataSourceProxy(this.dataSource);  
  92.                 }  
  93.                 //事务配置对象设置数据源   
  94.                 transactionConfig.setDataSource(dataSourceToUse);  
  95.             //初始化事务配置对象 transactionConfig.initialize(this.transactionConfigProperties);   
  96.                 applyTransactionConfig(this.sqlMapClient,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值