针对MyBatis流式查询和mybatis查询结果这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展javaday55【Mybatis连接池与事务深入、Mybatis的动态SQL语句、Myba
针对MyBatis流式查询和mybatis查询结果这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】、java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】、java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】、Mybatis Plus中的流式查询案例等相关知识,希望可以帮助到你。
本文目录一览:- MyBatis流式查询(mybatis查询结果)
- java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】
- java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】
- java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】
- Mybatis Plus中的流式查询案例
MyBatis流式查询(mybatis查询结果)
转自:
http://www.java265.com/JavaFramework/MyBatis/202206/3614.html
下文笔者讲述Mybatis流式查询的相关简介说明,如下所示
Mybatis流式查询简介
流式查询简介: 我们将MyBatis返回数据为一个迭代器,这种查询模式称之为“流式查询” 流式查询的返回值: 使用迭代器逐条的遍历数据 流式查询注意事项: 流式查询过程中 数据库连接必须保持一直打开 并且执行完查询后需要手动的关闭数据库连接
MyBatis流式查询接口
MyBatis提供了 org.apache.ibatis.cursor.Cursor 的接口类用于流式查询 此接口继承了 java.io.Closeable 和 java.lang.Iterable 接口 所以Cursor 是可关闭/遍历的。
Cursor常见的方法
方法名 | 备注 |
isopen() | 用于在取数据之前判断 Cursor 对象是否是打开状态,只有当打开时 Cursor 才能取数据 |
isConsumed() | 用于判断查询结果是否全部取完 |
getCurrentIndex() | 返回已经获取了多少条数据 |
使用 Cursor 流式接口
@Mapper public interface TestMapper { @Select("select * from test limit #{limit}") Cursor<Test> scan(@Param("limit") int limit); } @GetMapping("test/1/{limit}") public void testFun(@PathVariable("limit") int limit) throws Exception { try ( sqlSession sqlSession = sqlSessionFactory.openSession(); // 1 Cursor<Test> cursor = sqlSession.getMapper(TestMapper.class).scan(limit) // 2 ) { cursor.forEach(Test -> { }); } } 上述代码1位置 开启一个sqlSession(实际上也代表了一个数据库连接) 并保证它最后能关闭 2位置 使用 sqlSession 来获得 Mapper 对象 采用以上模式能保证得到的 Cursor 对象是打开状态的。 2.事务控制 TransactionTemplate 在 Spring 中,可以用 TransactionTemplate 来执行一个数据库事务 @GetMapping("test/2/{limit}") public void testFun(@PathVariable("limit") int limit) throws Exception { TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); // 1 transactionTemplate.execute(status -> { // 2 try (Cursor<Test> cursor = TestMapper.scan(limit)) { cursor.forEach(test -> { }); } catch (IOException e) { e.printstacktrace(); } return null; }); } 上面的代码中1处创建了一个 TransactionTemplate 对象 2处执行数据库事务 而数据库事务的内容则是调用Mapper对象的流式查询 注意这里的 Mapper 对象无需通过 sqlSession 创建 事务控制 @Transactional 注解 这个本质上和方案二一样,代码如下: @GetMapping("test/3/{limit}") @Transactional public void test(@PathVariable("limit") int limit) throws Exception { try (Cursor<Test> cursor = TestMapper.scan(limit)) { cursor.forEach(test -> { }); } }
java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】
第1章 Mybatis 连接池与事务深入
1.1 Mybatis 的连接池技术
1.1.1 Mybatis 连接池的分类
1.1.2 Mybatis 中数据源的配置
1.1.3 Mybatis 中 DataSource 的存取
1.1.4 Mybatis 中连接的获取过程分析
1.2 Mybatis 的事务控制
1.2.1 JDBC 中事务的回顾
1.2.2 Mybatis 中事务提交方式
1.2.3 Mybatis 自动提交事务的设置
第2章 Mybatis 的动态 SQL 语句
2.1 动态 SQL 之标签
2.1.1 持久层 Dao 接口
2.1.2 持久层 Dao 映射配置
2.1.3 测试
2.2 动态 SQL 之标签
2.2.1 持久层 Dao 映射配置
2.3 动态标签之标签
2.3.1 需求
2.3.1.1 在 QueryVo 中加入一个 List 集合用于封装参数
2.3.2 持久层 Dao 接口
2.3.3 持久层 Dao 映射配置
2.3.3.1 编写测试方法
2.4 Mybatis 中简化编写的 SQL 片段
2.4.1 定义代码片段
2.4.2 引用代码片段
第3章 Mybatis 多表查询之一对多
3.1 一对一查询(多对一)
3.1.1 方式一
3.1.1.1 定义账户信息的实体类
3.1.1.2 编写 Sql 语句
3.1.1.3 定义 AccountUser 类
3.1.1.4 定义账户的持久层 Dao 接口
3.1.1.5 定义 AccountDao.xml 文件中的查询配置信息
3.1.1.6 创建 AccountTest 测试类
3.1.1.7 小结:
3.1.2 方式二
3.1.2.1 修改 Account 类
在 Account 类中加入 User 类的对象作为 Account 类的一个属性。
3.1.2.2 修改 AccountDao 接口中的方法
3.1.2.3 重新定义 AccountDao.xml 文件
3.1.2.4 在 AccountTest 类中加入测试方法
3.2 一对多查询
3.2.1 编写 SQL 语句
3.2.2 User 类加入 List
3.2.3 用户持久层 Dao 接口中加入查询方法
3.2.4 用户持久层 Dao 映射文件配置
3.2.5 测试方法
第4章 Mybatis 多表查询之多对多
4.1 实现 Role 到 User 多对多
4.1.1 用户与角色的关系模型
4.1.2 业务要求及实现 SQL
4.1.3 编写角色实体类
4.1.4 编写 Role 持久层接口
4.1.5 编写映射文件
4.1.6 编写测试类
4.2 实现 User 到 Role 的多对多
4.2.1 User 到 Role 的多对多
4.2.2 作业:实现 User 到 Role 的一对多查询
java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】
第 1 章 Mybatis 延迟加载策略
1.1 何为延迟加载?
1.2 实现需求
1.3 使用 assocation 实现延迟加载
1.3.1 账户的持久层 DAO 接口
1.3.2 账户的持久层映射文件
1.3.3 用户的持久层接口和映射文件
1.3.4 开启 Mybatis 的延迟加载策略
1.3.5 编写测试只查账户信息不查用户信息。
1.4 使用 Collection 实现延迟加载
1.4.1 在 User 实体类中加入 List 属性
1.4.2 编写用户和账户持久层接口的方法
1.4.3 编写用户持久层映射配置
1.4.4 编写账户持久层映射配置
1.4.5 测试只加载用户信息
第 2 章 Mybatis 缓存
2.1 Mybatis 一级缓存
2.1.1 证明一级缓存的存在
2.1.1.1 编写用户持久层 Dao 接口
2.1.1.2 编写用户持久层映射文件
2.1.1.3 编写测试方法
2.1.2 一级缓存的分析
2.1.3 测试一级缓存的清空
2.2 Mybatis 二级缓存
2.2.1 二级缓存结构图
2.2.2 二级缓存的开启与关闭
2.2.2.1 第一步:在 SqlMapConfig.xml 文件开启二级缓存
2.2.2.2 第二步:配置相关的 Mapper 映射文件
2.2.2.3 第三步:配置 statement 上面的 useCache 属性
2.2.3 二级缓存测试
2.2.4 二级缓存注意事项
第 3 章 Mybatis 注解开发
3.1 mybatis 的常用注解说明
3.2 使用 Mybatis 注解实现基本 CRUD
3.2.1 编写实体类
3.2.2 使用注解方式开发持久层接口
3.2.3 编写 SqlMapConfig 配置文件
3.2.4 编写测试方法
3.3 使用注解实现复杂关系映射开发
3.3.1 复杂关系映射的注解说明
3.3.2 使用注解实现一对一复杂关系映射及延迟加载
3.3.2.1 添加 User 实体类及 Account 实体类
3.3.2.2 添加账户的持久层接口并使用注解配置
3.3.2.3 添加用户的持久层接口并使用注解配置
3.3.2.4 测试一对一关联及延迟加载
3.3.3 使用注解实现一对多复杂关系映射
3.3.3.2 编写用户的持久层接口并使用注解配置
3.3.3.3 编写账户的持久层接口并使用注解配置
3.3.3.4 添加测试方法
3.4 mybatis 基于注解的二级缓存
3.4.1 在 SqlMapConfig 中开启二级缓存支持
3.4.2 在持久层接口中使用注解配置二级缓存
java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】
一、概述
三款框架的功能对比
|
Mybatis-generator |
通用Mapper |
Mybatis-Plus |
代码生成器 |
支持自动生成Model,Mapper,Mapper XML文件 生成方式不够灵活; 生成代码功能较为简单 |
支持自动生成Entity,Mapper,Mapper XML文件; 提供通用的Mapper模板,生成方式较灵活; 生成的Model文件包含注释能够很好地与数据库表完成映射 |
支持自动生成Entity,Mapper,Mapper XML,Service,Controller文件; 提供BaseMapper接口 |
CRUD操作 |
代码生成后每个Mapper有固定的CRUD方法; 在每个Mapper上分别扩展 |
提供通用Mapper接口;方便构造统一service 可以扩展通用接口 |
提供BaseMapper接口; 可以扩展通用接口 |
条件构造器 |
每个实体类自己的Example构造条件【对象方式】 |
提供通用Example【构建sql】 |
提供Wrapper进行复杂条件构造 |
乐观锁 |
|
支持 |
支持 |
主键策略 |
|
支持 |
支持 |
分页 |
|
|
支持 |
逻辑删除 |
|
|
支持 |
通用枚举 |
|
|
支持 |
攻击Sql阻断 |
|
|
支持 |
性能分析 |
|
|
支持 |
通用Mapper是对Mybatis-generator的升级改造,解决了使用Mybatis-generator可能需要大量重构的问题,并且在这个基础上加入了一些新的功能。
Mybatis-Plus可以看作是在另一个方向上对Mybatis的升级改造,不仅能够根据数据库表快速生成pojo实体类,还封装了大量CRUD方法,使用Wrapper解决了复杂条件构造等问题,更是根据开发中常见的问题给出了一系列解决方案。
在拥有Maven和Spring boot的开发框架下,MBG、通用Mapper和MP都可以快速地完成安装,相比于MBG和通用Mapper仅需要执行插件就可以完成基本的开发工作,MP可能需要更多的开发工作量。
最佳实践参看代码:https://github.com/bjlhx15/java_base_architecture.git
二、Mybatis-generator
MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器。它为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将根据数据库表生成可用于访问表的文件。
Mybatis-generator主要完成的工作是依据数据库表创建对应的model、dao、mapping文件,可以通过Maven插件或者mybatis-generator的jar包生成。
这里介绍Maven插件使用方法:
1、在pom.xml文件中加入mybatis-generator系列插件;
2、创建generatorConfig.xml文件,在配置文件中指定数据库连接地址、生成类的存放地址、生成对应表的类名等信息;
3、执行mybatis-generator插件,即可生成相应文件;
4、此外,mybatis-generator自动生成了example类用于构造复杂的筛选条件
Mybatis-generator使用较为简单,生成的DAO类及映射文件中包含基本的CRUD操作。
需要注意的是,在一次项目中多次执行mybatis-generator,xml文件会追加,会覆盖原本的Model、DAO;可以使用如下方式
1、每次清理要生成的xml
2、自动生成的写入auto,
3、个人扩展的使用上图方式
可以参看上述github代码
三、通用Mapper【tk.mybatis】
官网:https://github.com/abel533/Mapper/wiki
当数据库字段变化频繁时,使用MBG(mybatis-generator)会带来大量的重构工作,对此,通用Mapper给出的解决办法是:给予开发者一个具备丰富的单表方法并且容易扩展的通用的Mapper。
通用Mapper是对单表的CRUD操作进行了较为详细的实现,使得开发人员可以随意的按照自己的需求选择通用的方法,同时允许开发人员便捷地对通用Mapper进行扩展。
1. 在pom.xml中添加插件配置


<!-- 命令:mvn mybatis-generator:generate -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!-- 配置实际调用地址-->
<configurationFile>src/main/resources/mybatis_generatorConfig/generatorConfig-base.xml
</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
</plugin>
可以看到,通用Mapper的代码生成实际上是使用了MGB,因此通用Mapper的代码生成器只是调用了MGB,然后在这个基础上加入了一些元素来方便开发。
2. 配置文件generatorConfig.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<!--导入属性配置,前面我们写的一个配置文件,你也可以直接使用mybatis的jdbc的配置文件 -->
<properties resource="jdbc.properties"></properties>
<!-- 数据库驱动,注意,这里必须要修改成你的数据库的驱动地址 -->
<!-- 如果 pom配置这里可以不写-->
<!-- <classPathEntry location=".m2/repository/mysql/mysql-connector-java/5.1.8/mysql-connector-java-5.1.8.jar"/>-->
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<property name="caseSensitive" value="true"/>
</plugin>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}" password="${jdbc.password}">
</jdbcConnection>
<!-- <javaTypeResolver>-->
<!-- <property name="forceBigDecimals" value="false"/>-->
<!-- </javaTypeResolver>-->
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.github.bjlhx15.mybatis.springboot.base.model.auto"
targetProject="../tk-mybatis-springboot-base1/src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject:mapper xml 映射文件生成的位置 -->
<sqlMapGenerator targetPackage="autoxml"
targetProject="../tk-mybatis-springboot-base1/src/main/resources/mapper/">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!--targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.github.bjlhx15.mybatis.springboot.base.repository.auto"
targetProject="../tk-mybatis-springboot-base1/src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="accountbalance" domainObjectName="AccountBalance">
<generatedKey column="id" sqlStatement="JDBC"/>
</table>
</context>
</generatorConfiguration>
与MGB原有的配置文件相比,这里只是多了一个插件的配置,这个插件的作用是:配置生成的Mapper接口都会自动继承这个接口,也就是说,使用通用Mapper生成的mapper接口即使看上去空空如也,但已经具备了大量的对数据库的操作方法。此外,通用 Mapper 专用代码生成器生成的 Model 会在原有基础上增加 @Table,@Id,@Column 等注解,方便自动与数据库字段进行映射。
3. 在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate或者直接在执行mvn插件即可。
4. 通用Mapper同样有Example的设计,与MGB不同的是,MDB会对每一个表生成对应的Example类,而通用Mapper提供了一个统一的Example类,这个类和 MBG 生成的相比,需要自己设置属性名,这个类还额外提供了更多的方法。
通用Mapper可以看作是MGB的改进和扩展,一定程度上解决了使用MGB重构的问题。
可以参看上述github代码
四、Mybatis-Plus
官网地址:https://mp.baomidou.com/guide/generator.html
(以下简称MP)是Mybatis的增强工具(MBG和通用Mapper可看成插件),在Mybatis的基础上增加了很多功能,简化开发,提高效率。
在Spring Boot中的引入:
1. 在maven中添加MP启动器
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
2. 要使用代码生成器还需要添加模板引擎依赖
参看地址:AutoGenerator的使用参考 https://mybatis.plus/guide/generator.html 。
添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
Velocity(默认):
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
Freemarker:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
Beetl:
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
注意!如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎。


AutoGenerator generator = new AutoGenerator();
// set freemarker engine
generator.setTemplateEngine(new FreemarkerTemplateEngine());
// set beetl engine
generator.setTemplateEngine(new BeetlTemplateEngine());
// set custom engine (reference class is your custom engine class)
generator.setTemplateEngine(new CustomTemplateEngine());
// other config
...
3、代码的自动生成。AutoGenerator是MP的代码生成器,通过调用AutoGenerator,进行相应的模板、策略配置可以快速生成Entity、Mapper、Mapper XML、Service、Controller各个模块的代码。
4. MP将通用的CRUD操作封装进BaseMapper接口,而自动生成的Mapper接口便自动继承了BaseMapper接口。复杂的Sql操作,则可以使用QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper)进行动态Sql拼接。
5、此外,MP还支持分页、逻辑删除、通用枚举、Sql注入等功能,在:https://mp.baomidou.com/guide/generator.html
还有性能分析插件:https://mp.baomidou.com/guide/performance-analysis-plugin.html
与MBG不同,使用Mybatis-Plus自动生成代码需要编写代码,通过调用AutoAutoGenerator类实现代码生成,从这方面来说不如使用插件方便。但是它丰富的功能以及只是相对复杂的配置还是使它领先于MBG以及通用Mapper。
双方都
Mybatis Plus中的流式查询案例
Mybatis Plus流式查询
mybatis plus 中自定义如下接口,就可以实现流式查询,mybatis 中同样适用。
@Select("select * from t_xxx t ${ew.customSqlSegment}") @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000) @ResultType(ClearReconDiffAbnormalDO.class) void listByStream(@Param(Constants.WRAPPER) Wrapper<Model> wrapper, ResultHandler<Model> resultHandler);
通用流式查询
编写流式查询的方法:
public class FetchByStream extends AbstractMethod { private static final String METHOD = "fetchByStream"; @Override public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) { String sqlFormat = "<script>\nSELECT %s FROM %s %s %s\n</script>"; String sql = String.format(sqlFormat, sqlSelectColumns(tableInfo, true), tableInfo.getTableName(), sqlWhereEntityWrapper(true, tableInfo), sqlComment()); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); String statementName = mapperClass.getName() + DOT + METHOD; if (configuration.hasStatement(statementName, false)) { logger.warn(LEFT_SQ_BRACKET + statementName + "] Has been loaded by XML or SqlProvider or Mybatis''s Annotation, so ignoring this injection for [" + getClass() + RIGHT_SQ_BRACKET); return null; } /* 缓存逻辑处理 */ return builderAssistant.addMappedStatement(METHOD, sqlSource, StatementType.PREPARED, SqlCommandType.SELECT, Integer.MIN_VALUE, null, null, null, null, modelClass, ResultSetType.FORWARD_ONLY, true, true, false, null, null, null, configuration.getDatabaseId(), languageDriver, null); } }
然后再注入通用方法,在Mapper 写入下方的 method 即可使用。
void fetchByStream(@Param(Constants.WRAPPER) Wrapper<T> wrapper, ResultHandler<T> handler);
Mybatis Plus大数据量流式查询
一、在需要使用流式查询的mapper文件中,定义流式查询方法
package com.unionpay.dao.db2; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.unionpay.entity.TblMallOrder; import org.apache.ibatis.annotations.*; import org.apache.ibatis.mapping.ResultSetType; import org.apache.ibatis.session.ResultHandler; /** * (TblMallOrder)表数据库访问层 * * @author liudong * @since 2020-09-15 17:07:13 */ @Mapper public interface TblMallOrderDao extends BaseMapper<TblMallOrder> { @Select("${sql}") @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000) @ResultType(TblMallOrder.class) void dynamicSelectLargeData1(@Param("sql") String sql, ResultHandler<TblMallOrder> handler); @Select("${sql}") @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000) @ResultType(Map.class) void dynamicSelectLargeData2(@Param("sql") String sql, ResultHandler<Map> handler); }
二、使用示例
@RestController public class TestSearchLargeData { // 这是每批处理的大小 private final static int BATCH_SIZE = 1000; private int size; // 存储每批数据的临时容器 private List<TblMallOrder> mallOrders; @Autowired private TblMallOrderDao tblMallOrderDao; @GetMapping("/getLargeData1") public void getLargeData1() { String sql = "select * from t_mall_order"; tblMallOrderDao.dynamicSelectLargeData1(sql, new ResultHandler<TblMallOrder>() { @Override public void handleResult(ResultContext<? extends TblMallOrder> resultContext) { TblMallOrder tblMallOrder = resultContext.getResultObject(); System.out.println(tblMallOrder); } }); } @GetMapping("/getLargeData2") public void getLargeData2() { String sql = "select * from t_mall_order"; tblMallOrderDao.dynamicSelectLargeData1(sql, new ResultHandler<TblMallOrder>() { @Override public void handleResult(ResultContext<? extends TblMallOrder> resultContext) { TblMallOrder tblMallOrder = resultContext.getResultObject(); System.out.println(tblMallOrder); // 你可以看自己的项目需要分批进行处理或者单个处理,这里以分批处理为例 mallOrders.add(tblMallOrder); size++; if (size == BATCH_SIZE) { handle(); } } }); //用来完成最后一批数据处理 handle(); } /** * 数据处理 */ private void handle(){ try{ // 在这里可以对你获取到的批量结果数据进行需要的业务处理 }catch (Exception e){ e.printStackTrace(); }finally { // 处理完每批数据后后将临时清空 size = 0; mallOrders.clear(); } } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
- MyBatis如何实现流式查询的示例代码
- MyBatis流式查询的三种实现方法
- 扩展tk.mybatis的流式查询功能实现
关于MyBatis流式查询和mybatis查询结果的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】、java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】、java-mybaits-015-mybatis逆向工程最佳实践【基础mybatis-generator、tk.mybatis、mubatis-plus】、Mybatis Plus中的流式查询案例等相关内容,可以在本站寻找。
本文标签: