当前位置: 首页 > news >正文

第九章:SSM整合

第九章:SSM整合

9.1:ContextLoaderListener

Spring提供了监听器ContextLoaderListener,实现ServletContextListener接口,可监听ServletContext的状态,在web服务器的启动,读取Spring的配置文件,创建SpringIOC容器,web应用中必须在web.xml中配置。、

<listener><!-- 配置Spring的监听器,在服务启动时加载Spring的配置文件 --><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 自定义spring配置文件的位置和名称 -->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value>
</context-param>

9.2:准备工作

  1. 创建模块

    创建一个新的模块,ssm20

  2. 导入依赖

    <packaging>war</packaging><properties><spring.version>5.3.1</spring.version>
    </properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><!--springmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--mybatis和spring的整合包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!-- 连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</version></dependency><!-- junit测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- log4j日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency><!-- 日志 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!-- ServletAPI --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.1</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><!-- Spring5和Thymeleaf整合包 --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version></dependency>
    </dependencies>
    
  3. 创建表

    CREATE TABLE t_emp (emp_id int NOT NULL AUTO_INCREMENT,emp_name varchar(20) DEFAULT NULL,age int DEFAULT NULL,gender char(1) DEFAULT NULL,email varchar(50) DEFAULT NULL,PRIMARY KEY (emp_id)
    );
    

9.3:配置Web.xml

<!-- 配置Spring的编码过滤器 -->
<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping><!-- 配置处理请求方式的过滤器 -->
<filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping><!-- 配置SpringMVC的前端控制器DispatcherServlet -->
<servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 设置SpringMVC配置文件自定义的位置和名称 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 将DispatcherServlet的初始化时间提前到服务器启动时 --><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping><!-- 配置Spring的监听器,在服务器启动时加载Spring的配置文件 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 设置Spring配置文件自定义的位置和名称 -->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value>
</context-param>

9.4:创建SpringMVC的配置文件并配置

<!-- 扫描控制层组件 -->
<context:component-scan base-package="com.wang.controller"></context:component-scan><!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><property name="order" value="1"/><property name="characterEncoding" value="UTF-8"/><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/templates/"/><!-- 视图后缀 --><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8" /></bean></property></bean></property>
</bean><!-- 配置默认的servlet处理静态资源 -->
<mvc:default-servlet-handler /><!-- 开启mvc的注解驱动 -->
<mvc:annotation-driven /><!-- 配置视图控制器 -->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>

9.5:搭建MyBatis环境

  1. 创建属性文件jdbc.properties

    jdbc.driver=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    jdbc.username=root
    jdbc.password=123456
    
  2. 创建MyBatis的核心配置文件mybatis-config.xml

    <settings><!-- 将下划线映射为驼峰 --><setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings><plugins><!-- 配置分页插件 --><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>
    
  3. 导入日志文件log4j.xml

  4. 创建实体类

    package com.wang.pojo;public class Employee {   private Integer empId;private String empName;private Integer age;private String gender;private String email;// 如下省略空参构造、全参构造、get/set方法、toString方法   
    }
    
  5. 创建Mapper接口和映射文件

    package com.wang.mapper;public interface EmployeeMapper {// 查询所有的员工信息List<Employee> getAllEmployee();
    }
    
    <select id="getAllEmployee" resultType="Employee">select * from t_emp
    </select>
    

9.6:创建Sping的配置文件并配置

<!-- 扫描组件(除控制层) -->
<context:component-scan base-package="com.wang"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan><!-- 引入jdbc.properties -->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!-- 配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property>
</bean><!--配置SqlSessionFactoryBean,可以直接在Spring的IOC中获取SqlSessionFactory-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean"><!--设置MyBatis的核心配置文件的路径--><property name="configLocation" value="classpath:mybatis-config.xml"></property><!--设置数据源--><property name="dataSource" ref="dataSource"></property><!--设置类型别名所对应的包--><property name="typeAliasesPackage" value="com.wang.pojo"></property>
</bean><!-- 配置mapper接口的扫描,可以将指定包下所有的mapper接口通过SqlSession创建代理实现类对象,并将这些对象交给IOC容器管理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.wang.mapper"></property>
</bean><!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property>
</bean><!-- 开启事务的注解驱动 将使用注解@Transactional标识的方法或类中所有的方法进行事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" />

9.7:测试功能

  1. 创建接口EmployeeService

    package com.wang.service;public interface EmployeeService {// 获取员工的分页信息PageInfo<Employee> getEmployeePage(Integer pageNum);
    }
    
  2. 创建实现类EmployeeServiceImpl

    package com.wang.service.impl;@Service
    @Transactional
    public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;@Overridepublic PageInfo<Employee> getEmployeePage(Integer pageNum) {// 开启分页功能PageHelper.startPage(pageNum, 4);// 查询所有的员工信息List<Employee> list = employeeMapper.getAllEmployee();// 获取分页相关数据PageInfo<Employee> page = new PageInfo<>(list, 5);return page;}
    }
    
  3. 创建控制层组件EmployeeController

    package com.wang.controller;@Controller
    public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@GetMapping("/employee/page/{pageNum}")public String getEmployeePage(@PathVariable("pageNum") Integer pageNum, Model model){//获取员工的分页信息PageInfo<Employee> page = employeeService.getEmployeePage(pageNum);//将分页数据共享到请求域中model.addAttribute("page", page);return "employee_list";}
    }
    
  4. 创建页面index.htmlemployee_list.html

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head><meta charset="UTF-8"><title>首页</title>
    </head>
    <body>
    <h1>index.html</h1>
    <a th:href="@{/employee/page/1}">查询员工的分页信息</a>
    </body>
    </html>
    
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head><meta charset="UTF-8"><title>员工列表</title><link rel="stylesheet" th:href="@{/static/css/index_work.css}">
    </head>
    <body>
    <table><tr><th colspan="6">员工列表</th></tr><tr><th>流水号</th><th>员工姓名</th><th>年龄</th><th>性别</th><th>邮箱</th><th>操作</th></tr><tr th:each="employee,status : ${page.list}"><td th:text="${status.count}"></td><td th:text="${employee.empName}"></td><td th:text="${employee.age}"></td><td th:text="${employee.gender}"></td><td th:text="${employee.email}"></td><td><a href="">删除</a><a href="">修改</a></td></tr>
    </table>
    <div style="text-align: center;"><a th:if="${page.hasPreviousPage}" th:href="@{/employee/page/1}">首页</a><a th:if="${page.hasPreviousPage}" th:href="@{'/employee/page/'+${page.prePage}}">上一页</a><span th:each="num : ${page.navigatepageNums}"><a th:if="${page.pageNum == num}" style="color: red;" th:href="@{'/employee/page/'+${num}}" th:text="'['+${num}+']'"></a><a th:if="${page.pageNum != num}" th:href="@{'/employee/page/'+${num}}" th:text="${num}"></a></span><a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.nextPage}}">下一页</a><a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.pages}}">末页</a>
    </div>
    </body>
    </html>
    
  5. 启动项目

相关文章:

第九章:SSM整合

第九章&#xff1a;SSM整合 9.1&#xff1a;ContextLoaderListener ​ Spring提供了监听器ContextLoaderListener&#xff0c;实现ServletContextListener接口&#xff0c;可监听ServletContext的状态&#xff0c;在web服务器的启动&#xff0c;读取Spring的配置文件&#xf…...

shell脚本部署springboot

#!/bin/bashecho "$1 jar包名称&#xff0c;$2 运行环境 " echo "reload jar: $1 env: $2 " if [ -z $1 ];thenecho "请输入jar包名称......." elseecho "停止开始......."IDps -ef | grep "$1" | grep -v "grep"…...

每日一道面试题之Iterator 和 ListIterator 有什么区别?

Iterator 和 ListIterator 都是 Java 集合框架中用于遍历集合元素的接口&#xff0c;但它们有一些区别: 使用的范围&#xff1a;Iterator可以迭代所有集合,而ListIterator 只能用于List及其子类。 继承关系&#xff1a;ListIterator 继承 Iterator&#xff0c;并且ListIterat…...

基于图像形态学处理的停车位检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 图像预处理 4.2. 车辆定位 4.3. 停车位检测 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ......................................…...

【网络编程】同步IO/异步IO

同步IO的特点&#xff1a; 同步IO指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪。 同步IO的执行者是IO操作的发起者。 同步IO需要发起者进行内核态到用户态的数据拷贝过程&#xff0c;所以这里必须阻塞 异步IO的特点&#xff1a; 异步IO是指用户进程触发I/O…...

五分钟理解NIO与BIO

java NIO与BIO的区别&#xff1f; BIO -- Blocking IO 即阻塞式 IO。NIO -- Non-Blocking IO, 即非阻塞式 IO 或异步 IO。 BIO 基于字节流和字符流进行操作&#xff0c;数据的读取写入必须阻塞在一个线程内等待其完成。 NIO 主要有三大核心部分&#xff1a; Channel (通道)…...

Python数据可视化工具——Pyecharts

目录 1 简介绘图前先导包 2 折线图3 饼图4 柱状图/条形图5 散点图6 箱线图7 热力图8 漏斗图9 3D柱状图10 其他&#xff1a;配置项 1 简介 Pyecharts是一款将python与echarts结合的强大的数据可视化工具 Pyecharts是一个用于生成echarts图表的类库。echarts是百度开源的一个数据…...

cjson常用API使用总结

json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛用于前后端数据传输和存储。在C语言中&#xff0c;我们可以使用cjson库来处理JSON数据。本问总结了在使用cjson库中各个常用API的用法&#xff0c;包括组装JSON&#x…...

Shell脚本学习-case语句开发rsync服务的脚本

利用case语句开发类似系统启动rsync启动服务的脚本。&#xff08;可以参考系统rpcbind、nfs的脚本&#xff09;。 例如&#xff1a; /etc/init.d/rsyncd {start | stop | restart } rsync --daemon pkill rsync [rootvm1 scripts]# cat start_rsync.sh #!/bin/bash #[ -f /…...

使用docker部署一个jar项目

简介: 通过docker镜像, docker可以在服务器上运行包含项目所需运行环境的docker容器, 在线仓库里有很多各个软件公司官方发布的镜像, 或者第三方的镜像. 如果我们需要使用docker把我们的应用程序打包成镜像, 别的机器上只要安装了docker, 就可以直接运行镜像, 而不需要再安装应…...

【Linux命令200例】tee将输入内容输出到屏幕和文件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜…...

使用Vue+CSS实现汉堡图标过渡为叉号图标,有点意思

前言 本文给大家分享三个具有过渡效果的汉堡图标&#xff0c;当点击汉堡图标时&#xff0c;过渡为叉号图标。这种具有过渡特效的图标挺炫酷的&#xff0c;感觉一下子给网页增加一点新颖特色。早在2015年左右&#xff0c;国外挺多优秀门户网站都有使用类似的图标&#xff0c;那…...

python面试题【题目+答案】

最近遇到了一份python的面试题&#xff0c;题目比较简单&#xff0c;时间控制在一个小时之内。以下是面试的题目跟答案&#xff0c;答案不代表最优解&#xff0c;只是当时所想到的一些思路&#xff0c;接下来将分享给大家。 目录 1. 给出下面打印结果 2.字典如何删除键、如何…...

Rocky(centos) jar 注册成服务,能开机自启动

概述 涉及&#xff1a;1&#xff09;sh 无法直接运行java命令&#xff0c;可以软连&#xff0c;此处是直接路径 2&#xff09;sh脚本报一堆空格换行错误&#xff1a;需将转成unix标准格式&#xff1b; #切换到上传的脚本路径 dos2unix 脚本文件名.sh 2&#xff09;SELINUX …...

科大讯飞-鸟类分类挑战赛-测试【1】

科大讯飞-鸟类分类挑战赛-测试【1】 1. 比赛说明2. EfficientNet测试2.1 **模型搭建:**2.2 **模型训练:**2.3 训练过程可视化2.4 一些报错解决:1. 比赛说明 背景: 随着生态环境的不断变化和人类对自然资源的过度开发,世界各地的鸟类数量和种类正在发生着巨大的变化。为了更…...

两行CSS让页面提升渲染性能

content-visibility是CSS新增的属性&#xff0c;主要用来提高页面渲染性能&#xff0c;它可以控制一个元素是否渲染其内容&#xff0c;并且允许浏览器跳过这些元素的布局与渲染。 content-visibility: hidden的效果与display: none类似其区别在于&#xff1a; content-visibi…...

UniApp中tabbar设置了position: fixed以及bottom:0后出现一条缝隙,看到了后面的内容

问题描述 解决方法 直接将bottom设置成-2px即可...

设计模式行为型——责任链模式

目录 什么是责任链模式 责任链模式的实现 责任链模式角色 责任链模式类图 责任链模式举例 责任链模式代码实现 责任链模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是责任链模式 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;又叫职…...

Xamarin.Android中Intent的使用

目录 1、说明2、使用方法2.1 常用方法2.2 调用系统应用 3、参考资料 1、说明 在Android开发中常常会用到Intent进行不同活动启动&#xff0c;整理资料如下 2、使用方法 2.1 常用方法 1、一般情况而言&#xff0c;都是使用如下的方式进行调用 Intent intent new Intent(th…...

matplotlib绘制方波圆周分解动画

1 方波的圆周分解 在学习傅里叶变换的时候&#xff0c;有一个经典的示例是方波的分解。我们知道&#xff0c;方波可以分解为无数个正弦波的叠加。而正弦波&#xff0c;又可以看作是圆周运动在一条直线上的投影。当时为了理解这个事情&#xff0c;恐怕大家也花了不少时间。 学…...

别再死记硬背Transformer了!用大白话和代码图解,5分钟搞懂Self-Attention核心

用图书馆借书的故事讲透Transformer自注意力机制 想象你走进一个巨大的图书馆&#xff0c;书架上摆满了各种书籍。你需要找到一本关于"深度学习"的书&#xff0c;但你不确定具体是哪一本。这时候&#xff0c;图书管理员会怎么做&#xff1f;她会根据你的需求&#xf…...

现货TJA1101AHN/0Z是NXP推出的一款高性能、低功耗的汽车以太网PHY芯片,作为TJA1101A的改进版本,专为车载电子系统设计,支持100BASE-T1标准,具备出色的可靠性与集成度

‌TJA1101AHN/0Z‌ 是NXP&#xff08;恩智浦&#xff09;推出的一款高性能、低功耗的汽车以太网PHY芯片&#xff0c;作为TJA1101A的改进版本&#xff0c;专为车载电子系统设计&#xff0c;支持100BASE-T1标准&#xff0c;具备出色的可靠性与集成度。核心性能与优势&#xff1a;…...

HarmonyOS 6 ArkGraphics 3D精讲:从旋转立方体看鸿蒙原生3D能力

HarmonyOS 6 ArkGraphics 3D精讲&#xff1a;从旋转立方体看鸿蒙原生3D能力 前言&#xff1a;从数字孪生到鸿蒙 3D 大家好&#xff0c;我是你们老朋友木斯佳&#xff0c;熟悉我的朋友们知道&#xff0c;我长期从事物联网、数据可视化相关开发。过去几年里&#xff0c;我在各种平…...

CentOS 7服务器部署:NFS共享、Nginx-RTMP流媒体与Qt无GUI环境全攻略

1. 项目概述与核心思路最近在华为云的一台CentOS 7.4 64位服务器版ECS上&#xff0c;完整部署了一套用于音视频处理和后台服务的开发环境。这个环境的核心目标&#xff0c;是为一个需要处理视频流、提供Web服务&#xff0c;并能方便地进行跨机文件共享和Qt程序编译的后台系统打…...

不止于测试:用GStreamer打造你的树莓派低成本视频监控/图传系统

树莓派视频监控实战&#xff1a;用GStreamer构建低成本图传系统 树莓派搭配普通USB摄像头能做什么&#xff1f;大多数人可能只想到简单的视频采集测试。但如果你掌握GStreamer这个多媒体框架的进阶用法&#xff0c;就能将它变成一套功能完整的视频监控或无线图传系统。本文将彻…...

低代码平台推荐:零基础业务人员专属

在数字化转型加速的当下&#xff0c;低代码已成为打破IT资源瓶颈的关键抓手。本文专为零基础业务人员深度拆解零门槛低代码平台的选型逻辑与落地路径。通过7大核心问答&#xff0c;系统梳理从技能门槛、平台评估到架构融合的实战经验。据行业调研显示&#xff0c;采用成熟低代码…...

使用Taotoken后如何通过用量看板清晰掌握各模型API消耗情况

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken后如何通过用量看板清晰掌握各模型API消耗情况 当你将多个大模型API的调用统一接入到Taotoken平台后&#xff0c;一个…...

电脑突然‘哑巴’了?保姆级排查指南:从服务、驱动到系统修复,一步步搞定Win10音频问题

电脑突然‘哑巴’了&#xff1f;保姆级排查指南&#xff1a;从服务、驱动到系统修复&#xff0c;一步步搞定Win10音频问题 右下角的小喇叭突然打上红叉&#xff0c;视频会议开到一半突然失声&#xff0c;游戏打到关键处却没了音效——这些场景恐怕每个Windows 10用户都遭遇过。…...

Rocky Linux 9.0上5分钟搞定NFS共享:从安装到挂载的保姆级避坑指南

Rocky Linux 9.0极速部署NFS共享&#xff1a;零基础到精通的实战手册 当你在凌晨两点接到紧急任务&#xff0c;需要在Rocky Linux 9.0上为开发团队搭建临时文件共享环境时&#xff0c;传统教程里冗长的配置步骤和晦涩的错误排查足以让人崩溃。本文专为解决这类"救火场景&q…...

5大技术突破:Unity Figma Bridge如何革命性改变游戏UI开发流程

5大技术突破&#xff1a;Unity Figma Bridge如何革命性改变游戏UI开发流程 【免费下载链接】UnityFigmaBridge Easily bring your Figma Documents, Components, Assets and Prototypes to Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityFigmaBridge Unity F…...