CAD 文件(DXF / DWG)转换为(DXF / PDF / PNG / SVG)

方法一Github

这个是ezdxf出品的,可以使用命令行的方式进行转换

ezdxf draw -o file.<png|svg|pdf> <file.dxf>

也可以自己改动代码
examples/addons/drawing/pdf_export.py
但是直接运行会有误,以下是我改动后的代码:

from ezdxf.addons import odafc
import ezdxf
import os
import json
import re
import pathlib
import time
from ezdxf.addons.drawing import Frontend, RenderContext
from ezdxf.addons.drawing import pymupdf, layoutdef transparency(filepath):doc = ezdxf.readfile(filepath)msp = doc.modelspace()backend = pymupdf.PyMuPdfBackend()Frontend(RenderContext(doc), backend).draw_layout(msp)pdf_bytes = backend.get_pdf_bytes(layout.Page(0, 0, layout.Units.mm), settings=layout.Settings(scale=10))pdf_file = os.path.join(os.path.dirname(filepath), os.path.basename(filepath).split(".")[0] + "_dwg.pdf")(pathlib.Path(pdf_file)).write_bytes(pdf_bytes)
def export(filepath: pathlib.Path, layout_names=("Model",), scale=1):print(f"\nprocessing: {filepath.name}")t0 = time.perf_counter()doc = ezdxf.readfile(filepath)t1 = time.perf_counter()print(f"loading time: {t1 - t0: .3f} seconds")for layout_name in layout_names:outname = filepath.stem + f"-[{layout_name}]" + ".pdf"CWD = os.path.dirname(filepath)outname = pathlib.Path(CWD+"/"+outname)print(outname)t1 = time.perf_counter()if layout_name == "Model":dxf_layout = doc.modelspace()page = layout.Page(0,  # auto-detect0,  # auto-detectlayout.Units.mm,  # 1 drawing unit = 1mmlayout.Margins.all(0),max_width=1189,  # limit page width to 1189mmmax_height=841,  # limit page height to 841mm)settings = layout.Settings(scale=scale)else:try:dxf_layout = doc.paperspace(layout_name)except KeyError:print(f"Layout '{layout_name}' not found")continuepage = layout.Page.from_dxf_layout(dxf_layout)settings = layout.Settings(fit_page=False,scale=dxf_layout.get_plot_unit_scale_factor() * scale,)backend = pymupdf.PyMuPdfBackend()# You can get the content bounding box in DXF drawing units, before you create the# PDF output to calculate page size, margins, scaling factor and so on ...# content_extents = backend.bbox()Frontend(RenderContext(doc), backend).draw_layout(dxf_layout)pdf_bytes = backend.get_pdf_bytes(page, settings=settings)t2 = time.perf_counter()print(f"render time: {t2 - t1: .3f} seconds")(outname).write_bytes(pdf_bytes)class dwg_analysis:def __init__(self, filepath, format):self.filepath = filepathself.format = formatdef dwg2data(self):dxf_file = os.path.join(os.path.dirname(self.filepath), os.path.basename(self.filepath).split(".")[0] + ".dxf")odafc.convert(self.filepath, dxf_file, version='R2000', replace=True)  doc = ezdxf.readfile(dxf_file)msp = doc.modelspace()pdf_file = export(pathlib.Path(dxf_file),["Model", "PLAN", "SECTION"],)# pdf_file = transparency(dxf_file)data = {}# 获取TEXT实体texts = msp.query('TEXT')text_data = []if self.format == "dwg_text":for text in texts:decoded_str = re.sub(r'\\U\+([0-9A-Fa-f]{4})', lambda m: chr(int(m.group(1), 16)), text.dxf.text)text_data.append(decoded_str)filtered_list = [item for item in text_data if not (isinstance(item, (int, float)) or (isinstance(item, str) and str.isdigit(item)) or (isinstance(item, str) and item.isdigit()))]data['document'] = self.remove_duplicates(filtered_list)data['metadata'] =  pdf_filedata['format'] =  formatreturn datafor text in texts:decoded_str = re.sub(r'\\U\+([0-9A-Fa-f]{4})', lambda m: chr(int(m.group(1), 16)), text.dxf.text)text_info = {'text': decoded_str,'insert': (text.dxf.insert[0], text.dxf.insert[1]),'height': text.dxf.height,'rotation': text.dxf.rotation,'style': text.dxf.style,'layer': text.dxf.layer}text_data.append(text_info)data['TEXT'] = text_data# 获取LINE实体lines = msp.query('LINE')line_data = []for line in lines:line_data.append({'start': (line.dxf.start[0], line.dxf.start[1]),'end': (line.dxf.end[0], line.dxf.end[1])})data['LINE'] = line_data# 获取POLYLINE实体polylines = msp.query('POLYLINE')polyline_data = []for polyline in polylines:points = []for point in polyline.points():points.append((point[0], point[1]))polyline_data.append(points)data['POLYLINE'] = polyline_data# 获取CIRCLE实体circles = msp.query('CIRCLE')circle_data = []for circle in circles:circle_data.append({'center': (circle.dxf.center[0], circle.dxf.center[1]),'radius': circle.dxf.radius})data['CIRCLE'] = circle_data# 获取ARC实体arcs = msp.query('ARC')arc_data = []for arc in arcs:arc_data.append({'center': (arc.dxf.center[0], arc.dxf.center[1]),'radius': arc.dxf.radius,'start_angle': arc.dxf.start_angle,'end_angle': arc.dxf.end_angle})data['ARC'] = arc_data# 获取ELLIPSE实体ellipses = msp.query('ELLIPSE')ellipse_data = []for ellipse in ellipses:ellipse_data.append({'center': (ellipse.dxf.center[0], ellipse.dxf.center[1]),'major_axis': (ellipse.dxf.major_axis[0], ellipse.dxf.major_axis[1]),'ratio': ellipse.dxf.ratio,'start_param': ellipse.dxf.start_param,'end_param': ellipse.dxf.end_param})data['ELLIPSE'] = ellipse_datareturn datadef remove_duplicates(self,lst):res = []seen = {}for i in lst:if i not in seen:seen[i] = 1res.append(i)return res# 示例调用
if __name__ == "__main__":# DWG文件路径DWG_path = "/home/hyh/data/Maintenance_test_data/AIN.dwg"format = "dwg_text"dwf = dwg_analysis(DWG_path,format)dwf_txt = dwf.dwg2data()output_path = os.path.join(os.path.dirname(DWG_path), os.path.basename(DWG_path).split(".")[0] + "_" +format+ ".json")with open(output_path, 'w', encoding='utf-8') as f:json.dump(dwf_txt, f, ensure_ascii=False, indent=4)

方法二Github

一位国内大神出品的项目

🆒 cad2x @orcastor-previewer

预编译版本: 字体与图案 (3.53MB) | linux_arm64 (2.88MB) | linux_x64 (3.42MB) | win_x64 (3.61MB)

cad2x - 一个最小化的单文件命令行工具,用于将 CAD 文件(DXF / DWG)转换为其他格式(DXF / PDF / PNG / SVG),衍生自 LibreCAD (commit: 0601535)。

特性

  • 💼 便携 - 无图形界面 & 无依赖项
  • 🌈 定制 - 大幅精简了 Qt 5.12.12 (QtCore & QtGUI)
  • 🚀 极小 - 2.9MB 的二进制文件大小(在 aarch64-linux 平台上)
  • 显示 - 支持显示格式错误的 Unicode 字符 - DXF 文件编码
  • 🗳️ 跨平台 - 支持 MacOS、Windows、Linux、安卓、iOS和大多数基于Linux的操作系统
  • 🔠 重用 - 懒加载 ttf/ttc TrueType 字体(不仅限于 lff/cxf)- 以较少的开销共享系统和其他应用程序的字体

最佳实践

使用方法: ./cad2x [选项] <dxf/dwg 文件>将 DXF/DWG 文件转换为 DXF v2007/PDF/PNG/SVG 文件。示例:cad2x *.dxf|*.dwg|*-- 将所有 dxf/dwg 文件打印为具有相同文件名的 pdf 文件。cad2x -o svg *.dxf|*.dwg|*-- 将所有 dxf/dwg 文件转换为 svg 格式。cad2x -o b.png a.dwg-- 将 a.dwg 文件打印为 b.png。选项:-h, --help                           显示此帮助。-v, --version                        显示版本信息。-a, --auto-orientation               根据文档边界框自动设置纸张方向(横向或纵向)。-b, --monochrome                     打印单色(黑/白)。-c, --fit                            自动适应并居中绘图到页面。-e, --code-page <codepage>           设置默认的代码页(默认为 ANSI_1252)。-f, --default-font <font>            设置默认字体(默认为 standard)。-l, --font-dirs <dir1,dir2,dir3...>  设置更多字体目录。-m, --margins <L,T,R,B>              页面边距(毫米)(整数或浮点数)。-n, --pages <HxV>                    在多页上打印(水平 x 垂直)。-o, --outfile <file>                 输出 DXF v2007/PDF/PNG/SVG 文件。-p, --paper <WxH>                    页面尺寸(宽 x 高)(毫米)。-r, --resolution <integer>           输出分辨率(DPI)。-s, --scale <double>                 输出比例。例如:0.01(表示 1:100 比例)。-t, --directory <path>               目标输出目录。参数:<dxf/dwg 文件>                      输入 DXF/DWG 文件(们)

将所有 dwg 文件转换为 pdf 格式

  • 检测方向 (-a)
  • 自动适应并居中绘图到页面 (-c)
  • output 目录 (-t)

./cad2x -o pdf *.dwg -t output -ac

a.dxf 转换为 b.png

  • 检测方向 (-a)
  • 自动适应并居中绘图到页面 (-c)
  • 将页面大小设置为 2970 x 2100 (-p 2970x2100)
  • 设置边距 (-m 2.0,2.0,2.0,2.0)

./cad2x -o b.png a.dxf -ac -p 2970x2100 -m 2.0,2.0,2.0,2.0

a.dwg 转换为 b.dxf(v2007)

./cad2x -o b.dxf a.dwg

a.dxf(QCad / v2004 / v2000 / v14 / v12)转换为 b.dxf(v2007)

./cad2x -o b.dxf a.dxf

a.dxf 转换为 b.pdf

  • 检测方向 (-a)
  • 自动适应并居中绘图到页面 (-c)
  • 设置默认代码页为中文 (-e ANSI_936)
  • 设置默认字体 (-f simsun)
  • 添加字体列表 (-l /one/fonts,/two/fonts)

./cad2x -o b.pdf a.dxf -e ANSI_936 -f simsun -ac -l /one/fonts,/two/fonts

代码页参考

语言DXF 代码页
泰语ANSI_874
日语ANSI_932
简体中文ANSI_936
韩语ANSI_949
繁体中文ANSI_950
中欧ANSI_1250
西里尔语ANSI_1251
西欧ANSI_1252
希腊语ANSI_1253
土耳其语ANSI_1254
希伯来语ANSI_1255
阿拉伯语ANSI_1256
波罗的海语ANSI_1257
越南语ANSI_1258

Linux构建教程

准备

apt update
apt-get install g++ gcc make git-core pkg-config qt5-qmake libfreetype-dev -y --no-install-recommends

构建精简版的 qtbase(Qt 5.12.12)

  • [强烈推荐] 静态 QtCore & QtGUI 库
cd ./3rdparty/qtbase/
./configure -developer-build -release -no-iconv -no-icu -static -strip -confirm-license -opensource
qmake -qt=qt5 -r -- -developer-build -release -no-iconv -no-icu -static -strip -confirm-license -opensource
make -j20cd src/corelib
make install_targ_headersmake -j20 staticlibcd ../gui
make install_targ_headersmake -j20 staticlib
  • [可用备选方案] 共享 QtCore & QtGUI 库
cd ./3rdparty/qtbase/
./configure -developer-build -release -no-iconv -no-icu -strip -confirm-license -opensource -R .
qmake -qt=qt5 -r -- -developer-build -release -no-iconv -no-icu -strip -confirm-license -opensource -R .
make -j20
make install

构建 cad2x

qmake -qt=qt5 -r
make -j20

Windows(x64)构建教程

准备

  • 安装Qt 5.12.12 for windows,勾选MinGW7.3.0

  • 下载MinGW7.3.0-seh,解压到磁盘某个位置,比如D:\mingw64

  • 设置D:\mingw64\binD:\mingw64\x86_64-w64-mingw32\binD:\mingw64\libexec\gcc\x86_64-w64-mingw32\7.3.0到系统环境变量Path

  • D:\mingw64\bin\mingw32-make修改成make

  • ./3rdparty/qtbase/替换$QT$\Qt5.12.12\5.12.12\mingw73_64目录下的includemkspecs文件夹

构建精简版的 qtbase(Qt 5.12.12)

  • 通过开始菜单的Qt 5.12.12 (MinGW 7.3.0 64-bit)进入cmd(命令提示符)

  • 静态 QtCore & QtGUI 库

cd ./3rdparty/qtbase/
configure -developer-build -release -platform win32-g++ -no-iconv -no-icu -static -strip -confirm-license -opensource -qt-zlib -qt-freetype
qmake -r -- -developer-build -release -platform win32-g++ -no-iconv -no-icu -static -strip -confirm-license -opensource -qt-zlib -qt-freetype
make -j20

构建 cad2x

qmake -r
make -j20

使用upx进行压缩

./upx -9 --ultra-brute cad2x

更改日志

  • ✨ 通过简单拖放添加字体到 cad2x-converter/output/fonts
  • ✂️ 裁剪QtBase
    • ✂️ 裁剪 QtWidgets & QtPrintSupport 依赖项
    • ✂️ 裁剪 GUI 应用程序的依赖项(QtGuiApplication / accessible / input / events / plugins)
    • ✂️ 裁剪 Render 的依赖项(OpenGL / Vulkan / KMS / VNC)
    • ✂️ 裁剪 qpa 的依赖项(X 服务器等)
    • ✂️ 裁剪 ICU / PCRE2 的依赖项
    • ✂️ 裁剪无用代码(Pixmap / Icon / Windows 等)
    • ✂️ 内置字体数据库,无需插件
  • ✂️ 摘选出关键代码
  • ✂️ 裁剪 boost 的依赖项
  • ✂️ 最小的二进制文件大小(静态链接)(在 stripupx -9 --ultra-brute 之后为 2.9MB)
    > ldd cad2pdflibdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x00000055021dc000)libglib-2.0.so.0 => /lib/aarch64-linux-gnu/libglib-2.0.so.0 (0x00000055021f0000)libpng16.so.16 => /lib/aarch64-linux-gnu/libpng16.so.16 (0x000000550232b000)libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x000000550236f000)libfreetype.so.6 => /lib/aarch64-linux-gnu/libfreetype.so.6 (0x000000550241a000)libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x00000055024d9000)libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x000000550256b000)libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x000000550259c000)libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000005502781000)libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x00000055027a5000)/lib/ld-linux-aarch64.so.1 (0x0000005500000000)libpcre.so.3 => /lib/aarch64-linux-gnu/libpcre.so.3 (0x0000005502918000)
    
  • ✂️ 合并: cad2pdf + cad2pic = cad2x
  • 🛠️ 修复: png 大小自动设置
  • 🛠️ 修复: 输出文件参数
  • 🛠️ 修复: 格式错误的 Unicode 字符 - DXF 文件编码
  • 🛠️ 修复: QCad 格式 DXF 中实体的不正确偏移
  • 🆕 功能: 支持自动方向检测
  • 🆕 功能: 懒加载 ttf/ttc 字体文件支持(不仅限于 lff/cxf
  • 🆕 功能: 自动设置系统字体目录
    • - C:\Windows\Fonts
    • - /Library/Fonts /System/Library/Fonts
    • - /usr/share/fonts /usr/local/share/fonts ~/.fonts
  • 🆕 功能: 支持更多导出格式
    • 从 DWG 到 BMP 缩略图的快速方式
    • DWG / DXF 到 JSON 用于 cad.js
    • DWG / DXF 到 XML
    • DWG / DXF 到 TXT
  • 🆕 功能: 支持3D模型文件

参考

您可以首先参考原始的 LibreCAD Wiki - 从源代码构建 页面。

常见问题解答

问: 如何导出其他图像格式,如 bmp / jpeg / tiff / ico / tga?

答: 创建一个名为 ‘plugins/imageformats’ 的目录,并将 libq<fmt>.so/q<fmt>.dll 放入其中(可以从 这里 找到,<fmt>为具体格式),应用程序将自动加载插件。

问:如果导出的文件空白怎么办?

答:3D模型暂时不支持,如果不是3D文件,尝试添加-c参数导出。

问:如果出现乱码怎么办?

答:尝试添加默认编码和对应字体尝试,比如-e ANSI_936 -f simsun,设置默认简体中文,默认字体为宋体。

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

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

相关文章

#13前端后花园周刊-10个现代 Node.js 运行时新特性、Nextjs15、Astro4.9、CSS压缩

⚡️行业动态 JavaScript 的创建者 Brendan Eich 在 Twitter/X 上出现&#xff0c;反驳了 JS 是“最邋遢的”的说法&#xff0c;称其只有 50% 。 &#x1f4c6;发布 Next.js 15 RC 流行的 React 元框架已经准备好迎接一个主要的新版本&#xff0c;它有一个 RC&#xff0c;让…

VS2015 +Qt 新建单元测试工程报错error LNK2019,error LNK2001: 无法解析的外部符号 WinMain

项目场景&#xff1a; 使用Qt5.9.9和vs2015进行单元测试工程的创建 问题描述 创建完成后&#xff0c;编译项目&#xff0c;报错&#xff1a; error LNK2019&#xff0c;error LNK2001: 无法解析的外部符号 WinMain 原因分析&#xff1a; 原因是笔者创建工程的时候&#xf…

python如何base64编码与解码操作???

前言 之前的文章有提到Base64编码的实现原理&#xff0c;你一定非常想尝试一下&#xff0c;对吧&#xff1f;对&#xff0c;你非常想尝试一下&#xff08;不接受反驳&#xff0c;你想你想你很想&#xff09;。既然你这么想尝试&#xff0c;那今天来看一下在python中如何使用Ba…

贝锐蒲公英异地组网:降低建筑工地远程视频监控成本、简化运维

中联建设集团股份有限公司是一家建筑行业的施工单位&#xff0c;专注于建筑施工&#xff0c;业务涉及市政公用工程施工总承包、水利水电工程施工总承包、公路工程施工总承包、城市园林绿化专业承包等&#xff0c;在全国各地开展有多个建筑项目&#xff0c;并且项目时间周期可能…

Camx架构-Camera kernel Driver debugging

目录 V4L2 framework camera drivers CRM 功能性 CRM log analysis 使能CRM log: camera启动期间列举子设备: userspace 连接或者取消已获得的device handles(UMD 等效于CSLLink/CSLUnlink) userspace open request (UMD等效于CSLOpenRequest) 在SOF期间,reque…

dataframe元组和字典操作

这是一个测试文件&#xff0c;今天发现一些有意思的语法&#xff0c; 首先字典是可以加入元组的 AA {"a":2,"b":23,"c":(1,2,3)} print(AA)结果如下 example1 import pandas as pd data pd.DataFrame(data {"a":(-1,-2,-3),&quo…

聚观早报 | 东风奕派eπ008将上市;苹果Vision Pro发布会

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月3日消息 东风奕派eπ008将上市 苹果Vision Pro发布会 特斯拉Model 3高性能版开售 小米14推送全新澎湃OS系统 …

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN多选【11道题】

1.在BGP/MPLS IP VPN中&#xff0c;PE上分配私网标签的方式有以下哪些顶? 基于平台的MPLS标签分配 基于VPN实例的MPLS标签分配 基于路由的MPLS标签分配 基于接口的MPLS标签分配 2.以下关于BGP/MPLS IP VPN的描述&#xff0c;正确的有哪些项? 在BGP/MPLSIP VPN场景中&am…

HCL模拟器下做M-LAG测试(以及和华为配置对比)-二层架构

1.简单二层架构 1.1 拓扑图 1.2 配置 1.2.1 Leaf1配置 system-mac必须配置&#xff0c;否则会有一个node处于unknown状态&#xff0c;即使配置主节点的mac&#xff0c;主节点也需要配置system-mac为自己的mac ## M-LAG配置[Leaf1] m-lag system-mac 0001-0001-0001 # 手动设…

【论文复现|智能算法改进】基于自适应蜣螂算法的无人机三维路径规划方法

目录 1.UAV路径规划数学模型2.改进点3.结果展示4.参考文献5.代码获取 1.UAV路径规划数学模型 【智能算法应用】蜣螂优化算法DBO求解UAV路径规划 2.改进点 混沌序列初始化 在处理复杂的优化问题时&#xff0c;原始蜣螂算法采用随机生成种群的方法进行种群初始化&#xff0c;…

从零开始学习Linux(9)----文件系统

1.前言 1.铺垫 a.文件内容属性 b.访问文件之前&#xff0c;都得先打开&#xff0c;修改文件&#xff0c;都是通过执行代码的方式完成修改&#xff0c;文件必须被加载到内存中 c.谁打开文件&#xff1f;进程在打开文件 d.一个进程可以打开多少个文件呢&#xff1f;可以打开多个…

没有知网资源如何快速下载知网论文

今天有位同学求助一篇知网论文&#xff0c;“球磨-点击化学反应&#xff1a;无溶剂绿色反应方式”&#xff0c;其实下载知网论文是一件非常简单的事情&#xff0c;下面小编就把如何在家轻松查找下载知网论文的方法给大家演示一遍。 一、首先你需要获取知网使用权限&#xff0c…

视频汇聚平台EasyCVR对接GA/T 1400视图库:结构化数据(人员/人脸、车辆、物品)对象XMLSchema描述

在信息化浪潮席卷全球的背景下&#xff0c;公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中&#xff0c;GA/T 1400标准作为公安视频图像信息应用系统的核心规范&#xff0c;以其结构化数据处理与应用能力&#xff0c;为公安信息化建设注入了强大的动力。…

p10,idea开发工具

1 什么是ide 有编写&#xff0c;编译&#xff0c;运行三个功能合一的集成开发工具。

java自学阶段一:基础知识学习

《项目案例—黑马tlias智能学习辅助系统》 目录&#xff1a; 异常 一&#xff1a;学习目标&#xff1a; 异常&#xff1a;能够看懂异常信息&#xff0c;了解异常体系结构和分类&#xff0c;掌握异常的两种处理方式&#xff0c;自定义异常。 二、异常&#xff1a; 1.异常的概…

ES开发及面试手册

入门基础 简介 Elasticsearch是一个基于Lucene的搜索和分析引擎&#xff0c;它提供了一个分布式、多租户能力的全文搜索引擎&#xff0c;具有HTTP Web界面和无模式JSON文档。 使用场景 什么是全文检索 全文检索 是一种信息检索技术&#xff0c;它允许用户通过输入查询关键词来…

【三维重建NeRF(三)】Mip-NeRF论文解读

本文结合深蓝学院课程学习和本人的理解&#xff0c;欢迎交流指正 文章目录 Mip-NeRF流程简述混叠问题与MipMapMip-NeRF提出的解决办法圆锥台近似计算与集成位置编码(IPE) Mip-NeRF流程简述 Mip-NeRF的大体流程和NeRF基本是一样的&#xff0c;NeRF介绍 创新的部分就是针对NeRF…

系统安全及应用11

一个新的服务器到手之后&#xff0c;部署服务器的初始化 1、配置IP地址 网关 dns解析&#xff08;static&#xff09;内网和外网 2、安装源外网&#xff08;在线即可&#xff09;&#xff0c;内网&#xff08;只能用源码包编译安装&#xff09; 3、磁盘分区&#xff0c;lvm …

mybatis—plus和mybatis的区别

一前置知识&#xff1a; CRUD操作&#xff08;create 添加数据read读取数据 update 修改数据delete删除数据&#xff09; 二&#xff0c;总体概览 MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发工作、提高…

二人订单共享模式:新零售电商盈利新秘诀

电商江湖日新月异&#xff0c;竞争如火如荼&#xff0c;如何脱颖而出&#xff0c;赢得消费者&#xff1f;二人订单共享模式&#xff0c;这是一种全新的商业模式&#xff0c;旨在打造爆款产品&#xff0c;迅速吸引大量客源&#xff0c;并激发消费者重复购买欲望。 首先&#xf…