Java 如何为iBatis select语句设置fetchSize

Java 如何为iBatis select语句设置fetchSize,java,performance,ibatis,resultset,Java,Performance,Ibatis,Resultset,我正在使用iBatis作为Java中的ORM框架。 我有一个select语句 <select id="getList" resultMap="correctMap"> SELECT * FROM SOME_TABLE </select> 是的,您可以在更高的级别设置fetchSize,并且不必为每次选择而担心 第一步 创建一个文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?>

我正在使用iBatis作为Java中的ORM框架。 我有一个select语句

<select id="getList" resultMap="correctMap">
    SELECT *
    FROM SOME_TABLE
</select>

是的,您可以在更高的级别设置fetchSize,并且不必为每次选择而担心

第一步

创建一个文件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>
步骤3:将SqlSessionFactoryBean传递给您

sessionFactory.setConfigLocation(myBatisResource);
注意:我是用myBatis 3.3.0做的。它不适用于myBatis 3.4.4存在开放性缺陷


这将确保所有select语句都有一个fetchSize属性分配给它们。

是否可以将fetchSize设置为全局配置,而不是在每个查询配置中?据我所知,这是不可能的。您可以实现插件拦截器MyBatis 3用户手册第17页,它可以在通过它的所有select查询上设置此属性。您的版本可能不存在此值。我可以动态设置fetchSize值吗?对于我的记录,检索109k条记录需要1m40秒。设置fetchSize=75将其缩短为15秒,fetchSize=500将其缩短为4秒,fetchSize=1000将其缩短为2.8秒,fetchSize=2000将109000行的检索缩短为2.3秒。这是在基于虚拟机的oracle服务器上实现的。您的里程数可能会有所不同,这也取决于具体的SQL,但对我来说,最合适的地方是在500到1000之间。
<select id="SELECT_TABLE" parameterType="String" fetchSize="500" resultType="hashmap">
    SELECT * FROM TABLE WHERE NAME = #{value}
</select>
<?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>
@Value("classpath:mybatis-config.xml")
private Resource myBatisResource ;
sessionFactory.setConfigLocation(myBatisResource);