01-基于SOA架构someip 开发-Linux开发环境搭建

news2024/9/28 19:24:59
  1. 前言:

SOME/IP 是一个汽车的中间件解决方案,可用于控制消息。从一开始,它的设计就是为了完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR设备,以及头部单元或远程信息处理设备。同时还确保了SOME/IP支持信息娱乐域以及车内其他域的功能,从而使SOME/IP可以用于多数替换场景以及更传统的CAN场景,在智能网联汽车,面向服务开发SOA架构思想环境下,SOME/IP扮演着非常重要的角色--通信。

2. 准备工作

2.1 下载开源code (3.2.0版本)

capicxx-core-runtime

github/镜像下载地址:https://hub.yzuu.cf/COVESA/capicxx-core-runtime/tree/89720d3c63bbd22cbccc80cdc92c2f2dd20193ba

https://github.com/COVESA/capicxx-core-runtime/tree/89720d3c63bbd22cbccc80cdc92c2f2dd20193ba

或者通过tag 选择对应的版本下载:如下图

capicxx-someip-runtime

github/镜像下载地址:https://hub.yzuu.cf/COVESA/capicxx-someip-runtime/tree/0ad2bdc1807fc0f078b9f9368a47ff2f3366ed13

TAG下载操作如上图

capicxx-dbus-runtime

github/镜像下载地址:https://hub.yzuu.cf/COVESA/capicxx-dbus-runtime/tree/d1610ad0d6f1b6751964af41a0cc1599e2d7a955

TAG下载操作如上图

vsomeip

github/镜像下载地址:https://hub.yzuu.cf/COVESA/vsomeip/tree/13f9c89ced6ffaeb1faf485152e27e1f40d234cd

TAG下载操作如上图

2.2 下载工具 (最新)

commonapi_core_generator

下载地址:https://hub.yzuu.cf/GENIVI/capicxx-core-tools/releases/latest/download/commonapi_core_generator.zip

commonapi_dbus_generator

下载地址:https://hub.yzuu.cf/GENIVI/capicxx-dbus-tools/releases/latest/download/commonapi_dbus_generator.zip

commonapi_someip_generator

下载地址:https://hub.yzuu.cf/GENIVI/capicxx-someip-tools/releases/latest/download/commonapi_someip_generator.zip

2.3 下载dbus1.10.10 (dbus-1.10.10.tar.gz)

下载地址:http://dbus.freedesktop.org/releases/dbus/dbus-1.10.10.tar.gz

2.4 boost_1_74_0.tar.gz

下载地址:https://boostorg.jfrog.io/artifactory/main/release/1.74.0/source/boost_1_74_0.tar.gz

2.5 下载 dlt-daemon-2.18.8.tar.gz

下载地址:https://hub.yzuu.cf/COVESA/dlt-daemon/tags

选择 最新:v2.18.8

2.6 安装依赖文件

ubuntu

sudo apt install -y asciidoc source-highlight doxygen graphviz asciidoc pkg-config

3. 开发框架

开发项目离不开开发框架搭建,如何运作整个资源。

3.1 开发框架

.
├── build
├── build_x86.sh
├── cfg
│ ├── commonapi.ini
│ ├── vsomeip_client.json
│ ├── vsomeip.json
│ └── vsomeip_server.json
├── CMakeLists.txt
├── doc
│ ├── CommonAPICppSpecification.pdf
│ ├── CommonAPICppUserGuide.pdf
├── examples
│ ├── CMakeLists.txt
│ ├── fidl
│ ├── src
│ └── src-gen
│ └── v0
├── host_tools
│ ├── commonapi_core_generator
│ ├── commonapi_dbus_generator
│ └── commonapi_someip_generator
├── thirdparty
│ ├── archive
│ │ ├── capicxx-core-runtime-89720d3c63bbd22cbccc80cdc92c2f2dd20193ba.zip
│ │ ├── capicxx-dbus-runtime-d1610ad0d6f1b6751964af41a0cc1599e2d7a955.zip
│ │ ├── capicxx-someip-runtime-0ad2bdc1807fc0f078b9f9368a47ff2f3366ed13.zip
│ │ ├── dbus-1.10.10.tar.gz
│ │ └── vsomeip-13f9c89ced6ffaeb1faf485152e27e1f40d234cd.zip
│ ├── capicxx-core-runtime
│ ├── capicxx-dbus-runtime
│ ├── capicxx-someip-runtime
│ ├── CMakeLists.txt
│ ├── dbus-1.10.10
│ └── vsomeip
├── toolchains
│ ├── archive
│ │ ├── boost_1_74_0.tar.gz
│ │ ├── commonapi_core_generator.zip
│ │ ├── commonapi_dbus_generator.zip
│ │ ├── commonapi_someip_generator.zip
│ │ └── dlt-daemon-2.18.8.tar.gz
│ ├── boost_1_74_0
│ ├── dlt-daemon-2.18.8
│ └── scripts
│ ├── build_boost_android.sh
│ └── build_boost_common.sh

3.2 编译脚本

3.2.1 Ubuntu Linux 编译脚本:

#!/bin/bash
#
#----------------------------------------------------------
#    author: Tim
#    email : 1352430027@qq.com                                                              
#    description: SOA someip build script                                                   
# ---------------------------------------------------------
#    Warm reminder :Abort operation with Ctrl+C
# ---------------------------------------------------------

ROOT_DIR=$(pwd)

DBUS_ARCHIVE_PATH=${ROOT_DIR}/thirdparty/archive/dbus-1.10.10.tar.gz
DBUS_DIR=${ROOT_DIR}/thirdparty/dbus-1.10.10

BOOST_ARCHIVE_PATH=${ROOT_DIR}/toolchains/archive/boost_1_74_0.tar.gz
BOOST_DIR=${ROOT_DIR}/toolchains/boost_1_74_0

DLT_ARCHIVE_PATH=${ROOT_DIR}/toolchains/archive/dlt-daemon-2.18.8.tar.gz
DLT_DIR=${ROOT_DIR}/toolchains/dlt-daemon-2.18.8

PREFIX_DIR=${ROOT_DIR}/build/x86
PREFIX_INSTALL_DIR=${PREFIX_DIR}/install

echo -e "Project dir: $ROOT_DIR"

if [ -d ${PREFIX_INSTALL_DIR} ];then
    rm -rf $PREFIX_INSTALL_DIR
    mkdir -p $PREFIX_INSTALL_DIR
else
    mkdir -p $PREFIX_INSTALL_DIR
fi

if [ ! -d ${DBUS_DIR} ];then
    if [ -e  ${DBUS_ARCHIVE_PATH} ];then
        echo -e "archive $DBUS_ARCHIVE_PATH is exist. now do it."
        tar -xzf ${DBUS_ARCHIVE_PATH} -C ${ROOT_DIR}/thirdparty/ 
        cd ${DBUS_DIR}
        for i in ${ROOT_DIR}/thirdparty/capicxx-dbus-runtime/src/dbus-patches/*.patch; do patch -p1 < $i; done
        ./configure
        make
            cd ${ROOT_DIR}
    else
        echo -e "archive ${DBUS_ARCHIVE_PATH} is not exist. now get it."
        cd thirdparty/archive/
        wget http://dbus.freedesktop.org/releases/dbus/dbus-1.10.10.tar.gz
        cd ${ROOT_DIR}
        tar -xzf ${DBUS_ARCHIVE_PATH} -C ${ROOT_DIR}/thirdparty/  
        cd thirdparty/dbus-1.10.10
        for i in ${ROOT_DIR}/thirdparty/capicxx-dbus-runtime/src/dbus-patches/*.patch; do patch -p1 < $i; done
        ./configure
        make
            cd ${ROOT_DIR}
    fi
fi

if [ ! -d ${BOOST_DIR} ];then
    echo -e "dir ${BOOST_DIR} is not exist. now do it."
    if [ -e  ${BOOST_ARCHIVE_PATH} ];then
        echo -e "archive $BOOST_ARCHIVE_PATH is exist. now do it."
        tar -xzf ${BOOST_ARCHIVE_PATH} -C ${ROOT_DIR}/toolchains/ 
        mkdir -p ${BOOST_DIR}/build/x86
        cd ${BOOST_DIR}
        ./bootstrap.sh --prefix=build/x86
        ./b2 install
        sudo ./bootstrap.sh --prefix=/usr/local
        sudo ./b2 install
            cd ${ROOT_DIR}
    else
        echo -e "archive ${BOOST_ARCHIVE_PATH} is not exist. now get it."
        cd ${ROOT_DIR}/toolchains/archive
        wget https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz
        tar -xzf boost_1_78_0.tar.gz -C ${ROOT_DIR}/toolchains/
        mkdir -p ${BOOST_DIR}/build/x86
        cd ${BOOST_DIR}
        ./bootstrap.sh --prefix=build/x86
        ./b2 install
        sudo ./bootstrap.sh --prefix=/usr/local
        sudo ./b2 install
            cd ${ROOT_DIR}
    fi
fi

if [ ! -d ${DLT_DIR} ];then
    echo -e "dir ${DLT_DIR} is not exist. now do it."
    if [ -e  ${DLT_ARCHIVE_PATH} ];then
        echo -e "archive $DLT_ARCHIVE_PATH is exist. now do it."
        tar -xzf ${DLT_ARCHIVE_PATH} -C ${ROOT_DIR}/toolchains/ 
        mkdir -p ${DLT_DIR}/build/x86
        cd ${DLT_DIR}/build/x86
        cmake ../../
        make
        sudo make install
            cd ${ROOT_DIR}
    fi
fi

if [ ! -d ${ROOT_DIR}/toolchains ];then
    mkdir toolchains
fi

if [ ! -d ${ROOT_DIR}/host_tools ];then
    mkdir host_tools
fi

if [ ! -e ${ROOT_DIR}/toolchains/archive/commonapi_core_generator.zip ]; then
    cd ${ROOT_DIR}/toolchains/archive
    echo -e "archive file commonapi_core_generator.zip is not exist. now get it.."
    wget https://hub.yzuu.cf/GENIVI/capicxx-core-tools/releases/latest/download/commonapi_core_generator.zip
    cd ${ROOT_DIR}
fi

if [ ! -d host_tools/commonapi_core_generator ];then
    unzip -o toolchains/archive/commonapi_core_generator.zip -d host_tools/commonapi_core_generator
fi

if [ ! -e ${ROOT_DIR}/toolchains/archive/commonapi_dbus_generator.zip ];then
    cd ${ROOT_DIR}/toolchains/archive
    echo -e "archive file commonapi_dbus_generator.zip is not exist. now get it.."
    wget https://hub.yzuu.cf/GENIVI/capicxx-dbus-tools/releases/latest/download/commonapi_dbus_generator.zip
    cd ${ROOT_DIR}
fi

if [ ! -d host_tools/commonapi_dbus_generator ];then
    unzip -o toolchains/archive/commonapi_dbus_generator.zip -d host_tools/commonapi_dbus_generator
fi

if [ ! -e ${ROOT_DIR}/toolchains/archive/commonapi_someip_generator.zip ];then
    cd ${ROOT_DIR}/toolchains/archive
    echo -e "archive file commonapi_someip_generator.zip is not exist. now get it.."
    wget https://hub.yzuu.cf/GENIVI/capicxx-someip-tools/releases/latest/download/commonapi_someip_generator.zip
    cd ${ROOT_DIR}
fi

if [ ! -d host_tools/commonapi_someip_generator ];then
    unzip -o toolchains/archive/commonapi_someip_generator.zip -d host_tools/commonapi_someip_generator
fi


echo "---------------------------"
echo " > start to build X86."
echo "---------------------------"

cmake -B $PREFIX_DIR \
    -DCMAKE_INSTALL_PREFIX=$PREFIX_INSTALL_DIR \

cmake --build $PREFIX_DIR --target install

3.2.2 Android NDK 编译脚本:

//TODO

3.2.3 QNX编译脚本:

//TODO

4. 结果输出

.
└── x86
├── CMakeCache.txt
├── CMakeDoxyfile.in
├── CMakeDoxygenDefaults.cmake
├── CMakeFiles
│ ├── 3.20.0
│ │ ├── CMakeCCompiler.cmake
│ │ ├── CMakeCXXCompiler.cmake
│ │ ├── CMakeDetermineCompilerABI_C.bin
│ │ ├── CMakeDetermineCompilerABI_CXX.bin
│ │ ├── CMakeSystem.cmake
│ │ ├── CompilerIdC
│ │ └── CompilerIdCXX
│ ├── cmake.check_cache
│ ├── CMakeDirectoryInformation.cmake
│ ├── CMakeError.log
│ ├── CMakeOutput.log
│ ├── CMakeRuleHashes.txt
│ ├── CMakeTmp
│ ├── Makefile2
│ ├── Makefile.cmake
│ ├── progress.marks
│ └── TargetDirectories.txt
├── cmake_install.cmake
├── examples
│ ├── CMakeFiles
│ │ ├── CMakeDirectoryInformation.cmake
│ │ ├── fidl_gen.dir
│ │ ├── HelloWorldClient.dir
│ │ ├── HelloWorldService.dir
│ │ ├── HelloWorldSomeIPClient.dir
│ │ ├── HelloWorldSomeIPService.dir
│ │ └── progress.marks
│ ├── cmake_install.cmake
│ ├── HelloWorldClient
│ ├── HelloWorldService
│ ├── HelloWorldSomeIPClient
│ ├── HelloWorldSomeIPService
│ └── Makefile
├── install
│ ├── etc
│ │ └── vsomeip
│ ├── include
│ │ └── CommonAPI-3.2
│ └── lib
│ ├── cmake
│ ├── libCommonAPI-DBus.so -> libCommonAPI-DBus.so.3.2.0
│ ├── libCommonAPI-DBus.so.3.2.0
│ ├── libCommonAPI.so -> libCommonAPI.so.3.2.0
│ ├── libCommonAPI.so.3.2.0
│ ├── libCommonAPI-SomeIP.so -> libCommonAPI-SomeIP.so.3.2.0
│ ├── libCommonAPI-SomeIP.so.3.2.0
│ ├── libvsomeip3-cfg.so -> libvsomeip3-cfg.so.3
│ ├── libvsomeip3-cfg.so.3 -> libvsomeip3-cfg.so.3.1.20
│ ├── libvsomeip3-cfg.so.3.1.20
│ ├── libvsomeip3-e2e.so -> libvsomeip3-e2e.so.3
│ ├── libvsomeip3-e2e.so.3 -> libvsomeip3-e2e.so.3.1.20
│ ├── libvsomeip3-e2e.so.3.1.20
│ ├── libvsomeip3-sd.so -> libvsomeip3-sd.so.3
│ ├── libvsomeip3-sd.so.3 -> libvsomeip3-sd.so.3.1.20
│ ├── libvsomeip3-sd.so.3.1.20
│ ├── libvsomeip3.so -> libvsomeip3.so.3
│ ├── libvsomeip3.so.3 -> libvsomeip3.so.3.1.20
│ ├── libvsomeip3.so.3.1.20
│ └── pkgconfig
├── install_manifest.txt
├── Makefile
└── thirdparty
├── capicxx-core-runtime
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── CommonAPIConfig.cmake
│ ├── CommonAPIConfigVersion.cmake
│ ├── CommonAPI.pc
│ ├── commonapi.spec
│ ├── CommonAPITargets.cmake
│ ├── Doxyfile
│ ├── libCommonAPI.so -> libCommonAPI.so.3.2.0
│ ├── libCommonAPI.so.3.2.0
│ └── Makefile
├── capicxx-dbus-runtime
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── CommonAPI-DBusConfig.cmake
│ ├── CommonAPI-DBusConfigVersion.cmake
│ ├── CommonAPI-DBus.pc
│ ├── commonapi-dbus.spec
│ ├── CommonAPI-DBusTargets.cmake
│ ├── Doxyfile
│ ├── libCommonAPI-DBus.so -> libCommonAPI-DBus.so.3.2.0
│ ├── libCommonAPI-DBus.so.3.2.0
│ └── Makefile
├── capicxx-someip-runtime
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── CommonAPI-SomeIPConfig.cmake
│ ├── CommonAPI-SomeIPConfigVersion.cmake
│ ├── CommonAPI-SomeIP.pc
│ ├── CommonAPI-SomeIPTargets.cmake
│ ├── libCommonAPI-SomeIP.so -> libCommonAPI-SomeIP.so.3.2.0
│ ├── libCommonAPI-SomeIP.so.3.2.0
│ └── Makefile
├── CMakeFiles
│ ├── CMakeDirectoryInformation.cmake
│ └── progress.marks
├── cmake_install.cmake
├── Makefile
└── vsomeip
├── CMakeFiles
├── cmake_install.cmake
├── Doxyfile
├── examples
├── libvsomeip3-cfg.so -> libvsomeip3-cfg.so.3
├── libvsomeip3-cfg.so.3 -> libvsomeip3-cfg.so.3.1.20
├── libvsomeip3-cfg.so.3.1.20
├── libvsomeip3-e2e.so -> libvsomeip3-e2e.so.3
├── libvsomeip3-e2e.so.3 -> libvsomeip3-e2e.so.3.1.20
├── libvsomeip3-e2e.so.3.1.20
├── libvsomeip3-sd.so -> libvsomeip3-sd.so.3
├── libvsomeip3-sd.so.3 -> libvsomeip3-sd.so.3.1.20
├── libvsomeip3-sd.so.3.1.20
├── libvsomeip3.so -> libvsomeip3.so.3
├── libvsomeip3.so.3 -> libvsomeip3.so.3.1.20
├── libvsomeip3.so.3.1.20
├── Makefile
├── tools
├── vsomeip3Config.cmake
├── vsomeip3ConfigVersion.cmake
├── vsomeip3.pc
└── vsomeip3Targets.cmake

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

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

相关文章

华为OD机试题,用 Java 解【VLAN 资源池】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

脑洞|ChatGPT加持下,ChatOps将如何革新团队协作与运维管理?

要说近期科技圈 “顶流”&#xff0c;非 ChatGPT 莫属。 比起目前常见的语音助手与聊天 bot&#xff0c;这位机器人显得更有 “人味儿”&#xff0c;不仅能模拟人类的语气&#xff0c;跟你聊得有来有回&#xff0c;还能写剧本、编音乐、写代码。 说到聊天工具&#xff0c;就让…

低代码开发可以解决哪些问题?

低代码开发可以解决哪些问题&#xff1f;如果用4句话去归纳&#xff0c;低代码开发可以解决以下问题—— 为企业提供更高的灵活性&#xff0c;用户可以突破代码的限制自主开发业务应用&#xff1b;通过减少对专业软件开发人员的依赖&#xff0c;公司可以快速响应市场上的新业务…

完全背包—动态规划

一、背包问题概述 如图&#xff0c;完全背包与01背包的区别只有一点&#xff1a;01背包中每个物品只能取一个而完全背包中每个物品可以取无数个。解决完全背包问题必须首先弄明白01背包&#xff0c;不清楚的可以看我的这篇文章01背包—动态规划。 二、例题 重量价值物品0115物…

Jenkins+docker发布Springbot服务

1.开发Springbot应用 新建多个环境的配置文件 bootstrap.yaml 通过变量获取不同环境active bootstrap-dev.yml bootstrap-pre.yaml 预发布及生产环境配置文件走nacos 二.配置docker 新增Dockerfile文件 Dockerfile内容 # Docker image for springboot file run # VERSION…

代码名命规范浅析

日常开发编码中&#xff0c;代码的名命是个大学问&#xff0c;能快速的看懂开源代码的结构和意图&#xff0c;也是一项必备的能力。在java项目的代码结构中&#xff0c;采用长名命的方式来规范类的名命&#xff0c;能够自己表达其主要意图&#xff0c;配合高级IDE&#xff0c;可…

万字长文带你实战 Elasticsearch 搜索

ES 高级实战 前言 上篇我们讲到了 Elasticsearch 全文检索的原理《别只会搜日志了,求你懂点原理吧》,通过在本地搭建一套 ES 服务,以多个案例来分析了 ES 的原理以及基础使用。这次我们来讲下 Spring Boot 中如何整合 ES,以及如何在 Spring Cloud 微服务项目中使用 ES 来…

考研复试机试 | C++ | 王道机试课程笔记

目录Zero-complexity (上交复试题)题目&#xff1a;代码&#xff1a;括号匹配问题题目&#xff1a;代码&#xff1a;表达式解析问题 &#xff08;浙大机试题&#xff09;题目&#xff1a;代码&#xff1a;标准库里提供了栈 stack<typename> myStack .size() 栈的大小 .pu…

互斥信号+任务临界创建+任务锁

普通信号量 1、信号量概念 2、创建信号量函数 3、互斥信号量 创建互斥信号量函数 等待信号量函数 释放互斥信号量 4、创建任务临界区 5、任务锁 任务上锁函数 ​编辑 任务结束函数 效果 普通信号量 1、信号量概念 信号量像是一种上锁机制&#xff0c;代码必须获…

Java性能-回收算法-Throughout回收算法

垃圾回收算法 理解Throughput回收器 回收器三个基本操作——回收 找到不使用的对象 释放内存 压缩堆碎片 Minor GC和Full GC&#xff0c;每个操作都会标记&#xff0c;释放和压缩对应的目标分代 [63.205s][info][gc,start ] GC(13) Pause Full (Ergonomics) [63.205s][info][…

Odoo丨Odoo框架源码研读三:异常处理与定制化开发

Odoo丨Odoo框架源码研读三&#xff1a;异常处理与定制化开发 Odoo源码研读的第三期内容&#xff1a;异常处理与定制化开发。 *异常处理* Odoo中的Exception是对Python内置异常做了继承和封装&#xff0c;设定了自己核心的几个Exception。 而对异常的处理和Python内置异常的…

【趋势分析方法三】MATLAB代码实现TFPW-MK检验

目前水文时间序列趋势分析的方法很多&#xff0c;主要分为参数检验和非参数检验两大类&#xff1a; 参数检验中常用的有线性回归法、滑动平均法、累积距平法等非参数检验则主要包括Mann-Kendal&#xff08;MK&#xff09;法和 Spearman 秩次相关法等 虽然从理论上讲&#xff…

2023年,什么行业更有发展前景?

关于有前景有发展的行业推荐&#xff0c;小课今天还是推荐咱们IT互联网行业。 很多人会说现在懂电脑的那么多,这个行业都饱和了,很多学电脑的找不到工作都改行了。但事实是现在每个行各业都需要互联网&#xff0c;需要懂电脑的技术人才&#xff0c;尤其是在云计算、大数据到来…

了解一下TCP/IP协议族

在《简单说说OSI网络七层模型》中讲到&#xff0c;目前实际使用的网络模型是 TCP/IP 模型&#xff0c;它对 OSI 模型进行了简化&#xff0c;只包含了四层&#xff0c;从上到下分别是应用层、传输层、网络层和链路层&#xff08;网络接口层&#xff09;&#xff0c;每一层都包含…

《安富莱嵌入式周报》第304期:开源硬件耳机设计,AI单片机STM32N6已确定为M55内核,另外还有新品STM32H5, H50X, H7R, H7S发布

往期周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; 第6期ThreadX视频教程&#xff1a;图文并茂吃透RTOS运行机制&#xff0c;任务管理&…

微信小程序的全局弹窗以及全局实例

全局组件 微信小程序组件关系中&#xff0c;父组件使用子组件需要在父组件index.json中引入子组件&#xff0c;然后在父组件页面中使用&#xff0c;这种组件的对应状态是一对一的&#xff0c;一个组件对应一个页面。如果有一个全局弹窗&#xff08;登录&#xff09;&#xff0…

拒绝select *,Navicat快捷查询表中所有字段以,隔开两种方式【附带阿里开发手册】

一、前言 今天公司规定了不要使用SELECT *进行查询&#xff0c;让我想到阿里的《Java 开发手册》 中的ORM 映射规范也是这样的&#xff0c;于是翻出来看看&#xff0c;刚刚好重温一下&#xff01; 规范看了一定要实践&#xff0c;严格规范自己的代码风格&#xff0c;做一个优…

TEMU联盟计划用意何在?做推广达人真的能收入满满吗?

据东哥近期了解&#xff0c;Temu在北美市场表现十分火爆&#xff0c;甚至冲上了AppStore下载榜第一名。Temu在美国市场上采用了类似PDD的病毒式传播策略&#xff0c;以实惠的产品和折扣吸引消费者并动员普通人大量传播链接和App下载&#xff0c;所以有了TEMU联盟计划&#xff0…

Sprng依赖注入(三):构造方法注入是如何工作的?

前言这是Spring依赖注入系列的第三篇&#xff0c;前两篇主要分析了Spring bean依赖属性注入的两种方式&#xff0c;是字段注入和setter方法注入&#xff0c;单独比较这两种方式&#xff0c;会发现其过程和工作原理非常类似&#xff0c;那么构造方法注入会不会也和前两种比较类似…

搭建个人博客保姆级教程(二)

文章目录一. Springboot项目打包成jar包二. mySql部署三. UI 项目部署一. Springboot项目打包成jar包 使用IDEA进行打包&#xff0c;当然也有其他部署方式&#xff0c;如使用maven进行打包&#xff0c;可自行查询资料。 1.打开项目&#xff0c;右击项目选中Open Module Settin…