MyBatis 流式查询
生活随笔
收集整理的這篇文章主要介紹了
MyBatis 流式查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本概念
流式查詢指的是查詢成功后不是返回一個集合而是返回一個迭代器,應用每次從迭代器取一條查詢結果。流式查詢的好處是能夠降低內存使用。
如果沒有流式查詢,我們想要從數據庫取 1000 萬條記錄而又沒有足夠的內存時,就不得不分頁查詢,而分頁查詢效率取決于表設計,如果設計的不好,就無法執行高效的分頁查詢。因此流式查詢是一個數據庫訪問框架必須具備的功能。
流式查詢的過程當中,數據庫連接是保持打開狀態的,因此要注意的是:執行一個流式查詢后,數據庫訪問框架就不負責關閉數據庫連接了,需要應用在取完數據后自己關閉。
MyBatis 流式查詢接口
MyBatis 提供了一個叫 org.apache.ibatis.cursor.Cursor 的接口類用于流式查詢,這個接口繼承了 java.io.Closeable 和 java.lang.Iterable 接口,由此可知:
除此之外,Cursor 還提供了三個方法:
示例:
@RestController @Api(tags = "XcLogController") @RequestMapping("/xc_log") @Slf4j public class XcLogController {@Resourceprivate XcLogMapper xcLogMapper;@ApiOperation("流式查詢")@RequestMapping(value = "/streamQuery", method = RequestMethod.GET)@Transactionalpublic List<XcLog> streamQuery(XcLog xcLog) {log.info("/xc_log/streamQuery");// return xcLogMapper.streamQuery(xcLog);try (Cursor<XcLog> cursor = xcLogMapper.streamQuery(xcLog)) {cursor.forEach(t -> {// log.info(t.toString());});} catch (IOException e) {e.printStackTrace();}return null;}} public interface XcLogMapper {Cursor<XcLog> streamQuery(XcLog xcLog);} <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xc.xcspringboot.mapper.xcLog.XcLogMapper"><resultMap id="XcLogResultMap" type="com.xc.xcspringboot.model.xcLog.XcLog"><result column="id" property="id"/><result column="create_time" property="createTime"/><result column="update_time" property="updateTime"/><result column="is_delete" property="isDelete"/></resultMap><select id="streamQuery" resultMap="XcLogResultMap" fetchSize="100">select *from xc_log</select></mapper>總結
以上是生活随笔為你收集整理的MyBatis 流式查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上供品可以吃荔枝吗?
- 下一篇: 刷题日志1.0