首页 > 代码库 > 在spring,mybatis整合配置中走的弯路(1)

在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" />
<!--引入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永久缓存里了,明眼人一看这就有问题。但具体的问题,没有实测,没有具体数据,也就不便乱说了。

 

下面在每个业务逻辑上这样使用

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。

每次自己手动关闭,事务也是手动进行管理。

 

 

这些是开始实现的一个配置,后面会进行第二阶段的弯路之行。

 

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