使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)
博主声明:
转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。
本文首发于此 博主:威威喵 | 博客主页:https://blog.csdn.net/smile_running
1、前言
由于博主之前写的这篇文章太水了,其实也是用处不大,所以我决定把这篇文章内容改了。改的内容是 ssm 框架的基本搭建与使用,由于博主毕业设计中需要做后台服务器的处理,我做的是 Android 端 app 的,但是需要数据交互,所以就当顺便学一下服务器的知识吧。
好吧,话不多说,我们自己开始整合 ssm 框架,建议你最好会先使用 Idea,因为我使用的是 Maven 的方式进行构建的,比较简单,容易上手。
2、正文
首先,我们需要创建一个新的 Maven Project
以下就随便填写吧,做一个简单的 demo
下面这个属性最要添加一个 archetypeCatalog = internal,如果不加这个参数,Maven 构建时会很慢,有时候直接卡住。
最后就创建出了一个空的 Maven 项目了,如下图:
到这里呢,你已经迈出了第一步。接下来,我们可以开始加入 Spring、SpringMVC、Mybatis、Json、Logger等依赖,这样才能够正常使用这些工具包。你只需要在 pom.xml 文件中添加如下的依赖即可(打开 pom.xml 文件,将里面的 <dependencies> 标签替换成下面的内容,具体依赖的作用以下都有注释):
<dependencies><!-- 单元测试(选择版本大于 4.0 ,使用注解的方式) --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- Java Web 相关依赖 --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.0</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!-- 日志工具:slf4j + logback --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.7</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.7</version></dependency><!-- 添加fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.41</version></dependency><!-- 数据库:mysql + c3p0 连接池 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.29</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!-- DAO 层:mybatis + mybatis-spring 整合 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version></dependency><!-- Spring 核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.5.RELEASE</version></dependency><!-- Spring dao依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.2.5.RELEASE</version></dependency><!-- Spring web相关 --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.5.RELEASE</version></dependency><!-- Spring test --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.2.5.RELEASE</version></dependency><!-- 使用 redis 优化接口并发(优化‘地址暴露接口’) --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.3</version></dependency><!-- 使用 protostuff 来序列化存储对象 --><dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-core</artifactId><version>1.0.8</version></dependency><dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-runtime</artifactId><version>1.0.8</version></dependency></dependencies>
替换代码之后,会弹出这样的窗口,选择 import 即可。
这样我们的 ssm 框架所需的依赖库就已经引入成功了,下面开始编写配置文件进行框架的整合。在整合之前呢,我们先创建几个文件夹,用于存放配置文件。创建文件夹后,工程目录结构图如下:
我这里就写了一个简单的业务逻辑,一个使用 ssm 框架来写的用户登录功能。上图就是所有的类与配置文件,下面我来简单地介绍一下这些类的主要功能以及配置文件的作用。
- dao 包,这里是与数据库访问的接口,对应的 spring-dao.xml 就是操作数据库相关的配置信息,如 jdbc、c3p0 等等。
- service 包,与主要业务逻辑相关,spring-service.xml 的主要是扫描 service 包下的接口,方便注入到其它类中使用。
- web 包,就是 srpingMVC 相关的用于请求访问处理,spring-web.xml 主要是配置 controller 的相关属性。
- logback.xml 是日志的配置文件
- jdbc.properties 表示使用 jdbc 连接数据库驱动时要用的连接属性
- mybatis-config.xml 是与 mybatis 整合时所需的配置信息
- web.xml 需要配置请求的相关属性,比如 servlet 与 servlet-mapping 等。
- mapper 包下主要存放与业务相关的 sql 语句
大致就这些,接下来我们从 jdbc.properties 文件先开始,它的代码如下(是类似与 key - value 的方式存储):
jdbc.driverClasss=com.mysql.jdbc.Driver
jdbc.Url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.username=root
jdbc.password=xww0826
在 spring-dao.xml 文件中,就将它引用到连接数据库上,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 加载 jdbc 属性文件 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置 c3p0 数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 配置 jdbc 连接基本属性 --><property name="driverClass" value="${jdbc.driverClasss}"/><property name="jdbcUrl" value="${jdbc.Url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!-- 配置 c3p0 连接池属性 --><property name="initialPoolSize" value="5"/><property name="checkoutTimeout" value="20000"/><property name="maxPoolSize" value="40"/><property name="minPoolSize" value="10"/><!-- 关闭连接后是否自动提交 --><property name="autoCommitOnClose" value="false"/><!-- 获取连接失败重试次数 --><property name="acquireRetryAttempts" value="2"/></bean><!-- 配置 sqlSessionFactory 对象--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入数据库连接池 --><property name="dataSource" ref="dataSource"/><!-- 自动扫描 mapper包下的所有 xml 文件 --><property name="mapperLocations" value="classpath:mapper/*.xml"/><!-- 配置 mybatis-config 文件 --><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 扫描包下的 entity 类 --><property name="typeAliasesPackage" value="com.xww.demo.entity"/></bean><!-- 配置扫描 dao 包,动态的实现 dao 接口,注入 spring 容器--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 注入 sqlSessionFactory --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!-- 扫描 dao 包下的接口,并实现它 --><property name="basePackage" value="com.xww.demo.dao"/></bean><!-- 配置事物管理 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入数据库连接池 --><property name="dataSource" ref="dataSource"/></bean><!-- 默认使用注解来管理事物 --><tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
接下来是 spring-service.xml 文件,就配置一下扫描包的路径
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 自动扫描 service 包 --><context:component-scan base-package="com.xww.demo.service"/></beans>
然后是 spring-web.xml 文件,与 SpringMVC 相关的配置属性
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 扫描 web 包(如:Controller) --><context:component-scan base-package="com.xww.demo.web"/><!-- springMVC 配置文件,开启注解,并提供一系列功能进行数据绑定(如:xml、Json,时间戳等数据支持) --><mvc:annotation-driven/><!-- 配置默认处理,允许使用 / 做整体映射,如静态资源的处理(jpg,png,js等) --><mvc:default-servlet-handler/><!--避免IE执行AJAX时,返回JSON出现下载文件 --><bean id="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean></beans>
然后是 mybatis-config.xml 文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 设置获取自增主键值 id --><setting name="useGeneratedKeys" value="true"/><!-- 自动将列名转为 entity 属性名 --><setting name="useColumnLabel" value="true"/><!-- 使用驼峰命名法来转换 --><setting name="mapUnderscoreToCamelCase" value="true"/></settings></configuration>
最后是 logback.xml 文件,配置日志相关设置:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoder by default --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT"/></root>
</configuration>
以上就是 ssm 框架的所有配置文件代码,接下来我们来看 java 代码。首先是 dao 包下的 LoginDao 接口,代码如下:
package com.xww.demo.dao;import com.xww.demo.entity.User;
import org.apache.ibatis.annotations.Param;public interface LoginDao {// 用户登录User queryUser(@Param("username") String username, @Param("password") String password);
}
接下来是 mapper 包下的 LoginDao.xml 文件代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.xww.demo.dao.LoginDao"><select id="queryUser" parameterType="com.xww.demo.entity.User" resultType="com.xww.demo.entity.User">select user_name, pass_word from user where user_name = #{username} and pass_word = #{password}</select></mapper>
那么 entity 类就不用多说了,提供 getter 和 setter 方法,不过一定要加一个空的构造函数,否则会出错,代码如下:
package com.xww.demo.entity;public class User {private String username;private String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
接着是 service 包,这里就是业务逻辑处理相关的代码,包括业务逻辑的接口与实现类。
package com.xww.demo.service;import com.xww.demo.entity.User;public interface LoginService {User doLogin(String username, String password);
}
package com.xww.demo.service.impl;import com.xww.demo.dao.LoginDao;
import com.xww.demo.entity.User;
import com.xww.demo.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class LoginImpl implements LoginService {@AutowiredLoginDao loginDao;@Overridepublic User doLogin(String username, String password) {return loginDao.queryUser(username, password);}
}
然后是 web 包的代码,这里是请求相关的逻辑代码,配置请求 url 、请求方式、请求参数等。代码如下:
package com.xww.demo.web;import com.alibaba.fastjson.JSONObject;
import com.xww.demo.entity.User;
import com.xww.demo.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/test")
public class LoginController {@AutowiredLoginService loginService;@ResponseBody@RequestMapping(value = "/login", method = RequestMethod.POST)public String doLoginAction(@RequestParam("username") String username, @RequestParam("password") String password) {User user = null;try {user = loginService.doLogin(username, password);} catch (RuntimeException e) {//如果用户为null,在此处理异常}return JSONObject.toJSONString(user);}}
到这里还没结束,最关键的是需要把 servlet 添加到 web.xml 文件中去,否则你无论怎么请求,都是无法接收到响应的,代码如下:
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!-- 编码过滤器 --><filter><filter-name>encodingFilter</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></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置 SpringMVC DispatcherServlet --><servlet><servlet-name>demo-LoginServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>demo-LoginServlet</servlet-name><!-- 配置请求 url 模式 --><url-pattern>/</url-pattern></servlet-mapping><!-- session配置 --><session-config><session-timeout>15</session-timeout></session-config></web-app>
最后是我们的前端 jsp 代码,就是简单的使用 bootstrap 框架写的一个登录界面,index.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<!DOCTYPE html>
<html><head><title>用户登录</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 引入 Bootstrap --><link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 Shiv 和 Respond.js 用于让 IE8 支持 HTML5元素和媒体查询 --><!-- 注意: 如果通过 file:// 引入 Respond.js 文件,则该文件无法起效果 --><!--[if lt IE 9]><script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script><script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script><![endif]-->
</head><body><!-- 登录表单 -->
<form style="margin-left:500px;margin-top:200px;" action="test/login" method="post" target="_blank"><div class="form-group"><label for="user" stype="display:inline;">账户:</label><input type="text" class="form-control" id="user" name="username" style="display:inline;width:200px;"autocomplete="off"/></div><div class="form-group"><label for="password" style="display:inline;">密码:</label><input type="password" class="form-control" id="password" name="password" style="display:inline;width:200px;"autocomplete="off"/></div><button type="submit" class="btn btn-primary" style="margin-top: 10px">登录</button>
</form></body><!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>
接下来就是如何运行的问题了。使用 IDEA 添加 Local Tomcat,如下图:
添加项目,就是我们刚刚创建的这个项目名,如下图:
然后应用一下,直接运行 Tomcat 即可。那么你就会看到如下的 jsp 页面:
登录成功时,就会显示当前的登录名和密码,以 json 数据返回,登录失败则返回为 null,如下图:
数据库驱动使用的是 mysql,用到的 sql 命名如下:
# 创建数据库
CREATE DATABASE test;# 创建用户表
CREATE TABLE `user` (`id` INT NOT NULL auto_increment,`user_name` VARCHAR (16) NOT NULL,`pass_word` VARCHAR (16) NOT NULL,PRIMARY KEY (id, user_name)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;# 插入数据
INSERT INTO USER (user_name, pass_word)
VALUES('xww', '0826'),('user1', '123456');
好了,本文所有代码就这些,一个简单的 ssm 框架就整合完成了。
使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)相关推荐
- SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统(功能包含分角色,报修管理、抄表管理、车位管理、房屋管理、业主管理、投诉管理、报修统计分析等)
博客目录 SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM框架(spring+springmv ...
- SSM框架Spring+SpringMVC+MyBatis——详细整合教程
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参 ...
- eclipse maven 搭建 SSM(Spring+SpringMVC+MyBatis)开发环境 和 MyBatis 自动生成的 maven 插件配置
最近研究java web开发,首先需要配置好开发环境,查阅网上各位大神的文章后搭建完成,记录下来作为备忘. 1.安装Maven Maven下载地址:http://maven.apache.org/do ...
- SSM框架——Spring+SpringMVC+Mybatis的搭建教程
一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP. S ...
- 整合SSM(Spring+SpringMVC+MyBatis)-增删改查(上)
新建maven web工程,添加web.xml 添加pom文件以及依赖,update项目.然后添加maven依赖. <project xmlns="http://maven.apach ...
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 14小时以前 CSDN日报 ...
- SSM框架整合—详细整合教程(Spring+SpringMVC+MyBatis)
SSM框架整合-详细整合教程(Spring+SpringMVC+MyBatis) ✨博主介绍 MyBatis和Spring整合 1.整合原因 2.整合条件 3.整合入门 4.整合MyBatis现有配置 ...
- 使用maven整合SSM框架详细步骤
(文章所使用框架Spring+SpringMVC+Mybatis,为项目结构图参照文章末尾) 1.创建maven工程,在pom.xml文件中导入需要的jar包依赖: <project xmlns ...
- idea 使用 maven 整合 ssm 框架 实现简单的增、删、改 和 分页查询功能
详细请参考: idea 使用 maven 整合 ssm 框架 文章目录 ==效果图== ==准备数据库== ==创建maven项目== ==配置文件== pom.xml jdbc.properti ...
- 浅谈IDEA+Maven 整合SSM框架实现简单的增删改查
SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...
最新文章
- (转)koogra--Excel文件读取利器
- void *指针的加减运算
- 2.2线性表的数据展示【王道数据结构】
- 分布式架构:并发重复请求和幂等场景技术实现总结
- 没事做做题之棋盘上的距离
- popoverController(iPad)
- hibernate的初次使用
- 爬虫遇到路径转换的解决方案
- iqooneo系统要不要更新_IQOOZ1即将发布,和IQOOneo3、OPPORenoACE对比,谁更值得入手?...
- 计算机id不同于MAC,Gurman:Mac上的Face ID将在几年内出现
- java相关求助---Java泛型的理解与等价实现---------没有完全明白啊...请大神指导...
- 函数在区间连续可以推出什么_A-22 函数的点连续、单侧连续、区间连续
- 今天参加广州.NET俱乐部活动,运气超好
- 技术人,其实很有优势
- 手把手Django入门 初步实现管理职位后台
- 彻底解决烦人的win10更新
- Windows.h 常用API函数【转】
- 安卓购物商城源码(服务端+客户端)
- 回归(Regression)是什么意思
- 在IntelliJ IDEA中,开发一个摸鱼看书插件
热门文章
- SoundTouch音频处理库
- php怎么更换图片背景颜色,照片换底色红色变白色怎么变 怎么换照片底色
- 方波信号的上升沿与带宽
- 单片机和嵌入式系统的区别
- 全国省市县oracle,最新行政区划 省市区三级 街道乡镇四级 社区/村五级 每月更新(2021年4月版)...
- 【node进阶】深入浅出前后端身份验证(上)---session
- 小米8SE 解BL锁教程 申请BootLoader解锁教程
- 软考高级系统架构师论文,到底该如何写
- 网易云原生架构实践之服务治理
- vue中的浏览量_vue项目中统计页面访问量PV UV