前端sql条件拼接js工具

因为项目原因,需要前端写sql,所以弄了一套sql条件拼接的js工具

​
/*常量
LT : " < ",
LE : " <= ",
GT : " > ",
GE : " >= ",
NE : " != ",
EQ : " = ",
LIKE : " like ",
OR : " or ",
IN : " in ",
*/

let sqlUtil = {
    // 拼接sql
    buildSql : '',

    /*函数*/
    lt: lessThan,
    lte: lessThanOrEqual,
    gt: greaterThan,
    gte: greaterThanOrEqual,
    ne: notEqual,
    eq: equal,
    toLike: sqlLike,
    leftLike:leftLike,
    rightLike:rightLike,
    in: sqlIn,
    notIn: notIn,
    isNull: isNull,
    isNotNull: isNotNull,
    isEmpty: isEmpty,
    isEmptyOrNull: isEmptyOrNull,
    isNotEmpty:isNotEmpty,
    isNotEmptyAndNotNull:isNotEmptyAndNotNull,
    sor: simpleOr,
    toBetween: between,
    notBetween : notBetween,
    sqlOr: sqlOr,
    orderByDesc : orderByDesc,
    orderByAsc: orderByAsc,
    orderBy: orderBy,
    notDelete : notDelete,
    userDefined:userDefined,
    toSql: toSql
};

/**
 * 小于 <
 * sqlUtil.lt("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function lessThan(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" < '"+fieldValue+"' ";
    }
    return this;
}

/**
 * 小于等于 <=
 * sqlUtil.le("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function lessThanOrEqual(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" <= '"+fieldValue+"' ";
    }
    return this;
}

/**
 * 大于 >
 * sqlUtil.gt("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function greaterThan(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" > '"+fieldValue+"' ";
    }
    return this;
}


/**
 * 大于等于 >=
 * sqlUtil.ge("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function greaterThanOrEqual(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" >= '"+fieldValue+"' ";
    }
    return this;
}


/**
 * 不等于 !=
 * sqlUtil.ne("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function notEqual(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" != '"+fieldValue+"' ";
    }
    return this;
}

/**
 * 等于 =
 * sqlUtil.eq("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function equal(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }

    if(!fieldValue){
        return this;
    }

    if(typeof fieldValue === 'string' && fieldValue.trim() === ''){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" = '"+fieldValue+"' ";
    return this;
}

/**
 * 模糊搜索 like
 * sqlUtil.like("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function sqlLike(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        fieldValue = fieldValue.replaceAll('%','\\%');
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" like '%"+fieldValue+"%' ";
    }
    return this;
}

/**
 * 模糊搜索 左like
 * sqlUtil.leftLike("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function leftLike(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        fieldValue = fieldValue.replaceAll('%','\\%');
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" like '%"+fieldValue+"' ";
    }
    return this;
}



/**
 * 模糊搜索 右like
 * sqlUtil.rightLike("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function rightLike(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        fieldValue = fieldValue.replaceAll('%','\\%');
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" like '"+fieldValue+"%' ";
    }
    return this;
}

/**
 * in查询
 * sqlUtil.in("field_name",fieldValueArray)
 * @param fieldName 字段名
 * @param fieldValueArray 字段值数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function sqlIn(fieldName,fieldValueArray = [],condition = true){
    if(!condition){
        return this;
    }
    if (fieldValueArray.length === 0){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" in ( ";
    for (const fieldValue of fieldValueArray) {
        if(typeof fieldValue === "string"){
            sqlUtil.buildSql = sqlUtil.buildSql + "'" + fieldValue + "',";
        }else{
            sqlUtil.buildSql = sqlUtil.buildSql + fieldValue + ",";
        }

    }

    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + ") ";
    return this;
}

/**
 * not in查询
 * sqlUtil.notIn("field_name",fieldValueArray)
 * @param fieldName 字段名
 * @param fieldValueArray 字段值数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function notIn(fieldName,fieldValueArray = [],condition = true){
    if(!condition){
        return this;
    }
    if (fieldValueArray.length === 0){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" not in ( ";
    for (const fieldValue of fieldValueArray) {
        sqlUtil.buildSql = sqlUtil.buildSql + fieldValue + " ,";
    }

    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ) ";
    return this;
}


/**
 * is null
 * sqlUtil.isNull("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNull(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" is null '"+fieldValue+"%' ";
    }
    return this;
}


/**
 * is not null
 * sqlUtil.isNotNull("field_name",fieldValue)
 * @param fieldName 字段名
 * @param fieldValue 字段值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNotNull(fieldName,fieldValue,condition = true){
    if(!condition){
        return this;
    }
    if(fieldValue && fieldValue.trim() !== ''){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" is not null '"+fieldValue+"%' ";
    }
    return this;
}


/**
 * 是否为空字符
 * sqlUtil.isEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isEmpty(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" = '' ";
    }
    return this;
}

/**
 * 是否为 空字符或null
 * sqlUtil.isEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isEmptyOrNull(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and ("+fieldName+" = '' or  "+fieldName+" is null)";
    }
    return this;
}

/**
 * 是否为空字符
 * sqlUtil.isNotEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNotEmpty(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and "+fieldName+" != '' ";
    }
    return this;
}

/**
 * 是否为空字符
 * sqlUtil.isNotEmpty("field_name",fieldValue)
 * @param fieldName 字段名
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function isNotEmptyAndNotNull(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and ("+fieldName+" != '' or  "+fieldName+" is not null)";
    }
    return this;
}

/**
 * between("age", 20, 22);
 * @param fieldName 字段名
 * @param fieldValue1  第一个值
 * @param fieldValue2 第二个值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */

function between(fieldName,fieldValue1,fieldValue2,condition = true){
    if(!condition){
        return this;
    }
    if(!fieldValue1 || !fieldValue2){
        return this;
    }

    if(typeof fieldValue1 === 'string' && typeof fieldValue2  === 'string'){
        //  有可能是日期
        sqlUtil.buildSql = sqlUtil.buildSql + "and '"+fieldName+"' between '"+fieldValue1+"' and '"+fieldValue2+"' ";
    }else{
        sqlUtil.buildSql = sqlUtil.buildSql + "and '"+fieldName+"' between "+fieldValue1+" and "+fieldValue2+" ";
    }

    return this;
}

/**
 * sqlUtil.notBetween("field_name",20,22)
 * notBetween("age", 20, 22);
 * @param fieldName 字段名
 * @param fieldValue1  第一个值
 * @param fieldValue2 第二个值
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */

function notBetween(fieldName,fieldValue1,fieldValue2,condition = true){
    if(!condition){
        return this;
    }
    if(fieldName){
        sqlUtil.buildSql = sqlUtil.buildSql + "and '"+fieldName+"' not between "+fieldValue1+" and "+fieldValue2+" ";
    }
    return this;
}

/**
 * sqlUtil.orderByAsc("field_name") || sqlUtil.orderByAsc(["field_name1","field_name2"])
 * "order by id asc"
 * @param fieldName 字段名 || 数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function orderByAsc(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(typeof fieldName === 'string'){
        sqlUtil.buildSql = sqlUtil.buildSql +" order by "+fieldName+" asc"
    }else{
        sqlUtil.buildSql = sqlUtil.buildSql +" order by ";
        for (const itemName of fieldName) {
            sqlUtil.buildSql = sqlUtil.buildSql + itemName + " asc,";
        }
        sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ";
    }

    return this;
}

/**
 * sqlUtil.orderByDesc("field_name") || sqlUtil.orderByDesc(["field_name1","field_name2"])
 * "order by id desc"
 * @param fieldName 字段名 || 数组
 * @param condition 判断条件是否成立
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function orderByDesc(fieldName,condition = true){
    if(!condition){
        return this;
    }
    if(typeof fieldName === 'string'){
        sqlUtil.buildSql = sqlUtil.buildSql +" order by "+fieldName+" desc"
    }else{
        sqlUtil.buildSql = sqlUtil.buildSql +" order by ";
        for (const itemName of fieldName) {
            sqlUtil.buildSql = sqlUtil.buildSql + itemName + " desc,";
        }
        sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ";
    }

    return this;
}

/**
 * 自定义排序
 * @param fieldList 字段名或数组[{fileName:'',order:''}],order的值为 desc|asc
 * @param condition
 * @returns {orderBy}
 */
function orderBy(fieldList,condition = true){
    if(!condition){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql +" order by ";
    for (const item of fieldList) {
        sqlUtil.buildSql = sqlUtil.buildSql + item.fileName +" "+item.order +",";
    }
    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length-1) + " ";

    return this;
}



/**
 * 简单的或条件 or
 * const paramMap =  new Map([
 *   ["field_name1",fieldValue1],
 *   ["field_name2",fieldValue2],
 *   ["field_name3",fieldValue3],
 * ])
 *
 * sqlUtil.sor(paramMap)
 * @param paramMap  参数集
 *
 * @param condition
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function simpleOr(paramMap,condition = true){
    if(!condition){
        return this;
    }
    if(! paramMap){
        return this;
    }

    sqlUtil.buildSql += "and ( ";
    for(let [index,field] of paramMap.entries()){
        sqlUtil.buildSql = sqlUtil.buildSql + field[0]+" = '"+field[1]+"' or ";
    }
    sqlUtil.buildSql = sqlUtil.buildSql.substring(0, sqlUtil.buildSql.length - 4) +  ") ";

    return this;
}


/**
 * 或条件 or
 *
 * sqlUtil.OR(paramMap)
 * @param paramSqlList  sql集
 * @param condition
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function sqlOr(paramSqlList= [],condition = true){
    if(!condition){
        return this;
    }

    if(paramSqlList.length === 0){
        return this;
    }

    sqlUtil.buildSql = sqlUtil.buildSql +" and (";
    for (const paramSql of paramSqlList) {
        sqlUtil.buildSql = sqlUtil.buildSql + " or "
    }
    sqlUtil.buildSql = sqlUtil.buildSql.substring(0,sqlUtil.buildSql.length - 3) + ") "

    return this;
}

/**
 * 查询没有被逻辑删除的
 * @returns {{sqlUtil}} 拼接后的sqlUtil
 */
function notDelete(){
    sqlUtil.buildSql += "and is_delete = '0' "
    return this;
}

/**
 * 自定义sql,
 * @param paramSql  'and {condition}'
 * @param condition  条件
 */
function userDefined(paramSql,condition = true){
    if(!condition){
        return this;
    }
    sqlUtil.buildSql += paramSql;
    return this;

}

/**
 * 获取拼装后的sql
 * @returns {string}
 */
function toSql(){
    let sql = '';
    //判断有没有orderBy
    if(sqlUtil.buildSql.indexOf("order by") != -1){
       let arr = sqlUtil.buildSql.split("order by");
       sql = arr[0] + " and is_delete = '0' "+"order by"+arr[1];
    }else{
        sql =  sqlUtil.notDelete()["buildSql"];
    }
    // sqlUtil.notDelete().buildSql

    sqlUtil.buildSql = '';
    console.log("sql:"+sql);
    return sql;
}

export default sqlUtil;

​

或许某些场景,例如用户自定义条件的场景才用得到吧?这篇文章如能提供到帮助,方便的话请在评论下留言,我也想知道还能用到什么地方。

使用方式参考如下(使用userDefined方法可以利用sql函数,并进行条件拼接):

return sqlUtil
          .toLike("discussion_title",searchParam.discussionTitle)
          .eq("division_code",searchParam.divisionCode)
          .eq("party_grid_deliberation_id",searchParam.partyGridDeliberationId)
          .userDefined(" and (DATE_FORMAT(discussion_time_start, '%Y-%m') = '"+this.searchParam.discussionYearMonth+"' or DATE_FORMAT(discussion_time_end, '%Y-%m') = '"+this.searchParam.discussionYearMonth+"') ",this.searchParam.discussionYearMonth)
          .orderByDesc("discussion_time_start")
          .toSql();

另外进阶版,可以结合jq的extend,进一步封装,像后端开发那样,把业务代码写到前端来。如图:

fwptPost(表名,提交的json对象)。

这样做当然是有缺陷,需要解决事务一致性的问题,要考虑如何联表,要考虑性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/413168.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈集群的分类

本文主要介绍集群部署相关的知识&#xff0c;介绍集群部署的基础&#xff0c;集群的分类、集群的负载均衡技术&#xff0c;集群的可用性以及集群的容错机制。随后介绍Redis-Cluster以及Mysql的架构以及主从复制原理。 集群介绍 单台服务器本身会受到带宽、网卡、内存、磁盘、处…

Linux-Uboot命令

help命令 进入 uboot 的命令行模式后输入“help”或者“&#xff1f;”&#xff0c;然后按下回车即可查看当前 uboot 所支持的命令。 查看某一个命令的帮助信息&#xff1a;&#xff1f;命令名称 或 help命令名称 信息查询命令 常用的和信息查询有关的命令有 3 个…

R语言混合效应(多水平/层次/嵌套)模型及贝叶斯实现技术应用

回归分析是科学研究中十分重要的数据分析工具。随着现代统计技术发展&#xff0c;回归分析方法得到了极大改进。混合效应模型&#xff08;Mixed effect model&#xff09;&#xff0c;即多水平模&#xff08;Multilevel model&#xff09;/分层模型(Hierarchical Model)/嵌套模…

即时设计和Axure对比,哪一个好用?

无论是国外页面设计工具&#xff0c;页面设计工具的发展从来没有停滞过&#xff0c; Axure&#xff0c;无论是国产设计工具即时设计&#xff0c;其功能都在不断更新迭代&#xff0c;为设计带来更高效的设计体验。今天对比两个设计工具&#xff0c;帮你找到最适合自己的&#xf…

SQL注入漏洞解析--less-46

我们先看一下46关 他说让我们先输入一个数字作为sort,那我们就先输入数字看一下 当我们分别输入1&#xff0c;2&#xff0c;3可以看到按照字母顺序进行了排序&#xff0c;所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式 当输入时出现报错提示&#xff0c;说…

编曲学习:和声小调 终止式 离调和弦 转调应用

和声小调 音阶 大调音程关系排列:全 全 半 全 全 全 半 小调音程关系排列:全 半 全 全 半 全 全 C大调音阶: 1 2 3 4 5 6 7 1 C小调音阶: 1 2 b3 4 5 b6 b7 1 C大调基本音级构成的和弦: Cmaj7 Dmin7 Emin7 Fmaj7 G7 Amin7 Bm7-5 C小调基本音级构成的和弦: Cmin7 D…

LeetCode 刷题 [C++] 第141题.环形链表

题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

Qt介绍以及qt_creater的安装和C++项目工程创建

最近天气严寒&#xff0c;同学们要注意保暖哦&#xff01;学习的同时别忘了照顾好自己呀&#xff01;o(*&#xffe3;▽&#xffe3;*)ブ 目录 一、Qt 1、Qt概念 2、常见的GUI 二、安装qt_creater 方法一&#xff1a; 方法二&#xff1a; 三、Qt_creater 中C项目的创建 …

学会玩游戏,智能究竟从何而来?

最近在读梅拉妮米歇尔《AI 3.0》第三部分第九章&#xff0c;谈到学会玩游戏&#xff0c;智能究竟从何而来&#xff1f; 作者: [美] 梅拉妮米歇尔 出版社: 四川科学技术出版社湛庐 原作名: Artificial Intelligence: A Guide for Thinking Humans 译者: 王飞跃 / 李玉珂 / 王晓…

Langchain-Chatchat:离线运行的大模型知识库 | 开源日报 No.182

chatchat-space/Langchain-Chatchat Stars: 22k License: Apache-2.0 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现的开源、可离线部署的检索增强生成 (RAG) 大模型知识库项目。该项目是一个可以实现完全本地化推理的知识库增强方案&#xff0c;重点解决数据安全保护…

智慧公厕让社区生活更美好

随着科技的迅猛发展&#xff0c;城市管理、城市服务均使用科技化的手段进行升级改造&#xff0c;社区生活更美好赋予全新的智慧效能&#xff0c;其中智慧公厕也成为了城市环卫设施的新宠。智慧公厕以物联网、互联网、大数据、云计算、5G通信、自动化控制等技术为核心&#xff0…

【GB28181】wvp-GB28181-pro部署安装教程(Ubuntu平台)

目录 前言1 安装依赖2 安装MySQL3 安装redis4 编译ZLMediaKit代码及依赖下载编译运行&#xff08;如果要运行wvp整个项目&#xff0c;这步可以先不执行&#xff09; 5 编译wvp-pro下载源码&#xff08;建议从github上下载&#xff0c;gitee上维护有时候不是很同步&#xff09;编…

算法【线性表的查找-顺序查找】

线性表的查找-顺序查找 顺序查找基本思想应用范围顺序表的表示数据元素类型定义查找算法示例分析 时间效率分析顺序查找的特点如何提高查找效率 顺序查找 基本思想 在表的多种结构定义方式中&#xff0c;线性表是最简单的一种。而顺序查找是线性表查找中最简单的一种。 顺序查…

Java+SpringBoot+Vue+MySQL:美食推荐系统的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

K8S(kubernetes) 部署运用方式汇总

k8s 部署运用这边汇总两类&#xff0c;第一种是命令版本。第二种是文本版本&#xff0c;通过创建yaml文件方式。 此次目标&#xff1a;通过k8s创建nginx,端口80并且可以被外网访问。 kubectl get namespaces 一、创建命名空间 首先创建一个命名空间&#xff0c;有了命名空间后…

yolov8学习笔记(三)添加注意力机制+源码简单了解

目录 一、前言 二、注意力机制添加 三、源码简单了解 1、YOLO类中的——私有Model类 2、在哪来初始化的网络模型 3、注释版下载 4、笔记下载 一、前言 因为我没有学过pytorch&#xff0c;所以看源码也是一头雾水&#xff0c;不过大概看懂的是yolo是对pytorch的再次封装&a…

QT-Day4

思维导图 作业&#xff1a; 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMessageBox> #include <QTimerEvent>//定时器事件类 #include <QTime> #include <QDebug> #include <QPushButton> #include <QT…

【嵌入式学习】QT-Day4-Qt基础

简单实现闹钟播报&#xff0c;设置时间&#xff0c;当系统时间与设置时间相同时播报语音5次&#xff0c;然后停止。如果设置时间小于当前系统时间&#xff0c;则弹出消息提示框&#xff0c;并清空输入框。 #include "my_clock.h" #include "ui_my_clock.h&quo…

Redis7

摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/ 官网地址: 英文&#xff1a;Redis 中文&#xff1a;CRUG网站 redis中文文档 安装包&#xff1a;https://redis.io/download/&#xff0c;选择redis7.0版本即可 Redis在线测试地址(不用下载也…

完全卸载IDEA(2024最新)

彻底卸载IntelliJ IDEA 打开控制面板  直接在电脑中搜索控制面板打开。&#xff08;我的电脑是windows11&#xff09; 点击卸载程序 右键卸载 勾选插件和缓存 删除InterIIiJIdea文件夹 文件位置&#xff1a;C:\Users\61916\AppData\Local\JetBrains 其中61916是我电脑…