數(shù)據(jù)庫框架低代碼查詢工具類[自定義注解-反射-泛型]
目錄一、使用場景二、框架使用三、工具設(shè)計邏輯四、代碼工具邏輯實(shí)現(xiàn)1.公用自定義注解設(shè)計2.myabatis-Plus 框架使用2-1.查詢包裝器生成的工具類2-2.查詢DTO類運(yùn)用2-3.service應(yīng)用3.jpa框架使用3-1.查詢包裝器生成的工具類3-2.查詢DTO類運(yùn)用3-3.service應(yīng)用五、代碼知識點(diǎn)解析1.泛型1-1.介紹1-2.主要作用1-3.核心概念2.反射2-1.介紹2-2.核心概念2-3.主要功能3.自定義注解3-1.基本概念3-2.關(guān)鍵元注解一、使用場景在日常的工作中,我們難免會涉及單個報表的多個不同字段的查詢,如果一個一個去聲明查詢操作類型(例如:like),開發(fā)時間長且日后維護(hù)時間較長,并不利于當(dāng)下的快節(jié)奏的開發(fā)模式,那如何高效提高我們的報表查詢工作呢?可以通過我們學(xué)習(xí)java基礎(chǔ)知識去設(shè)計一下~二、框架使用本文數(shù)據(jù)庫框架:mybatisPlus、jpajava開發(fā)框架:springbootjava運(yùn)用知識:自定義注解、反射、泛型三、工具設(shè)計邏輯1.通過使用自定義注解去配置查詢DTO類進(jìn)行字段聲明2.根據(jù)使用的數(shù)據(jù)庫映射框架,進(jìn)行針對性的泛型工具類設(shè)計,返回數(shù)據(jù)庫DO的查詢包裝器3.泛型工具類中,通過反射去獲取查詢DTO的注解內(nèi)容,進(jìn)行查詢的拼接4.從工具類獲取到的查詢包裝器,根據(jù)數(shù)據(jù)庫映射框架封裝好的查詢方法,進(jìn)行獲取我們所需的數(shù)據(jù)四、代碼工具邏輯實(shí)現(xiàn)1.公用自定義注解設(shè)計@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface SearchCriteria { // 范圍查詢時, 用于指定字段名 String value() default ""; // 查詢操作 SearchOperation operation() default SearchOperation.EQUAL; // 限制特定的方法使用 方法名用|包裹 例如:|page|report| String limitMethod() default ""; // in操作時的分離器 String separator() default ""; enum SearchOperation { IN, EQUAL, NOT_EQUAL, NOT_NULL, LIKE, LEFT_LIKE, RIGHT_LIKE, GREATER_THAN_EQUAL, GREATER_THAN, LESS_THAN_EQUAL, LESS_THAN } }2.myabatis-Plus 框架使用2-1.查詢包裝器生成的工具類@Slf4j public class QueryWrapperBuilderT { public T QueryWrapper builderQueryWrapper(Object bean, String methodName) { QueryWrapperT queryWrapper = new QueryWrapper(); if (bean == null) { return queryWrapper; } try { for (Field field : bean.getClass().getDeclaredFields()) { field.setAccessible(true); SearchCriteria annotation = field.getAnnotation(SearchCriteria.class); Object fieldValue = field.get(bean); if (annotation == null || fieldValue == null || (field.getType() == String.class StringUtils.isBlank(fieldValue.toString()))) { continue; } if (StringUtils.isNotBlank(annotation.limitMethod()) methodName != null !annotation.limitMethod().contains("|" + methodName + "|")) { continue; } String fieldName = StringUtils.isBlank(annotation.value()) ? field.getName() : annotation.value(); switch (annotation.operation()) { case EQUAL: queryWrapper.eq(fieldName, fieldValue); break; case GREATER_THAN_EQUAL: // 大于等于 queryWrapper.ge(fieldName, fieldValue); break; case GREATER_THAN: //大于 queryWrapper.gt(fieldName, fieldValue); break; case LESS_THAN_EQUAL: //小于等于 queryWrapper.le(fieldName, fieldValue); break; case LESS_THAN: //小于 queryWrapper.lt(fieldName, fieldValue); break; case LIKE: //中模糊查詢 queryWrapper.like(fieldName, fieldValue); break; case LEFT_LIKE: //左模糊查詢 queryWrapper.likeLeft(fieldName, fieldValue); break; case RIGHT_LIKE: //右模糊查詢 queryWrapper.likeRight(fieldName, fieldValue); break;

相關(guān)新聞

百度網(wǎng)盤秒傳鏈接終極指南:免費(fèi)全平臺轉(zhuǎn)存解決方案

百度網(wǎng)盤秒傳鏈接終極指南:免費(fèi)全平臺轉(zhuǎn)存解決方案

百度網(wǎng)盤秒傳鏈接終極指南:免費(fèi)全平臺轉(zhuǎn)存解決方案 【免費(fèi)下載鏈接】baidupan-rapidupload 百度網(wǎng)盤秒傳鏈接轉(zhuǎn)存/生成/轉(zhuǎn)換 網(wǎng)頁工具 (全平臺可用) 項(xiàng)目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 還在為百度網(wǎng)盤文件分享的繁瑣操作而…

2026/8/2 12:42:43 閱讀更多
主庫寫了備庫查不到?主從延遲四步定位法

主庫寫了備庫查不到?主從延遲四步定位法

十五年數(shù)據(jù)庫相關(guān)經(jīng)驗(yàn),做過 DBA、架構(gòu)師、技術(shù)顧問。不求"顛覆",只求"靠譜"。主從同步這個事,看起來簡單。主庫寫、備庫讀,binlog 傳過去、relay log 回放完,齊活。 但真出問題時能要人命。 上個月…

2026/8/1 23:44:43 閱讀更多
逆向工程中編碼與加密算法的識別、分析與實(shí)戰(zhàn)應(yīng)用

逆向工程中編碼與加密算法的識別、分析與實(shí)戰(zhàn)應(yīng)用

1. 從“菜雞”到入門:為什么逆向工程繞不開編碼與加密 剛接觸逆向工程的朋友,常常會卡在一個看似基礎(chǔ),實(shí)則至關(guān)重要的環(huán)節(jié):面對程序里一堆“亂碼”或者經(jīng)過變換的數(shù)據(jù),完全無從下手。你興致勃勃地打開調(diào)試器&#xff0…

2026/8/2 12:25:40 閱讀更多
Unity構(gòu)建優(yōu)化利器:Build Report Tool深度解析與實(shí)戰(zhàn)指南

Unity構(gòu)建優(yōu)化利器:Build Report Tool深度解析與實(shí)戰(zhàn)指南

1. 項(xiàng)目概述:為什么我們需要一個構(gòu)建報告工具? 如果你是一個Unity開發(fā)者,尤其是負(fù)責(zé)項(xiàng)目發(fā)布和迭代的工程師,那么“構(gòu)建”這個詞對你來說一定不陌生。從點(diǎn)擊菜單欄的“Build”按鈕,到最終生成一個可執(zhí)行文件或安裝包&a…

2026/8/2 12:25:40 閱讀更多
國內(nèi)零門檻部署AI編程助手:Codex替代方案與VSCode集成指南

國內(nèi)零門檻部署AI編程助手:Codex替代方案與VSCode集成指南

這次我們來看一個在國內(nèi)免費(fèi)安裝使用 Codex 的完整方案。對于很多開發(fā)者來說,Codex 是一個強(qiáng)大的 AI 編程助手,但直接訪問和使用往往存在門檻。這篇文章的重點(diǎn)不是探討 Codex 背后的復(fù)雜技術(shù),而是提供一個清晰、可操作的本地化部署和使用指南…

2026/8/2 12:15:40 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動批量混剪短視頻,自動把視頻發(fā)布到抖音,快手,小紅書,視頻號上,賺錢從來沒有這么容易過! 支持本地語音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動批量混剪短視頻,自動把視頻發(fā)布到抖音,快手,小紅書,視頻號上,賺錢從來沒有這么容易過! 支持本地語音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動化設(shè)備及通用機(jī)械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動機(jī)。額定…

2026/8/2 2:52:49 閱讀更多