你还在用分页?试试 MyBatis 流式查询,这个你知道吗?

基本概念

流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。

如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。

流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。

先分享一个MyBatis知识点思维导图给大家

MyBatis 流式查询接口

MyBatis提供了一个叫org.apache.ibatis.cursor.Cursor的接口类用于流式查询,这个接口继承了java.io.Closeable和java.lang.Iterable接口,由此可知:

  1. Cursor 是可关闭的;

  2. Cursor 是可遍历的。

除此之外,Cursor 还提供了三个方法:

  1. isOpen():用于在取数据之前判断 Cursor 对象是否是打开状态。只有当打开时 Cursor 才能取数据;

  2. isConsumed():用于判断查询结果是否全部取完。

  3. getCurrentInde

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,之前提供的代码没有正确地替换问号。对于预编译查询MyBatis的使用,以下是一个示例: 首先,在MyBatis的Mapper XML文件中定义一个查询语句,例如: ```xml <!-- 在Mapper XML中定义查询语句 --> <select id="getData" parameterType="java.util.Map" resultType="your.package.YourEntity"> SELECT * FROM table_name WHERE 1 = 1 AND bbbbb = #{bbbb} AND aaaa = #{aaaa} ORDER BY create_time DESC </select> ``` 接下来,在Java代码中使用MyBatis执行该查询: ```java import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; public class MyBatisExample { public static void main(String[] args) { try { // 加载MyBatis配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 构建参数对象 Map<String, Object> parameters = new HashMap<>(); parameters.put("aaaa", "3333"); parameters.put("bbbbb", "44444"); // 执行查询 YourEntity result = sqlSession.selectOne("your.package.YourMapper.getData", parameters); System.out.println(result); // 关闭SqlSession sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上述代码中,我们首先加载MyBatis的配置文件`mybatis-config.xml`,然后通过`SqlSessionFactoryBuilder`构建一个`SqlSessionFactory`实例。接下来,我们创建一个`SqlSession`实例,并将参数值存储在`parameters`对象中。最后,我们使用`selectOne()`方法执行查询,并将查询结果打印出来。 请确保在代码中替换`your.package`为您的实际包名,以及`YourEntity`和`YourMapper`为您的实际实体类和Mapper接口。 这样,您就可以通过MyBatis进行预编译查询并获取数据了。预编译查询可以帮助提高性能和安全性,并且MyBatis提供了便捷的方式来处理参数的绑定和结果的映射。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值