在spring,mybatis整合配置中走的弯路(1)
在接触一个新东西,总免不了走一些弯路,也正是在这些弯路中,我们不断的成长。
从git上把之前写的代码扒下来,看看我在当初使用spring与mybatis中所走的弯路,路过的君子也可引以为戒。
<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" />
<property name="mapperLocations" value="classpath*:mappers/*.xml" />
<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永久缓存里了,明眼人一看这就有问题。但具体的问题,没有实测,没有具体数据,也就不便乱说了。
下面在每个业务逻辑上这样使用
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。
每次自己手动关闭,事务也是手动进行管理。
这些是开始实现的一个配置,后面会进行第二阶段的弯路之行。