zoukankan      html  css  js  c++  java
  • 在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。

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

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

  • 相关阅读:
    P3803 【模板】多项式乘法(FFT)
    P2264 情书 Trie匹配
    CF877E Danil and a Part-time Job 线段树维护dfs序
    P3810 【模板】三维偏序(陌上花开)
    LOJ #6282. 数列分块入门 6
    LOJ #6281. 数列分块入门 5
    LOJ #6280. 数列分块入门 4
    LOJ #6279. 数列分块入门 3
    LOJ #6278. 数列分块入门 2
    LOJ #6277. 数列分块入门 1
  • 原文地址:https://www.cnblogs.com/xusir/p/4111534.html
Copyright © 2011-2022 走看看