在spring,mybatis整合配置中走的彎路(1)

 在接觸一個新東西,總免不了走一些彎路,也正是在這些彎路中,咱們不斷的成長。git

從git上把以前寫的代碼扒下來,看看我在當初使用spring與mybatis中所走的彎路,路過的君子也可引覺得戒。spring

<!-- 事務管理器 -->
    <bean id="txManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 事務支持 -->
    <tx:annotation-driven transaction-manager="txManager" />
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
<!--引入mybatis的表映射配置文件-->
<property name="mapperLocations" value="classpath*:mappers/*.xml" />

<!--mybatis的一個配置文件,在這個文件里加了一個分頁攔截擴展,如下貼出這個文件內容--> <property name="configLocation" value="classpath:mybatisConfig.xml"></property> </bean> <bean id="sqlSession" class="com.oa.bo.MySqlSessionFactory"> <property name="sessionFactory" ref="sqlSessionFactory"></property> 這裏把sqlSessionFactory注入,後面把這部代碼貼出來,看一下神同樣的實現^_^ </bean>
mybatisConfig.xml
<configuration>
    <properties>
        <property name="dialect" value="MYSQL" />
    </properties>
    <plugins>
        <plugin interceptor="com.oa.utils.pager.PaginationInterceptor">  這裏作一個攔截器,來處理分頁的查詢
        </plugin>
    </plugins>
</configuration>
MySqlSessionFactory的實現代碼,不要太崇拜喲。
public class MySqlSessionFactory {
    static Logger log = Logger.getRootLogger();
    final static String CACHENAME = ConstVar.FEREVER_CACHE;
    final static String CACHEKEY = "SqlSessionFactory";
    private SqlSessionFactory sqlSessionFactory;

    public SqlSessionFactory getSessionFactory() {
        Object object = EhCacheUtil.getInstance().get(CACHENAME, CACHEKEY);
        if (object != null) {
            log.info("從緩存區取值");
            sqlSessionFactory = (SqlSessionFactory) object;
        } else {
            log.info("沒有緩存~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!");
        }
        return sqlSessionFactory;
    }

    public void setSessionFactory(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
        log.info("對象的值:" + sqlSessionFactory);
        EhCacheUtil.getInstance().put(CACHENAME, CACHEKEY, sqlSessionFactory);
    }

    public SqlSession getSqlSession() {
        return getSessionFactory().openSession();
    }
}

這裏把session存在ehcache永久緩存裏了,明眼人一看這就有問題。但具體的問題,沒有實測,沒有具體數據,也就不便亂說了。sql

 

下面在每一個業務邏輯上這樣使用緩存

public abstract class BaseBoImp extends MySqlSessionFactory implements BaseBo {
......

}


public class SysRoleBo extends BaseBoImp {

    Logger log = Logger.getRootLogger();

    /**
     * 批量刪除數據
     */
    public ReturnResult delByIds(String ids) {
        SqlSession session = getSqlSession();
......
}
.......
}

全部使用的都共用上面緩存裏的session。session

每次本身手動關閉,事務也是手動進行管理。mybatis

 

 

這些是開始實現的一個配置,後面會進行第二階段的彎路之行。app

相關文章
相關標籤/搜索