mybatis多线程查询数据库

多线程使用场景之一:如何使用多线程完成数据库批量查询 在做使用多线程完成数据库查询之前,我们先理清逻辑,使用分页的方式,每个线程完成对应的查询。我们首先得有个工具类 来帮我们理好每个线程它分页的起始索引,以及它们所要查询的数量。然后先把我们所会用到的接口都先写好,我的业务是查车辆的轨迹gps信号。 阅读详情

定义task类

public class ChargeCallableTask implements Callable<Object>{

private  String method;

private Object parameter;

public ChargeCallableTask(String method,Object parameter){

this.method=method;

this.parameter=parameter;

}

@Override

public Object call() throws Exception{

ChargeServiceImpl  chargeServiceImpl  =(ChargeServiceImpl)SpringContextUtil.getBean(chargeService);

List<ChaChargeVo> chargeStatistics = Collections.Empty_LIST;

Long totalElements = null;

if("getChargeStatistics".equals(method)){

return chargeStatistics=chargeServiceImpl.getChargeStatistics((ChaChargeVo)parameter);

}else if("getTotalChargeStatistics".equals(method)){

return chargeServiceImpl.getTotalChargeStatistics((ChaChargeVo)parameter);

}

return "";

}

public static Future<Object> getFuture(ExecutorService threadPool,String method,Object parameter) throws Exception{

return threadPool.submit(new ChargeCallableTask(method,parameter));

}

}

chargeServiceImpl实现类中

public Result getChargeStatistics (ChaChargeVo chaChargeVo,HttpHeaders httpHeaders ){

ExecutorService threadPool=Executors.newFixedThreadPool(3);

Future<Object> getChargeStatistics = ChargeCallableTask.getFuture(threadPool,"getChargeStatistics",chaChargeVo);

Future<Object> getTotalChargeStatistics = ChargeCallableTask.getFuture(threadPool,"getTotalChargeStatistics",chaChargeVo);

totalElements = (long)getTotalChargeStatistics.get();

List<ChaChargeVo>chargeStatistics = getChargeStatistics.get();

}

public  List<ChaChargeVo>  getChargeStatistics(ChaChargeVo chaChargeVo){

return  chaChargeMapper.getChargeStatistics(chaChargeVo);

}

public  long getTotalChargeStatistics(ChaChargeVo chaChargeVo){

return  chaChargeMapper.getTotalChargeStatistics(chaChargeVo);

}

查询费用汇总和明细时使用1条sql查询在数据库阻塞锁表,所以拆成4条小sql,先按分页和查询条件查询出满足的customerCd再通过customerCd多线程4次异步调用查询数据和未结算金额及结算金额和总条数 在查询group by和order by加index where条件为常量  时间类型datetiime改为11位int类型做排序时候会加快0.5-1s速度。15s多线程后为11s,去身份证号关联2张表后为5s 

查询满足条件的10个customer_cd耗时2.8s左右,按中文名首字母升序排序并需要按customer_cd分组并加索引分页10条

改造etl抽取数据生成表时按中文名首字母排序的主键key为int类型自增,直接查询distinct10个customer_cd耗时100ms排序走主键

group by会排序 distinct不会排序能走索引情况下比group by快,distinct聚合函数时不走索引会filesort

查询数据时身份证号需要关联2张表时用explain查看使用Using join buffer (Block Nested Loop) type=all查询3张表type=ref

将身份证号加到主表中有80万数据 去掉身份证号后group by上加index type=range extra=using index condition;using where

spring boot集成mybatis-plus——Mybatis Plus 查询数据(图文讲解) Mybatis Plus 查询数据(图文讲解) 更新时间 2023-01-03 16:07:12 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 查询数据库表中的数据。 表结构 在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: DROP TABLE IF EXISTS user; CREATE TABLE `user` ( `id` bi... 阅读详情

相关推荐

SpringBoot多线程查询实战-查询库中所有数据多线程实现

但是,在数据量较大且服务器资源足够的情况下,多线程方法通常能够显著提高查询效率。此外,由于它是同步执行的,没有利用并行处理的能力,所以在处理大量数据时可能会比较慢。这个方法采用了分页查询的方式,每次只获取一部分数据,从而避免了内存溢出的问题。然而,它也是同步执行的,没有利用多线程或并行处理的能力。如果每次分页查询的数据量仍然很大,或者需要查询的轮数很多,那么这种方法的效率可能仍然会受到限制。​ ​ ​在比较这三种方式的效率时,我们需要考虑几个关键因素:数据量的大小、查询操作的复杂性、以及并行处理的能力。

勇敢牛牛,不怕困难! 4809

spring mybatis的多线程查询功能

最近几天写我的自己的项目的时候用到数据的实例化,这个要求多张表查询数据源,当时我是想的直接按照顺序进行查询然后在通过map集合返回到前台,但是感觉这样数据量一高 估计前端等待时间有点久。所以我想起用多线程的方式去同时查询数据返回。 * 类名称:ThreadPoolUtil * 类描述:线程池查询 * 创建人:fulln * 创建时间:2018年1月25日 下午7:1

qq_36090711的博客 7761

mybatis的一级缓存和二级缓存

一、什么是缓存 缓存是存在于内存中的临时数据。 使用缓存减少和数据库的交互次数,提高执行效率。 1、适用于缓存 经常查询并且不经常改变的; 数据的正确与否对最终结果影响不大的; 2、不适用于缓存 经常改变的数据; 数据的正确与否对最终结果影响很大的; 例如:商品的库存,银行的汇率,股市的牌价; 二、mybatis一级缓存 1、一级缓存简介 一级缓存作用域是sqlsession级别的,同一个sqlsession中执行相同的sql查询(相同的sql和参数),第一次会去查询数据库并写到缓存中,第

学Java,找哪吒 7万+

多线程分批次查询数据

多线程分批次查询数据欢迎使用Markdown编辑器需求:在系统开发和对接过程中,常常出现大数据量获取的情况,比如你是A系统,去获取B系统的数据,B系统只是给你接口。并且返回只能返回10w条数据,但是实际上你查出来的量到达100w甚至上千万,那么怎么办呢?其实核心思想大家都应该猜的到那就是多线程分批次查询,比如100w分十个线程,然后是个线程一个线程查询10w数据。那么接下来我就用最简单的具体代码例子给大家实践一下吧,话不多说,上Code!系统本身肯定是springboot+myabties的简单框架系统,这

qq_37102211的博客 4393

Mybatis多线程下如何使用Example详解

主要给大家介绍了关于Mybatis多线程下如何使用Example的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

[软考]系统架构设计师 备考经验分享(一) - 备考计划篇

前言 上周末刚刚结束了软考架构师的考试,自我感觉考的还可以,大概率是过了。 两次参加软考,一次中级嵌入式,一次高级架构师,都是备考不到两个月时间,尤其是架构师这次考试内容和本职工作有不小的差别,并且需要同时备考三个科目,在高强度地备考中感觉是摸索出到了一点软考的技巧与经验。 打算趁还记得,赶紧写几篇文章做下梳理总结,算是给将来自己考系分、高项或者其他考试做个记录,也希望能够帮到正在备考的大家。 先把第一步,个人的备考计划分享给大家。 自身情况分析 首先,请大家一定先明确三个问题,这三个问题会直接影响到你的

_ 6404

Java开发中循环查询数据库优化实战指南

循环查询优化是一个常见问题,没有一种方案适合所有场景。数据量大小 📊业务需求 🎯系统资源 💻来选择合适的优化方案。记住:过度优化可能带来新的问题,要在性能和可维护性之间找到平衡点!加油!💪。

qq_17404201的博客 820

别再只用真彩色了!手把手教你用ENVI主成分分析(PCA)给遥感图像‘美颜’与‘瘦身’

本文详细介绍了如何利用ENVI主成分分析(PCA)技术优化遥感图像处理,实现数据‘美颜’与‘瘦身’。通过PCA的维度压缩、噪声分离和特征增强三大优势,显著提升高光谱数据的可视化效果和分析效率。文章还提供了ENVI操作的最佳实践和常见问题解决方案,帮助读者掌握这一遥感图像处理的游戏规则改变者。

weixin_28465009的博客 275

java mybatis org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.NullPointerException ### Cause: java.lang.NullPointerException at org.mybatis.spring.MyBatisE

Li_Chunxiao_的博客 1604

USB3.0/3.1信号完整性分析仿真

• 1.了解USB3.0通路的互连关系,解读原理图接口电路和PCB的互连电路。对USB布线的通路及阻抗进行检查和分析。 • 2.使用USB3.0实例文件提取互连线的S参数,选择SSRX+,SSRX-,SSTX+,SSTX-,D+,D-组的互连线,使用PowerSI,Clarity,3DFEM等工具提起关键网络的S参数。提取S参数以后需要分析S参数的互连特征,对S参数的结果开展评价。 • 3.使用SYSTEM SI USB3 Compliance工程向导模型,建立USB仿真实例框架,在框架BOLCK中带入S参

小猪配齐电子设计 1万+

[3D检测系列-PV-RCNN] PV-RCNN实战指南:从论文解析到代码调试全流程

本文提供了PV-RCNN在3D目标检测领域的实战全流程指南。文章深入解析了其Point-Voxel融合的核心思想,并详细演示了从环境搭建、数据准备、代码复现到模型训练与调试的具体步骤,特别针对常见的报错问题给出了解决方案,帮助开发者高效掌握这一经典算法。

weixin_29189381的博客 480

MyBatis缓存机制之一级缓存

MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,是我们常见的持久性框架。缓存是在计算机内存中保存的临时数据,读取时无需再从磁盘中读取,从而减少数据库的查询次数,提高执行效率。Mybatis提供了一级缓存和二级缓存的支持,默认情况下只开启一级缓存。本次将带着大家深入了解Mybatis的一级缓存机制。

GreyWings的博客 1909

手把手调试Altera FPGA远程升级:从ASMI扇区擦除到Remote Update IP配置的避坑实录

本文详细解析了Altera FPGA远程升级的全流程,重点介绍了Cyclone IV系列FPGA的ASMI扇区擦除和Remote Update IP配置的实战技巧。通过双镜像架构设计、ASMI IP核优化配置及Remote Update IP的隐藏参数设置,帮助开发者避免常见陷阱,提升远程升级的可靠性和效率。

weixin_30872499的博客 447

干翻Mybatis源码系列之第八篇:Mybatis提供的缓存方案细节注意

干翻Mybatis源码系列之第八篇:Mybatis提供的缓存方案细节注意

七叔的博客 1万+

AlertManager的使用(邮件和微信告警)

一、AlertManager概述 Prometheus 包含一个报警模块,就是我们的 AlertManager,Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组等,是一款前卫的告警通知系统。 Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器;告警方式可以按照不同的规则发送给不同的模块负责人,Alertman

weixin_45880055的博客 2万+

太阳敏感器:卫星姿态控制的“指南针

在卫星姿态控制系统中,太阳敏感器(Sun Sensor) 是至关重要的光学姿态敏感器之一。它通过探测太阳光的方向,为卫星提供关键的姿态参考信息,确保卫星能够正确调整自身方位,维持稳定的对日定向,保障能源供应和任务执行。

ScilogyHunter的博客 1730

Java EE 突击 12 - MyBatis 查询数据库(1)

MyBatis 是⼀款优秀的持久层框架 ,持久层框架 : 之前的数据是未进行持久化的 , 存放在内存中的 , 现在我们把它保存下来 , 这就叫做持久化 .它支持自定义 SQL、存储过程以及高级映射 .MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

m0_53117341的博客 979

YOLO 系列专栏(二十九)YOLO26 × StarNet 轻量化涨点方案(CVPR 2024)轻量化、主干改进篇 | 星星卷积虽小,却蕴藏着巨大的高效潜力

StarNet 出自 CVPR 2024 轻量化主干网络工作,核心创新是,依靠逐元素乘法实现高阶特征融合,在几乎不增加参数量与 FLOPs 的前提下,大幅提升特征表达能力,天然适合等多任务统一建模。本文将 StarNet 完整替换 YOLO26 原有主干,保留 YOLO26 无 NMS 检测头与轻量化结构,实现,并提供。

qq_36130719的博客 409

多线程导致mybatis查询失效问题。

CountDownLatch给定了线程的执行顺序,countDownLatch.await()表示主线程等待执行。当所有子线程执行完毕后,即countDownLatch到0的时候,主线程关闭。导致问题的原因是,junit身为主线程,execute是子线程,当for循环执行完毕后,主线程直接销毁了,导致execute的子线程也跟着销毁了,导致getTabledId 的查询失败了。java中java.util.concurrent这个包提供了CountDownLatch类来解决这种并发问题。

Smile_ant的博客 678

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【全网最全】mybatis一定要禁用一级二级缓存

mybatis源码设计非常优秀,然后阅读源码又必须跨域一道门槛:缓存,虽然mybatis的缓存已经不再适用现在的技术框架,但是仍有很多需要注意的地方。

liangcheng0523的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Mybatis一级缓存的坑

Mybatis一级缓存的坑 前序 接着上篇文章插入唯一数据的各种问题。中间过程说Spring的事务,是不是在生命周期的时候程序提交了事务,但是数据库没有提交事务。其实不会的,当时写文章的时候只是根据当时的现象去推测,后来我用代码测试实际是会提交事务的。Spring是没有错的。代码如下: @Transactional(propagation = Propagation.REQUIRES_NEW, i...

笨小孩浅谈技术 1260

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mybatis多次查询缓存问题

最近在使用mybatis的过程中,发现一个问题。如果在同一个事物中,多次同一个查询sql在mybatis的执行过程中,只会查询一次数据库,后几次所返回的对象是mybatis在在内部做了缓存。Property property = this.findByPropertyId("123"); property.setPropertyId(null);; property = this.f

每一段路、都是一种领悟 2467

《Java 100 天进阶之路》第86篇:MyBatis 核心原理与缓存避坑指南(2026版)

从传统 XML 到 Spring Boot 自动装配,从 #{} 防注入到动态 SQL 解析,从一级缓存陷阱到二级缓存脏读,从原生 MyBatis 到 MyBatis-Plus 效率翻倍。本文深入剖析核心组件(SqlSession、Executor、StatementHandler)、执行流程、注解开发,并结合 MyBatis-Plus 分页插件与代码生成器,助你掌握 2026 年企业级持久层框架首选方案。面试必考 + 实战避坑,一篇通透。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 6203

动态数据源配置druid+mybatis

一 、下这次我们先使用Mysql,本地现在有两个个数据库用于测试。 本方案不限数据库数量完全动态配置,支持不同的数据库部署在不同的服务器上。(mybatis-plus没测试,下个版本用oracle配的时候尝试plus) 如图 二、下一步我们看一下Druid继承关系 我们可以看到想要配置DataSource其实非常简单,继承DruidDataSource就可以调用 getConnection方法了 三、下面直接开始上配置(简单的一个小例子其他的自己扩展吧) #连接池 使用阿里的dr.

智三岁的博客 5310

Java多线程查表数据

/** * 多线程查询 根据条件查询所有表的数据量,返回HashMap<表名,数据量> * * @return */ private Map<String, Integer> getTablesCount(Parameters<AlcoholWarning> parameters, List<String> tables) { List<Future<Map...

bzsjy的博客 1145

Mybatis一级缓存与二级缓存

此后若再次执行相同的查询,结果就会从缓存中获取。二级缓存是 mapper 级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。A查询了某商品库存为10件,并将10件库存的数据存入缓存中,之后被客户买走了10件,数据被delete了,但是下次查询这件商品时,并不从数据库中查询,而是从缓存中查询,就会出现错误。用户发起查询请求,查找某条数据,sqlSession 先去缓存中查找,是否有该数据,如果有,读取;

nancheng_wx的博客 268
上一篇: SpringUtils工具类获取bean
下一篇: Mysql优化_ORDER BY和GROUP BY 的优化讲解(单路排序和双路排序)
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值