MyBatis中ResultHandler的使用


背景   

  有一種場景,導出文件100萬條數據,如果直接mybatis把整個數據查詢到list中。

  那么,就有一個問題,如果數據量大的話,就會導致大對象,內存溢出(OOM)。

  這個時候我們就可以利用Mybatis中的ResultHandler來處理。

 ResultHandler接口

  ResultHandler接口只有一個方法handleResult,這個方法的作用是:

    我們可以在這里添加處理每一條(sql查詢返回的每一條數據)數據的邏輯。

 

  

public class MyExport implements ResultHandler {
    
    @Override
    public void handleResult(ResultContext resultContext) {
        Object resultObject = resultContext.getResultObject();
        System.out.println(resultObject.toString());
        // TODO 在這里將每一條數據寫入文件    
    }
}
 void selectVideoList(ResultHandler<Video> resultHandler);
 <select id="selectVideoList"  resultType="com.pig.model.Video">
        select * from video limit 10
    </select>

test方法

@SpringBootTest(classes = HApplication.class)
@RunWith(SpringRunner.class)
public class MainTest {

    @Autowired
    private VideoMapper videoMapper;

    @Test
    public void test() {
        MyExport export = new MyExport();
        videoMapper.selectVideoList(export);
        System.out.println("ok");
    }

}

注意

  sql查詢接口的返回值,類型為void。

  所以並沒有接受這個返回值,不會產生大對象。

  只是在查詢數據的過程中,處理了每一條數據,並沒有保存數據在內存中。

 

 

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM