我在Java中使用iBatis作为ORM框架。 我有一个选择陈述
<select id="getList" resultMap="correctMap">
SELECT *
FROM SOME_TABLE
</select>
我正在使用queryForList方法:
List<MappedObject> list = getSqlMapClientTemplate().queryForList("getList");
但是它检索了大量数据并且此查询的性能非常慢。
我对这个问题的假设是iBatis具有默认的提取大小(例如在JDBS中是10),所以这就是它如此慢的原因。所以我想设置更大的提取大小(例如1000)。我怎么能这样做?
还是我看错了?
注意:我需要所有数据,因此在queryForList
方法中设置最大结果对我来说不适合。
List queryForList(String id,
Object parameterObject,
int skip,
int max)
答案 0 :(得分:12)
<select id="SELECT_TABLE" parameterType="String" fetchSize="500" resultType="hashmap">
SELECT * FROM TABLE WHERE NAME = #{value}
</select>
答案 1 :(得分:1)
是的,你可以在更高的级别设置fetchSize,而不必担心每次选择都会这样做。
第1步
创建文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="defaultFetchSize" value="5000"/>
</settings>
</configuration>
您可以添加mybatis支持的任何值 http://www.mybatis.org/mybatis-3/configuration.html
第2步
将此作为资源加载到Config文件中。这是Spring 4的例子
@Value("classpath:mybatis-config.xml")
private Resource myBatisResource ;
第3步:传递给你SqlSessionFactoryBean
sessionFactory.setConfigLocation(myBatisResource);
注意:我使用myBatis 3.3.0执行此操作。它不适用于myBatis 3.4.4(存在开放缺陷)
这将确保所有select语句都分配了fetchSize属性。