下面是我的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
不知道是哪里导致慢了。