Java 如何为iBatis select语句设置fetchSize
我正在使用iBatis作为Java中的ORM框架。 我有一个select语句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" ?>
<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);