前端sql条件拼接js工具

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

​
/*常量
LT : " < ",
LE : " <= ",
GT : " > ",
GE : " >= ",
NE : " != ",
EQ : " = ",
LIKE : " like ",
OR : " or ",
IN : " in ",
*/let sqlUtil = {// 拼接sqlbuildSql : '',/*函数*/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 = '';//判断有没有orderByif(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().buildSqlsqlUtil.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对象)。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 拦截器(Interceptor)详解

概念 在Spring Boot中&#xff0c;拦截器是一种用于处理HTTP请求的机制&#xff0c;主要用于执行一些预处理或后处理的逻辑。与AOP不同&#xff0c;拦截器更专注于HTTP请求的处理 拦截器接口 在Spring Boot中&#xff0c;拦截器需要实现HandlerInterceptor接口&#xff01;&a…

【突发】MDPI再出事!23本期刊84篇论文存在“审稿人工厂”问题,4本被中科院预警!

毕业推荐 SCIE&#xff1a; • 计算机类&#xff0c;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区 • 2个月19天录用&#xff0c;6天见刊&#xff0c;36天检索 SCIE&#xff08;CCF-C类&#xff09; • 算法类&#xff0c;2.0-3.0&#xff0c;JCR3区&#xff0c;中科院…

python笔记_格式化输出

%操作符 %s字符串%d整数%.2f浮点数&#xff08;显示小数点后两位&#xff09; 定义 name Tom age 9 score 77.5 输出 print("猫咪信息&#xff1a;%s %d %.2f" % (name,age,score)) ——>猫咪信息&#xff1a;Tom 9 77.50 注意&#xff1a;%操作符指定的类型必…

后台与接口测试demo 查数据

pom 里引入 mybatis 依赖 2.添加 entity 实体类 3.添加 Mapper 添加SQL语句、接口 SpringbootApplicants.Java 添加 RestController接口 标识 SpringbootApplication 是一个接口&#xff0c;可以通过 GetMapping(“/”) 查询所有数据。 GetMapping(“/”) 依赖于 RestCon…

SpringCloud微服务-Eureka注册中心

Eureka注册中心 文章目录 Eureka注册中心前言1、Eureka的作用2、搭建EurekaServer3、服务注册4、启动多个实例5、服务拉取 -实现负载均衡 前言 在服务调用时产生的问题&#xff1a; //2. 利用RestTemplate发起HTTP请求&#xff0c;查询user String url "http://localho…

【力扣hot100】刷题笔记Day15

前言 今天要刷的是图论&#xff0c;还没学过&#xff0c;先看看《代码随想录》这部分的基础 深搜DFS理论基础 深搜三部曲 确认递归函数、参数确认终止条件处理目前搜索节点出发的路径 代码框架 void dfs(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本节点…

DVWA 靶场之 Command Injection(命令执行)middlehigh

对于 middle 难度的 我们直接先看源码 <?phpif( isset( $_POST[ Submit ] ) ) {// Get input$target $_REQUEST[ ip ];// Set blacklist$substitutions array(&& > ,; > ,);// Remove any of the characters in the array (blacklist).$target str_rep…

通过一个栗子来看看创建和运行servlet

通过前面一篇文章的介绍&#xff08;搞着搞着对web project是不是有点迷糊&#xff1f;先关注几个问题-CSDN博客&#xff09;大家对于servlet作为中间层接收请求和反馈响应有了概念上的认知&#xff0c;接下来通过一个栗子来加深一下理解&#xff0c;还是基于前面的jsp项目&…

水电表远程集中抄表管理系统

水电表远程集中抄表管理系统是当前水电行业智能化发展的关键技术之一&#xff0c;为水电企业和用户提供了便捷、高效的抄表管理解决方案。该系统结合了远程监控、自动抄表、数据分析等多种功能&#xff0c;实现了水电抄表的智能化和精准化&#xff0c;为用户节省了大量人力物力…

LeetCode 42 接雨水--单调栈

LeetCode 42 接雨水 在算法和数据结构中&#xff0c;有一类问题被称为“接雨水”问题&#xff0c;它们通常涉及在给定的某种地形&#xff08;通常是表示为数组&#xff09;上模拟雨水下降后的积水情况。其中一个经典的接雨水问题就是给定一个柱状图&#xff0c;计算下雨之后能…

数据库学习案例20240227-数据库连接类故障-ORA-12547: TNS:lost contact

1 操作系统和数据库版本 cat /etc/redhat-release Red Hat Enterprise Linux Server release 6. (Santiago) SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise E…

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

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

ConcurrentModificationException并发修改异常

ConcurrentModificationException并发修改异常 原因分析 可以通过遍历索引也可以通过迭代器进行遍历。在我们使用迭代器进行遍历集合的时候&#xff0c;会获取到当前集合的迭代对象。在里面有封装了迭代器的remove方法与集合自带的remove方法&#xff0c;如果我们调用迭代器对…

PowerShell执行策略:确保脚本安全执行的关键

PowerShell执行策略&#xff1a;确保脚本安全执行的关键 在自动化和脚本任务管理中&#xff0c;PowerShell 是 Windows 系统管理员和自动化工程师的强大工具。但随着这种强大的能力也带来了安全风险&#xff0c;特别是在执行未经验证的脚本时。为了降低这种风险&#xff0c;Po…

CI/CD:安装配置Gitlab Runner

CI/CD笔记.Gitlab系列 安装配置Gitlab Runner - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/136296840 Address …

浅谈 Linux fork 函数

文章目录 前言fork 基本概念代码演示示例1&#xff1a;体会 fork 函数返回值的作用示例2&#xff1a;创建多进程&#xff0c;加深对 fork 函数的理解 前言 本篇介绍 fork 函数。 fork 基本概念 pid_t fork(void) fork 的英文含义是"分叉"&#xff0c;在这里就是 …

UE4c++ ConvertActorsToStaticMesh

UE4c ConvertActorsToStaticMesh ConvertActorsToStaticMesh UE4c ConvertActorsToStaticMesh创建Edior模块&#xff08;最好是放Editor模块毕竟是编辑器代码&#xff09;创建UBlueprintFunctionLibraryUTestFunctionLibrary.hUTestFunctionLibrary.cpp:.Build.cs 目标:为了大量…

oracle 如何使用脚本实现访问控制(无需额外插件)

随着这些年勒索病毒的爆发,各个企业对数据安全的要求越来越高,常见的办法有开启数据库审计,加数据库防火墙,网络限制等等;但是细粒度审计会消耗大量系统资源,第三方数据库防火墙一般是需要收费的;这里介绍我个人常用的四个db级别trigger,用于记录部分关键信息可以应对部…

【QT+QGIS跨平台编译】之五十一:【QGIS_CORE跨平台编译】—【qgsexpressionparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

通过redfish协议实现服务器固件升级、从虚拟光驱启动自检盘并等待完成,最后截图保存

通过redfish协议实现服务器固件升级、从虚拟光驱启动自检盘并等待完成,最后截图保存 版本信息代码 新开发的PCIE设备在做服务器适配时,有时需要服务器厂家更新BMC或BIOS固件。同时,我们也希望对PCIE设备做一些检测,最后收集一些信息存档。如果需要处理的服务器很多,通过BMC的界…