如何为 iBatis select 语句设置 fetchSize

发布于 2024-12-26 13:03:11 字数 689 浏览 0 评论 0原文

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

<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) 

I'm using iBatis as ORM framework in Java.
I have a select statement

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

And I'm using queryForList method:

List<MappedObject> list = getSqlMapClientTemplate().queryForList("getList");

But it retrieves a big amount of data and performance of this query is pretty slow.

My assumption about this issues that iBatis has default fetch size (e.g. like in JDBS is 10) so that is why it so slow. So I want to set bigger fetch size (1000 for example). How I can do so?

Or am I looking in a wrong way?

NOTE: I need all data so set max results in queryForList method is not a appropriate solution for me.

List queryForList(String id,
                  Object parameterObject,
                  int skip,
                  int max) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨落画卷 2025-01-02 13:03:11
<select id="SELECT_TABLE" parameterType="String" fetchSize="500" resultType="hashmap">
    SELECT * FROM TABLE WHERE NAME = #{value}
</select>
<select id="SELECT_TABLE" parameterType="String" fetchSize="500" resultType="hashmap">
    SELECT * FROM TABLE WHERE NAME = #{value}
</select>
z祗昰~ 2025-01-02 13:03:11

是的,您可以将 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

将其作为资源加载到您的配置文件中。这是 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 属性。

Yes you can set fetchSize at a higher level and need not worry about doing for every select.

Step 1

Create a file 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>

You can add any value supported in mybatis
http://www.mybatis.org/mybatis-3/configuration.html

Step 2

Load this as a resource in your Config file. This is Spring 4 example

@Value("classpath:mybatis-config.xml")
private Resource myBatisResource ;

Step 3 : Pass to you SqlSessionFactoryBean

sessionFactory.setConfigLocation(myBatisResource);

Note: I did this with myBatis 3.3.0. It does not work with myBatis 3.4.4(there is open defect)

This will ensure that all select statements have a fetchSize property assigned to them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文