c920644981
载心问情
采纳率100%
2015-09-30 02:16 阅读 2.7k

MyBatits执行效率问题

下面是我的sql:

 <select id="getKnowledgePageList" resultMap="KnowledgeMap"
        parameterType="Knowledge">
        select d.id recid, d.id, d.knowledgeName, d.isLeaf,
            case d.isLeaf when 1 then 0
            when 0 then (
                select max(t.isLeaf) from tb_knowledge t
                where t.parentKnowledgeId = d.id)
            end as hasLeaf
        from tb_knowledge d 
        where 
        d.parentKnowledgeId=#{parentKnowledgeId} 
        and 
        d.knowledgeStatus=#{knowledgeStatus}
    </select>

在controller里面通过service的接口调用dao的getKnowledgePageList接口,这条sql在客户端执行很快,在0.20s左右,但是在程序中通过这种方式执行很慢,一般都在2000ms左右,10倍了,那个占位符#我也换成$试过了,甚至把参数写死,还是很慢,速度没有明显提升。

下面是我的mybatits配置文件:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置 MyBatis SqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="plugins">
            <array>
                <!-- 
                 | 分页插件配置 
                 | 插件首先会根据方言查找实现类,如果未找到则使用自定义的实现类,两者均为配置则抛出异常
                 | dialectType 数据库方言  
                 |             默认支持  mysql|oracle
                 | dialectClazz 方言实现类
                 |              自定义需要实现 org.springagg.mybatis.IDialect接口
                 | -->
                <bean id="paginationInterceptor" class="com.dc.mybatis.plugins.PaginationInterceptor">
                    <!-- 分页插件属性配置 优先采用方言配置,无匹配时采用实现类。二者均未配置则抛出异常 -->
                    <!-- 数据库方言 默认仅支持 mysql[1] 与 oracle[2] -->
                    <property name="dialectType" value="1" />
                    <!-- 方言实现类 自定义实现 -->
                    <!-- 实现 org.springagg.mybatis.IDialect 接口 -->
                    <property name="dialectClazz" value="com.dc.mybatis.dialect.MySqlDialect" />
                </bean>
            </array>
        </property>
        <!-- mapper和resultmap配置路径 -->
        <property name="mapperLocations">
            <list>
                <!--表示在classpath下mapper目录中以-mapper.xml结尾所有文件 -->
                <value>classpath:mapper/*-mapper.xml</value>
            </list>
        </property>
        <!-- 扫描别名定义,多个包名以逗号或分号分隔 -->
        <property name="typeAliasesPackage" value="com.dc.web.bean" />
    </bean>

    <!-- 扫描目录在com.dc.web.dao下所有继承 SqlMapper接口的Mapper接口,也可以使用注解来标记 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 可以指定多个包名,以逗号或分号分隔 -->
        <property name="basePackage" value="com.dc.web.dao" />
        <property name="annotationClass" value="org.springframework.stereotype.Repository" />
        <!-- 以注解标记 -->
        <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate" />
    </bean>

    <!--通过模板定制MyBatis的行为 -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
        <!-- 更新采用批量(BATCH)模式 insert delete 返回值将会为 -2147482646 配置和设定执行器 -->
        <!-- SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器可以重复执行语句和批量更新。 -->
        <constructor-arg index="1" value="SIMPLE" />
    </bean>
</beans>

链接池配置:

druid.initialSize=1
druid.minIdle=2
druid.maxActive=50
druid.maxWait=60000
druid.timeBetweenEvictionRunsMillis=60000
druid.minEvictableIdleTimeMillis=300000
druid.validationQuery=SELECT 'x'
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
druid.poolPreparedStatements=true
druid.maxPoolPreparedStatementPerConnectionSize=20
druid.filters=wall,stat

不知道是哪里导致慢了。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    Evankaka Evankaka 2015-09-30 02:26

    2000ms 也就2s,也差不多了,算上java语句 的执行,mybatis的处理

    点赞 评论 复制链接分享

相关推荐