springboot创建web项目

news2024/12/25 5:28:09

一、创建项目

二、导入依赖(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.12.RELEASE</version>
    </parent>

    <groupId>com.cy</groupId>
    <artifactId>Springboot-day01-re</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--②、引入依赖(起步依赖)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--mybatis提供依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>

        <!--连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.16</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

三、配置文件

application.yml文件

server:
  port: 8080
  servlet:
    context-path: /suv
#Spring配置
spring:
  #资源配置
  datasource:
    #数据源类型
    type: com.alibaba.druid.pool.DruidDataSource
    #地址
    url: jdbc:mysql://localhost:3306/rbac
    #用户名
    username: root
    #密码
    password: chenying
    #驱动名称
    driver-class-name: com.mysql.jdbc.Driver
    
#持久层框架配置    
mybatis:
  #别名配置
  type-aliases-package: com.cy.pojo.entity
  #映射文件
  mapper-locations: classpath*:mappers/**/*mapper.xml
  

# 配置日志
logging:
  level:
    root: info
    com.cy: debug

四、XxxApplication内容

@SpringBootApplication
public class XxxApplication {
    public static void main(String[] args) {
        SpringApplication.run(XxxApplication.class,args);
    }
}

五、使用注解或config配置文件解决注解问题

package com.cy.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("*");
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

六、完成后端的增删查改操作

controller(控制器层)

package com.cy.controller;

import com.cy.pojo.dto.EmployeeDto;

import com.cy.pojo.entity.Employee;
import com.cy.pojo.vo.Result;
import com.cy.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("list")
//解决跨域问题
public class EmployeeController {
    @Autowired
    private EmployeeService employeeService;

    @GetMapping("/{pageNo}/{pageSize}")
    public Result queryPage(@PathVariable("pageNo") Integer pageNo,
                            @PathVariable("pageSize") Integer pagesize,
                            @RequestParam(required = false) String  username ){
     EmployeeDto employees= employeeService.PageByData(pageNo,pagesize,username);
        Result result = Result.builder()
                .code(20000)
                .message("查询成功")
                .data(employees)
                .build();
        return result;
    }

    @PostMapping("/save")
    public Result save(@RequestBody Employee employee){
       Integer add= employeeService.addByData(employee);
       if (add==null){
           return Result.builder().code(50000).message("新增失败").build();
       }
        return  Result.builder().code(20000).message("新增成功").build();
    }

    @RequestMapping("/listById")
    public Result getById(@RequestParam("id") Integer id){
        Employee employee=employeeService.selectById(id);
        if (employee==null){
            return Result.builder().code(50000).message("查询失败").build();
        }
        return   Result.builder()
                .code(20000)
                .message("查询成功")
                .data(employee)
                .build();
    }

    @PutMapping("/update")
    public Result update(@RequestBody Employee employee){
        Integer update=employeeService.updateByData(employee);
        if (update==null){
            return Result.builder().code(50000).message("修改失败").build();
        }
        return  Result.builder().code(20000).message("修改成功").build();
    }

    @DeleteMapping("/delete")
    public Result del(@RequestParam Integer id){
        Integer del=employeeService.delById(id);
        if (del==null){
            return Result.builder().code(50000).message("删除失败").build();
        }
        return  Result.builder().code(20000).message("删除成功").build();
    }

    @RequestMapping("/batchDel")
    public Result batchDel(@RequestBody List<Integer> ids){
        Integer dels= employeeService.batchDel(ids);
        if (dels==null){
            return Result.builder().code(50000).message("批量删除失败").build();
        }
        return  Result.builder().code(20000).message("批量删除成功").build();
    }

}

service(业务逻辑层)

package com.cy.service;

import com.cy.pojo.dto.EmployeeDto;
import com.cy.pojo.entity.Employee;

import java.util.List;

public interface EmployeeService {
    EmployeeDto PageByData(Integer pageNo, Integer pagesize, String username);

    Integer addByData(Employee employee);

    Integer updateByData(Employee employee);

    Employee selectById(Integer id);

    Integer delById(Integer id);

    Integer batchDel(List<Integer> ids);
}
package com.cy.service.impl;

import com.cy.mapper.EmployeeMapper;
import com.cy.pojo.dto.EmployeeDto;
import com.cy.pojo.entity.Employee;
import com.cy.service.EmployeeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class EmployeeServiceImpl implements EmployeeService {
    @Resource
    private EmployeeMapper employeeMapper;
    @Override
    public EmployeeDto PageByData(Integer pageNo, Integer pagesize,String username) {
        Integer total=employeeMapper.sum();

        int ceil =(int) Math.ceil((total / (double) pagesize));
        Integer c=ceil;
        Integer start;
        if (pageNo<c){
            start=(pageNo-1)*pagesize;
        }else {
            start=(ceil-1)*pagesize;
        }
        List<Employee> employeeList=employeeMapper.getPage(start,pagesize,username);

        EmployeeDto dto = EmployeeDto.builder()
                .pageNo(pageNo)
                .pageSize(pagesize)
                .total(ceil)
                .dataList(employeeList)
                .build();

        return dto;
    }

    @Override
    public Integer addByData(Employee employee) {
        Integer add=employeeMapper.add(employee);

        return add;
    }

    @Override
    public Integer updateByData(Employee employee) {
        Integer update=employeeMapper.updateByData(employee);

        return update;
    }

    @Override
    public Employee selectById(Integer id) {
        Employee employee=employeeMapper.getById(id);

        return employee;
    }

    @Override
    public Integer delById(Integer id) {
        Integer del=employeeMapper.del(id);

        return del;
    }

    @Override
    public Integer batchDel(List<Integer> ids) {
        return employeeMapper.batchDel(ids);
    }
}

mapper(数据访问层)

package com.cy.mapper;

import com.cy.pojo.entity.Employee;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface EmployeeMapper {
    List<Employee> getPage(@Param("start") Integer start,
                           @Param("pageSize") Integer pagesize,
                           @Param("username") String username);

    Integer sum();

    Integer add(Employee employee);

    Integer updateByData(Employee employee);

    Employee getById(Integer id);

    Integer del(Integer id);

    Integer batchDel(List<Integer> ids);
}

mappers

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.mapper.EmployeeMapper">
    <insert id="add">
        insert into employee(username,name,password,email,age,admin,dept_id)
                values(#{username},#{name},#{password},#{email},#{age},#{admin},#{deptId})
    </insert>
    <update id="updateByData">
        update employee
            <set>
                <if test="username!=null">
                    username=#{username},
                </if>
                <if test="name!=null">
                    name=#{name},
                </if>
                <if test="password!=null">
                    password=#{password},
                </if>
                <if test="email!=null">
                    email=#{email},
                </if>
                <if test="age!=null">
                    age=#{age},
                </if>
                <if test="admin!=null">
                    admin=#{admin},
                </if>
                <if test="deptId!=null">
                    dept_id=#{deptId},
                </if>
            </set>
            where id=#{id}

    </update>
    <delete id="del">
        delete from employee where id=#{id}
    </delete>
    <delete id="batchDel">
        delete from employee
            where id
            <trim prefix="in (" suffix=")" suffixOverrides=",">
            <foreach collection="ids" item="item" separator=",">
                #{item}
            </foreach>
            </trim>
    </delete>
    <!--<mapper namespace="">-->


    <select id="getPage" resultType="com.cy.pojo.entity.Employee">
        select * from employee
            <where>
                <if test="username!=null">
                   and username like concat("%",#{username},"%")
                </if>
            </where>
            <if test="start!=null and pageSize!=null">
                limit #{start},#{pageSize}
            </if>
    </select>
    <select id="sum" resultType="java.lang.Integer">
        select count(*) from employee
    </select>
    <select id="getById" resultType="com.cy.pojo.entity.Employee">
        select * from employee
            where id=#{id}
    </select>
</mapper>

还有一些简单的工具类

EmployeeDto

package com.cy.pojo.dto;

import com.cy.pojo.entity.Employee;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author chen
 * @Version 1.0
 * @Date 2024/12/24
 * @Description 返回前端的数据
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeDto {
    /**
     *数据总数
     */
    private Integer total;

    /**
     *页面数
     */
    private Integer pageNo;

    /**
     *每页数据大小
     */
    private Integer pageSize;

    /**
     *数据集合
     */
    private List<Employee> dataList=new ArrayList<>();
}

实体类

package com.cy.pojo.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
    /**
     *主键
     */
    private Integer id;
    /**
     *用户名
     */
    private String username;
    /**
     *名称
     */
    private String name;
    /**
     *密码
     */
    private String password;
    /**
     *邮箱
     */
    private String email;
    /**
     *年龄
     */
    private Integer age;
    /**
     *管理员
     */
    private Integer admin;
    /**
     *所属部门
     */
    private Integer deptId;

    //角色id集
    //private List<Integer> roleIds = new ArrayList<>();
}

统一后端返回前端的格式

package com.cy.pojo.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author chen
 * @Version 1.0
 * @Date 2024/12/24
 * @Description 统一返回类型
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    /**
     *状态码
     */
    private Integer code;
    /**
     *提示信息
     */
    private String  message;
    /**
     *返回数据
     */
    private Object data;

}

前端HTML页面效果显示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- Bootstrap -->
    <link rel="stylesheet" href="./css/bootstrap.css" >
    <script src="./js/vue.js"></script>
    <script src="./js/axios.min.js"></script>
</head>
<body>
<div id="app">
<table class="table">
    <form class="form-inline">
            <label >产品名/概述</label>
            <input type="text" v-model="username" placeholder="请输入产品名/概述">
        <button type="submit" @click="search">搜索</button>
        <button class="fat-btn"
                type="button" style="background-color: #269abc" @click="resBtn">重置
        </button>
    </form>
    <div>
    <button class="fat-btn"
            type="button" style="background-color: #269abc" @click="asveBtn"> 新增
    </button>
    <button class="fat-btn"
            type="button" style="background-color: tomato" @click="batchDel"> 批量删除
    </button>
    </div>
    <thead>
    <tr>
        <th>选择</th>
        <th>用户名</th>
        <th>用户</th>
        <th>密码</th>
        <th>邮件</th>
        <th>年龄</th>
        <th>管理员</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    <tr v-for="(value,key) in dataList" :key="key">
        <td>
            <input type="checkbox" :value="value.id" v-model="ids">
        </td>
        <td>{{value.username}}</td>
        <td>{{value.name}}</td>
        <td>{{value.password}}</td>
        <td>{{value.email}}</td>
        <td>{{value.age}}</td>
        <td>{{value.admin}}</td>
         <td>
             <button
                     type="button" style="background-color: tomato" @click="delData(value.id)"> 删除
             </button>
             <button class="fat-btn"
                     type="button" style="background-color: darkcyan" @click="findData(value.id)"> 编辑
             </button>
         </td>
    </tr>
    </tbody>
</table>
    <!--分页-->
    <div style="padding-right: 20px">
    <ul class="pagination" >
        <li><a href="#">&laquo;</a></li>
        <li v-for="page in totalPage" :key="page" >
            <a href="#" :class="{active:page==pageNo}" @click="change(page)">{{page}}</a></li>
        <li><a href="#">&raquo;</a></li>
    </ul>
    </div>
<!--新增窗口-->
     <div style="width: 50%;align-content: center" v-if="newBtn">
    <form>
        <div class="form-group">
            <label >用户名</label>
            <input type="text" class="form-control" v-model="addem.username"  placeholder="用户名">
        </div>
        <div class="form-group">
            <label >用户</label>
            <input type="text" class="form-control" v-model="addem.name"  placeholder="用户">
        </div>
        <div class="form-group">
            <label >密码</label>
            <input type="text" class="form-control" v-model="addem.password" placeholder="密码">
        </div>
        <div class="form-group">
            <label >邮件</label>
            <input type="text" class="form-control" placeholder="邮件" v-model="addem.email">
        </div>
        <div class="form-group">
            <label >年龄</label>
            <input type="text" class="form-control" placeholder="年龄" v-model="addem.age">
        </div>
        <div class="form-group">
            <label >管理员</label>
            <input type="text" class="form-control" placeholder="管理员" v-model="addem.admin">
        </div>
        <div class="form-group">
            <label >所属部门</label>
            <input type="text" class="form-control" placeholder="所属部门" v-model="addem.deptId">
        </div>

        <button type="submit" class="btn btn-default" @click="saveData">确定</button>
        <button type="submit" class="btn btn-default" @click="closeBtn">取消</button>
    </form>
     </div>
<!--编辑窗口-->
    <div  style="width: 50%;align-content: center" v-if="updateBtn">
        <form>
            <div class="form-group">
                <label >用户名</label>
                <input type="text" class="form-control" v-model="empol.username"  placeholder="用户名">
            </div>
            <div class="form-group">
                <label >用户</label>
                <input type="text" class="form-control" v-model="empol.name"  placeholder="用户">
            </div>
            <div class="form-group">
                <label >密码</label>
                <input type="text" class="form-control" v-model="empol.password" placeholder="密码">
            </div>
            <div class="form-group">
                <label >邮件</label>
                <input type="text" class="form-control" placeholder="邮件" v-model="empol.email">
            </div>
            <div class="form-group">
                <label >年龄</label>
                <input type="text" class="form-control" placeholder="年龄" v-model="empol.age">
            </div>
            <div class="form-group">
                <label >管理员</label>
                <input type="text" class="form-control" placeholder="管理员" v-model="empol.admin">
            </div>
            <div class="form-group">
                <label >所属部门</label>
                <input type="text" class="form-control" placeholder="所属部门" v-model="empol.deptId">
            </div>

            <button type="submit" class="btn btn-default" @click="updateData">确定</button>
            <button type="submit" class="btn btn-default" @click="closeBtn">取消</button>
        </form>
    </div>
</div>
    <script src="./js/bootstrap.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            pageNo:1,
            pageSize:3,
            totalPage:1,
            dataList:[],
            ids:[],
           username:null,
            form:{
              username:null,
                name:null
            },
            addem:{

            },
            empol:{},
            newBtn:false,
            updateBtn:false
        },
        methods:{
            getAll(){
                console.log("username:",this.username)
                axios({
                    method:'get',
                    url:`http://localhost:8080/suv/list/${this.pageNo}/${this.pageSize}`,
                    params:{
                     username:this.username
                    }
                }).then(resp=>{
                console.log("分页查询的数据:",resp.data)
                    if (resp.data.code===20000){
                        this.dataList=resp.data.data.dataList
                        this.totalPage=resp.data.data.total
                    }

                })
            },
            change(page){
                this.pageNo=page
                this.getAll()
            }
            ,
            /*新增*/
            saveData(){
                axios({
                    method: 'post',
                    url: 'http://localhost:8080/suv/list/save',
                    data: this.addem
                }).then(resp=>{
                    if (resp.data.code===20000){
                        alert(resp.data.message)
                    }else {
                        alert(resp.data.message)
                    }
                })
            },
            findData(id){
                this.updateBtn = true
                axios({
                    method:'get',
                    url:'http://localhost:8080/suv/list/listById',
                    params: {
                        id:id
                    }
                }).then(resp=>{
                    console.log(resp.data)
                    if (resp.data.code===20000){
                        this.empol=resp.data.data
                    }
                })
            }
            ,
            updateData() {
                axios({
                    method:'put',
                    url:'http://localhost:8080/suv/list/update',
                    data:this.empol
                }).then(resp=>{
                    if (resp.data.code===20000){
                        alert(resp.data.message)
                        this.updateBtn=false
                        this.getAll()
                    }
                })
            }
            ,
            asveBtn(){
                this.newBtn=true
            },
            search(){
                this.pageNo = 1,
                this.getAll()
            }
            ,
            resBtn(){
                this.closeBtn()
                this.username=null
                this.getAll()
            },
            closeBtn(){
                this.newBtn = false,
                this.updateBtn = false
            },
        /*删除*/
            delData(id){
                if (confirm("确定删除吗")){
                    axios({
                        method:'delete',
                        url:'http://localhost:8080/suv/list/delete',
                        params:{
                            id:id
                        }
                    }).then(resp=>{
                        if (resp.data.code===20000){
                            alert(resp.data.message)
                        }else {
                            alert(resp.data.message)
                        }
                        this.pageNo=1
                        this.getAll()
                    })
                }

            },
            /*批量删除*/
            batchDel(){
                axios({
                    method:'post',
                    url:'http://localhost:8080/suv/list/batchDel',
                    data:this.ids
                }).then(resp=>{
                    alert(resp.data.message)
                    this.pageNo=1
                    this.getAll()
                })
            }
        },
        created(){
           this.getAll()
        }
    })

</script>
</body>
</html>

数据库数据设置:

效果展示

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

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

相关文章

LeetCode 343.整数拆分

1.题目要求: 2.题目代码: class Solution { public:int integerBreak(int n) {//先确定dp数组vector<int> dp;//1.确定dp数组的含义//2.确定dp的递推公式//3.初始化dp数组//4.遍历顺序dp.resize(n 1);dp[0] 0;dp[1] 0;dp[2] 1;for(int i 3;i < n;i){for(int j …

Postman最新详细安装及使用教程【附安装包】

一、Postman介绍 ‌Postman是一个功能强大的API测试工具&#xff0c;主要用于模拟和测试各种HTTP请求&#xff0c;支持GET、POST、PUT、DELETE等多种请求方法。‌通过Postman&#xff0c;用户可以发送请求并查看返回的响应&#xff0c;检查响应的内容和状态&#xff0c;从而验…

开源 JS PDF 库比较

原文查看&#xff1a;开源JavaScript PDF Library对比 对于需要高性能、复杂功能或强大支持处理复杂 PDF 的项目&#xff0c;建议选择商业​​ PDF 库, 如ComPDFKit for Web。但是&#xff0c;如果您的目标只是在 Web 应用程序中显示 PDF&#xff0c;则可以使用几个可靠的开源…

如何利用AWS监听存储桶并上传到tg bot

业务描述&#xff1a; 需要监听aws的存储中的最新消息&#xff0c;发送新的消息推送到指定tg的频道。 主要流程&#xff1a; 1.上传消息到s3存储桶&#xff08;不做具体描述&#xff09; 2.通过aws的lambda监听s3存储桶的最新消息&#xff08;txt文件&#xff09; 3.将txt文件…

数据结构:双向循坏链表

目录 1.1双向循环链表的结构 2.双向链表功能的实现 2.1初始化链表 2.2销毁链表 2.3创建结点 2.4打印链表 2.5链表查找 2.6链表在pos的前面进行插入 2.7链表删除pos位置的节点 2.8链表的头插&#xff0c;头删 &#xff0c;尾插&#xff0c;尾删 1.1双向循环链表的结构 …

大数据技术原理与应用期末复习-代码

RDD&#xff1a; // 导入SparkConf和SparkContext类&#xff0c;用于配置和创建Spark上下文 import org.apache.spark.{SparkConf, SparkContext}// 定义一个名为TopN的对象 object TopN {def main(args: Array[String]): Unit {// 创建一个新的SparkConf对象&#xff0c;并设…

CNN和Transfomer介绍

文章目录 CNN和Transfomer介绍CNN和Transfomer的区别1. **基本概念**2. **数据处理方式**3. **模型结构差异**4. **应用场景区别** 自注意力机制1. **自注意力机制的概念**2. **自注意力机制的实现步骤**3. **自注意力机制的优势** Transformer结构组成1. **多头注意力层&#…

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1&#xff1a;它是相关性还是托布勒第一定律&#xff1f; 应用 2&#xff1a;将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中&#xff0c;我们在新的空间组件实用程序&#xff08;Moran 特征向量&#xff09;工具集中发布了一个新工具 - 从字段过滤空间自相关。…

webserver log日志系统的实现

参考博客&#xff1a;https://blog.csdn.net/weixin_51322383/article/details/130474753 https://zhuanlan.zhihu.com/p/721880618 阻塞队列blockqueue 1、阻塞队列的设计流程是什么样的 它的底层是用deque进行管理的 阻塞队列主要是围绕着生产者消费者模式进行多线程的同步和…

深度学习实战之超分辨率算法(tensorflow)——ESPCN

espcn原理算法请参考上一篇论文&#xff0c;这里主要给实现。 数据集如下&#xff1a;尺寸相等即可 针对数据集&#xff0c;生成样本代码preeate_data.py import imageio from scipy import misc, ndimage import numpy as np import imghdr import shutil import os import…

Unity3d 基于UGUI和VideoPlayer 实现一个多功能视频播放器功能(含源码)

前言 随着Unity3d引擎在数字沙盘、智慧工厂、数字孪生等场景的广泛应用&#xff0c;视频已成为系统程序中展示时&#xff0c;不可或缺的一部分。在 Unity3d 中&#xff0c;我们可以通过强大的 VideoPlayer 组件和灵活的 UGUI 系统&#xff0c;将视频播放功能无缝集成到用户界面…

WebGAL 项目下载及安装教程

WebGAL 项目下载及安装教程 WebGAL A brand new web Visual Novel engine | 全新的网页端视觉小说引擎 [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/web/WebGAL 1、项目介绍 WebGAL 是一个全新的网页端视觉小说引擎&#xff0c;旨在提供美观、功能强大且易于…

虚幻引擎是什么?

Unreal Engine&#xff0c;是一款由Epic Games开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计&#xff0c;但现在已经被成功地应用于开发模拟游戏、恐怖游戏、角色扮演游戏等多种不同类型的游戏。虚幻引擎除了被用于开发游戏&#xff0c;现在也用于电影的虚拟制片…

Kubernetes 架构图和组件

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;历代文学&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;高并发设计&#xf…

GESP2024年12月认证C++五级( 第三部分编程题(2))

参考程序&#xff1a; #include<bits/stdc.h> using namespace std; #define ll long long int n, m; int cnt[1010]; vector<int> cs[1010]; ll calc(int aim) {int cur_cnt cnt[1];ll res 0;vector<int> tmp;for (int i 2; i<n; i){int buy max((…

基于DockerCompose搭建Redis主从哨兵模式

linux目录结构 内网配置 哨兵配置文件如下&#xff0c;创建3个哨兵配置文件 # sentinel26379.conf sentinel26380.conf sentinel26381.conf 内容如下 protected-mode no sentinel monitor mymaster redis-master 6379 2 sentinel down-after-milliseconds mymaster 60000 s…

npm error code ETIMEDOUT

参考:https://blog.csdn.net/qq_38572963/article/details/142052986 二、解决办法 1、清空缓存 npm cache clean --force 2、查看当前的npm镜像设置 npm config get registry 3、切换新镜像源 npm config set registry https://registry.npmmirror.com 4、查看新源是否设置成功…

【终端工具】FinalShell v4.5.12 官方版

1.下载地址 【终端工具】FinalShell v4.5.12 官方版 2.简介 FinalShell是一款免费的跨平台远程管理工具&#xff0c;专为开发者和运维人员设计。它支持通过 SSH、SFTP 等方式连接到 Linux 和 Windows 服务器&#xff0c;提供类似于终端的操作界面。除了常规的远程登录功能&a…

微前端qiankun的使用——实践

qiankun 创建主应用项目——vue2 main.js注册子应用 $ yarn add qiankun # 或者 npm i qiankun -Simport { registerMicroApps, start } from qiankun; import Vue from "vue"; import App from "./App.vue"; import router from "./router"; …

ansible play-book玩法

使用ansible-playbook实现安装nginx_ansible 安装nginx-CSDN博客文章浏览阅读1.5k次&#xff0c;点赞14次&#xff0c;收藏19次。本文详细介绍了如何在Linux环境中准备Ansible环境&#xff0c;包括配置主机、下载和安装Ansible&#xff0c;以及使用yum模块和tar包源码安装Nginx…