亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LambdaQueryWrapper遇上@Async

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2025-07-14 14:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

文章背景

最近在測試業(yè)務(wù)需求時通讀了研發(fā)指定需求的代碼,發(fā)現(xiàn)研發(fā)大佬們用到了如下的內(nèi)容,有些內(nèi)容我還不是十分的清楚,比如下述真實(shí)代碼;作為后端大佬肯定爐火純青,但是我剛剛看到這段代碼時確實(shí)有點(diǎn)懵;

快速理解的方式
直接借助joycoder解釋代碼的能力就可以快速理解

wKgZO2h0qe2AS6_FAANiXU5FIDM053.png


于是乎有了下述的探索

wKgZPGh0qe6AK-ccAAOZgbwBR5E034.png


但是我為了理解的透徹點(diǎn)還是又去翻找了一些其它資料做一個記錄吧,后續(xù)萬一在遺忘了也方便快速查找

wKgZO2h0qe-AI0uuAAOZgbwBR5E369.png

MyBatis-Plus的LambdaQueryWrapper簡介

LambdaQueryWrapper是MyBatis-Plus提供的一種類型安全的查詢條件構(gòu)造器,它利用Java 8的Lambda表達(dá)式特性,避免了硬編碼字段名,提高了代碼的可讀性和可維護(hù)性。

基本用法示例

LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(User::getName, "張三")
           .ge(User::getAge, 18)
           .orderByDesc(User::getCreateTime);
List userList = userMapper.selectList(queryWrapper);

LambdaQueryWrapper的優(yōu)勢

類型安全:通過方法引用而非字符串指定字段,編譯器可檢查類型
代碼可讀性高:鏈?zhǔn)秸{(diào)用,語義清晰
防止SQL注入:自動處理參數(shù)綁定
智能提示:IDE可自動補(bǔ)全字段名

Spring Boot的@Async異步處理

@Async是Spring框架提供的注解,用于標(biāo)記方法為異步執(zhí)行。被@Async注解的方法會在調(diào)用時立即返回,而實(shí)際執(zhí)行將發(fā)生在單獨(dú)的線程中。

基本配置

首先需要在Spring Boot啟動類或配置類上添加@EnableAsync注解:

@SpringBootApplication
@EnableAsync
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

簡單使用示例

@Service
public class AsyncService {

    @Async
    public void asyncMethod() {
        // 這個方法將在單獨(dú)的線程中執(zhí)行
        System.out.println("執(zhí)行異步方法: " + Thread.currentThread().getName());
    }
}

LambdaQueryWrapper與@Async的結(jié)合實(shí)踐

將兩者結(jié)合使用可以實(shí)現(xiàn)高效的異步數(shù)據(jù)庫操作,特別適合那些不需要立即返回結(jié)果的復(fù)雜查詢或批量操作。

示例1:異步查詢用戶列表

@Service
@RequiredArgsConstructor
public class UserService {
    
    private final UserMapper userMapper;
    
    @Async
    public CompletableFuture> asyncFindUsers(String name, Integer minAge) {
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
        queryWrapper.like(StringUtils.isNotBlank(name), User::getName, name)
                   .ge(minAge != null, User::getAge, minAge);
        
        List users = userMapper.selectList(queryWrapper);
        return CompletableFuture.completedFuture(users);
    }
}

示例2:異步統(tǒng)計與保存

@Async
public void asyncStatAndSave(Long departmentId) {
    // 統(tǒng)計部門人數(shù)
    LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
    queryWrapper.eq(User::getDepartmentId, departmentId);
    long count = userMapper.selectCount(queryWrapper);
    
    // 更新統(tǒng)計結(jié)果
    Department department = new Department();
    department.setId(departmentId);
    department.setUserCount(count);
    departmentMapper.updateById(department);
    
    // 記錄統(tǒng)計日志
    StatLog statLog = new StatLog();
    statLog.setDepartmentId(departmentId);
    statLog.setCount(count);
    statLog.setStatTime(LocalDateTime.now());
    statLogMapper.insert(statLog);
}

高級應(yīng)用與優(yōu)化

自定義線程池配置

默認(rèn)情況下,@Async使用SimpleAsyncTaskExecutor,這不是生產(chǎn)環(huán)境的最佳選擇。我們可以自定義線程池:

@Configuration
public class AsyncConfig implements AsyncConfigurer {
    
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(50);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("AsyncExecutor-");
        executor.initialize();
        return executor;
    }
}

異常處理

異步方法的異常不會傳播到調(diào)用線程,需要特別處理:

@Async
public CompletableFuture> asyncFindUsersWithExceptionHandling(String name) {
    try {
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
        queryWrapper.like(User::getName, name);
        List users = userMapper.selectList(queryWrapper);
        return CompletableFuture.completedFuture(users);
    } catch (Exception e) {
        // 記錄日志
        log.error("異步查詢用戶失敗", e);
        // 返回空列表或拋出CompletionException
        return CompletableFuture.completedFuture(Collections.emptyList());
    }
}

事務(wù)處理

@Async方法的事務(wù)需要特別注意,默認(rèn)情況下異步方法的事務(wù)不會傳播:

@Async
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void asyncUpdateWithTransaction(User user) {
    // 這個更新操作將在新事務(wù)中執(zhí)行
    userMapper.updateById(user);
}

實(shí)際應(yīng)用場景

后臺報表生成

@Async
public void asyncGenerateUserReport(LocalDate startDate, LocalDate endDate, String reportPath) {
    LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
    queryWrapper.between(User::getCreateTime, startDate.atStartOfDay(), endDate.atTime(23, 59, 59))
               .orderByAsc(User::getCreateTime);
    
    List users = userMapper.selectList(queryWrapper);
    
    // 生成報表文件
    generateExcelReport(users, reportPath);
    
    // 發(fā)送通知
    sendReportReadyNotification(reportPath);
}

批量數(shù)據(jù)處理

@Async
public CompletableFuture asyncBatchProcessUsers(List userIds) {
    LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
    queryWrapper.in(User::getId, userIds);
    
    List users = userMapper.selectList(queryWrapper);
    
    int processedCount = 0;
    for (User user : users) {
        if (processUser(user)) {
            processedCount++;
        }
    }
    return CompletableFuture.completedFuture(processedCount);
}

性能考量與最佳實(shí)踐

合理使用異步:不是所有數(shù)據(jù)庫操作都適合異步,簡單查詢同步執(zhí)行可能更高效
控制并發(fā)量:避免過多并發(fā)數(shù)據(jù)庫連接導(dǎo)致系統(tǒng)資源耗盡
批量操作優(yōu)化:考慮使用MyBatis-Plus的批量操作方法
結(jié)果處理:使用CompletableFuture可以方便地處理異步結(jié)果
監(jiān)控:監(jiān)控異步任務(wù)的執(zhí)行情況和線程池狀態(tài)

總結(jié)

MyBatis-Plus的LambdaQueryWrapper與Spring Boot的@Async注解的結(jié)合,為Java后端開發(fā)提供了強(qiáng)大的工具組合。LambdaQueryWrapper提供了類型安全、優(yōu)雅的查詢構(gòu)建方式,而@Async則讓異步編程變得簡單。合理使用這兩者可以顯著提高應(yīng)用程序的響應(yīng)速度和處理能力,特別是在處理復(fù)雜查詢、批量操作和后臺任務(wù)時。
在實(shí)際項(xiàng)目中,開發(fā)者應(yīng)根據(jù)具體場景選擇合適的技術(shù)組合,并注意線程池配置、異常處理和事務(wù)管理等關(guān)鍵點(diǎn),以確保系統(tǒng)的穩(wěn)定性和可靠性。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2992

    瀏覽量

    115277
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4927

    瀏覽量

    72534
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    當(dāng)EtherCAT遇上PROFINET:我們的“協(xié)議小翻譯”讓礦井安全手拉手

    當(dāng)EtherCAT遇上PROFINET:我們的“協(xié)議小翻譯”讓礦井安全手拉手 炎夏的鋼鐵車間里,巨型軋機(jī)正以精確的節(jié)奏吞吐著赤紅的鋼坯。就在今晨,這條產(chǎn)線剛剛完成了一場靜默的變革——我們成功將倍福
    的頭像 發(fā)表于 10-22 10:00 ?86次閱讀
    當(dāng)EtherCAT<b class='flag-5'>遇上</b>PROFINET:我們的“協(xié)議小翻譯”讓礦井安全手拉手

    如何在香橙派5 Plus上移植deepin 25操作系統(tǒng)

    當(dāng)開源生態(tài)遇上極客硬件,會碰撞出怎樣的火花?當(dāng) deepin 25 遇上香橙派 5 Plus 開發(fā)板,又會帶來什么樣的實(shí)踐體驗(yàn)?
    的頭像 發(fā)表于 10-11 10:29 ?288次閱讀

    ulog輸出異常-中斷與線程打印沖突怎么解決?

    CONFIG_ULOG_LINE_BUF_SIZE=128 CONFIG_ULOG_USING_ASYNC_OUTPUT=y CONFIG_ULOG_ASYNC_OUTPUT_BUF_SIZE=2048
    發(fā)表于 09-28 11:44

    掘金AI時代計算產(chǎn)業(yè)紅利的商業(yè)伙伴,為什么跟華為組隊(duì)?

    當(dāng)先進(jìn)算力遇上伙伴體系,按下行業(yè)數(shù)智化加速鍵
    的頭像 發(fā)表于 08-27 09:33 ?3329次閱讀
    掘金AI時代計算產(chǎn)業(yè)紅利的商業(yè)伙伴,為什么跟華為組隊(duì)?

    蘸一點(diǎn)數(shù)據(jù)之墨,為宇宙寫首《天問》

    當(dāng)高能物理遇上前年之問,OceanStor Pacific交出高能答案
    的頭像 發(fā)表于 08-19 10:34 ?761次閱讀
    蘸一點(diǎn)數(shù)據(jù)之墨,為宇宙寫首《天問》

    電磁遇上熱與應(yīng)力-CST多物理場仿真解決復(fù)雜工程挑戰(zhàn)

    當(dāng)電磁遇上熱與應(yīng)力,CST MPhysics Studio提供真正的全耦合多物理場仿真能力。電磁-熱耦合、熱失諧分析、熱-機(jī)械耦合、電磁-機(jī)械耦合,解決復(fù)雜工程挑戰(zhàn)。
    的頭像 發(fā)表于 07-29 16:21 ?453次閱讀
    電磁<b class='flag-5'>遇上</b>熱與應(yīng)力-CST多物理場仿真解決復(fù)雜工程挑戰(zhàn)

    當(dāng)Modbus遇上Profinet:閥門通信的“破圈”神助攻

    現(xiàn)場跑得多的工程師都知道,自動化車間里總有那么些“新舊混搭”的頭疼事——老款閥門還在用Modbus協(xié)議兢兢業(yè)業(yè)干活,新上的控制系統(tǒng)卻清一色認(rèn)準(zhǔn)了Profinet。一邊是靠譜的“老伙計”,一邊是高效的“新平臺”,怎么讓它們搭上線?這時候,耐達(dá)訊自動化Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)的“翻譯官”就得登場了。 舉個真實(shí)案例:某化工廠的反應(yīng)釜閥門組,5臺老閘閥用Modbus RTU通信,新上的西門子PLC卻只認(rèn)Profinet。剛開始硬接試過不少招,要么數(shù)據(jù)丟包讓閥門開關(guān)延遲,要么誤報“通信故障”導(dǎo)致停機(jī),折騰了三天沒搞定。后來換上耐達(dá)訊自動化轉(zhuǎn)換網(wǎng)關(guān),把Modbus的寄存器地址精準(zhǔn)映射到Profinet的IO數(shù)據(jù)區(qū),閥門狀態(tài)、控制指令秒級同步,至今穩(wěn)定運(yùn)行半年多,操作工都說“終于不用盯著報警燈發(fā)呆了”。 技術(shù)上得拎清兩個關(guān)鍵點(diǎn):一是“翻譯”要精準(zhǔn),Modbus的16位寄存器和Profinet的32位浮點(diǎn)數(shù)得對應(yīng)無誤,比如閥門開度0-100%的數(shù)值轉(zhuǎn)換不能差毫厘;二是“抗造”得過關(guān),車間里電機(jī)、變頻器的電磁干擾可不是鬧著玩的,網(wǎng)關(guān)得帶光電隔離和浪涌保護(hù),不然信號分分鐘被“雜音”淹沒。 說白了,這小小的轉(zhuǎn)換網(wǎng)關(guān),玩的就是“無縫銜接”的活兒。它不用改老閥門的程序,也不用動新系統(tǒng)的配置,插上電、設(shè)好參數(shù),Modbus的“方言”立馬能轉(zhuǎn)成Profinet的“普通話”。老閥門不用下崗,新系統(tǒng)的優(yōu)勢全發(fā)揮,整個控制鏈路響應(yīng)速度提上來,停機(jī)調(diào)試時間砍下去,這不就是咱們工程師最想看到的“降本增效”嗎? 總之,在自動化升級的賽道上,別讓協(xié)議差異拖了后腿。耐達(dá)訊自動化Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)這步“神操作”,既能保住老設(shè)備的價值,又能讓新系統(tǒng)跑起來更順,堪稱閥門通信的“性價比之王”。畢竟,讓設(shè)備們好好“對話”,生產(chǎn)線才能跑得更歡實(shí),不是嗎?
    發(fā)表于 07-25 15:37

    當(dāng)ASM焊線機(jī)遇上協(xié)議翻譯官:CC\\-Link IE轉(zhuǎn)Modbus RTU的節(jié)能數(shù)據(jù)之旅

    車間環(huán)境,讓數(shù)據(jù)流穩(wěn)定無虞。 實(shí)戰(zhàn)瞬間:電流監(jiān)測難題迎刃而解 某電子廠在部署能源管理系統(tǒng)時遭遇上述困境。工程師在ASM焊線機(jī)與Modbus RTU能耗平臺間部署協(xié)議網(wǎng)關(guān): 配置: 通過網(wǎng)頁快速設(shè)定
    發(fā)表于 06-26 14:38

    當(dāng)機(jī)器人遇上“語言障礙”:CCLINKIE轉(zhuǎn)Profinet的“破冰外掛”來啦\\!

    在汽車焊裝車間的技術(shù)角,工程師小陳的筆記本記滿了“跨協(xié)議難題”:當(dāng)搭載Profinet的庫卡機(jī)器人遇上CCLINKIE總線的三菱PLC,數(shù)據(jù)交互像隔著玻璃喊話——PLC發(fā)送的坐標(biāo)指令要“繞地球半圈
    發(fā)表于 06-04 14:31

    CANoe產(chǎn)品體系19版本新功能(下)

    NET 8.0現(xiàn)已支持測試腳本、應(yīng)用模型和仿真節(jié)點(diǎn)的開發(fā),支持C# 12,可使用async/await進(jìn)行等待,本機(jī)編譯實(shí)現(xiàn)快速加載,改進(jìn)應(yīng)用層對象的API實(shí)現(xiàn)處理復(fù)雜數(shù)據(jù)類型,并支持運(yùn)行在Linux版本CANoe SE中。
    的頭像 發(fā)表于 05-29 14:05 ?1780次閱讀
    CANoe產(chǎn)品體系19版本新功能(下)

    跨異步時鐘域處理方法大全

    該方法只用于慢到快時鐘域的1bit信號傳遞。在Xilinx器件中,可以使用(* ASYNC_REG = "TRUE" *)標(biāo)記,將兩個寄存器盡量靠近綜合,降低 亞穩(wěn)態(tài)因?qū)Ь€延遲太大而傳播到第二個寄存器的可能性。
    的頭像 發(fā)表于 05-14 15:33 ?1157次閱讀
    跨異步時鐘域處理方法大全

    當(dāng)沖壓焊接遇上Canopen到Profinet協(xié)議轉(zhuǎn)換網(wǎng)關(guān)

    Profinet
    小疆智控
    發(fā)布于 :2025年05月13日 15:09:54

    HID免驅(qū)升級例程,基于nodejs編寫

    async function usbhid_main()?{? ?// 打印所有參數(shù)? ?let path = args[0];? ?console.log('\n歡迎使用USB HID
    發(fā)表于 04-28 17:58 ?0次下載

    普渡機(jī)器人PUDU SH1如何助力酒店服務(wù)升級

    當(dāng)傳統(tǒng)清潔遇上人力短缺、效率瓶頸,酒店如何破局?
    的頭像 發(fā)表于 02-26 09:22 ?680次閱讀

    精密儀器檢測遇上索尼FCB-EV9520L:解鎖高效與精準(zhǔn)的新篇章

    在高度精密與自動化的工業(yè)檢測領(lǐng)域,視頻設(shè)備作為“視覺之眼”,其性能直接關(guān)乎到生產(chǎn)線的效率與產(chǎn)品質(zhì)量。當(dāng)精密儀器檢測遇上索尼FCB-EV9520L模組一體化機(jī)芯控制板時,一場關(guān)于高效與精準(zhǔn)的技術(shù)革新
    的頭像 發(fā)表于 12-05 11:09 ?611次閱讀