在接觸一個新東西,總免不了走一些彎路,也正是在這些彎路中,咱們不斷的成長。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