Java项目(三)-- SSM开发社交网站(9)--后台图书管理功能

news2024/11/28 6:29:04

后台图书管理功能

富文本编辑器wangEditor

基于javascript与css开发是Web富文本编辑器,轻量、简洁、易用、开源免费。

代码演示
我们在test.ftl中添加富文本编辑器演示下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 引入wangEditor -->
    <script src="/resources/wangEditor.min.js"></script>
</head>
<body>
    <div>
        <button id="btnRead">读取内容</button>
        <button id="btnWrite">写入内容</button>
    </div>
    <div id="divEditor" style="width: 800px;height: 600px"></div>
    <script>
        var E = window.wangEditor;
        var editor = new E("#divEditor");//完成富文本编辑器初始化
        editor.create();//创建富文本编辑器,显式在页面上
        document.getElementById("btnRead").onclick = function (){
            var content = editor.txt.html();//获取编辑器现有的html内容
            alert(content)
        }
        document.getElementById("btnWrite").onclick = function (){
            var content = "<li style='color: red'>新内容<b>测试</b></li>";
            editor.txt.html(content);//设置编辑器现有的html内容
        }
    </script>
</body>
</html>

运行项目,在浏览器中访问http://localhost:8080/test/t1
在这里插入图片描述
在这里插入图片描述

实现图书管理功能

首先,打开pom.xml文件,引入Spring MVC文件上传底层依赖和Json Html解析组件,并发布到lib包

  <!--Spring MVC文件上传底层依赖-->
  <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
  </dependency>
  <!--Json Html解析组件-->
  <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.12.1</version>
  </dependency>

打开BookService.java新增创建新的图书的方法,并在BookServiceImpl.java类中添加相应的方法实现。

    /**
     * 创建新的图书
     * @param book 图书对象
     * @return 返回图书对象
     */
    public Book createBook(Book book);
    /**
     * 创建新的图书
     *
     * @param book 图书对象
     * @return 返回图书对象
     */
    @Transactional
    public Book createBook(Book book) {
        bookMapper.insert(book);
        return book;
    }

然后在com.ql.reader.controller.management包下创建MBookController.java图书管理控制器类,编写跳转到图书管理页面、上传图片和新增图书的方法。

package com.ql.reader.controller.management;

import com.ql.reader.entity.Book;
import com.ql.reader.service.BookService;
import com.ql.reader.service.exception.BussinessException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/management/book")
public class MBookController {
    @Resource
    private BookService bookService;
    @GetMapping("/index.html")
    public ModelAndView showBook(){
        return new ModelAndView("/management/book");
    }

    /**
     * wangEditor文件上传
     * @param file 上传文件
     * @param request 原生请求对象
     * @return
     * @throws IOException
     */
    @PostMapping("/upload")
    @ResponseBody
    public Map upload(@RequestParam("img") MultipartFile file, HttpServletRequest request) throws IOException {
        //得到上传目录
        String uploadPath = request.getServletContext().getResource("/").getPath() + "/upload/";
        //文件名
        String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
        //扩展名
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        //保存文件到upload目录
        file.transferTo(new File(uploadPath+fileName+suffix));
        Map result = new HashMap();
        result.put("errno",0);
        result.put("data", new String[]{"/upload/"+fileName+suffix});
        return result;
    }

    @PostMapping("/create")
    @ResponseBody
    public Map createBook(Book book){
        Map result = new HashMap();
        try {
            book.setEvaluationQuantity(0);
            book.setEvaluationScore(0f);
            Document doc = Jsoup.parse(book.getDescription());//解析图书详情
            Element img = doc.select("img").first();//获取图书详情第一图的元素对象
            String cover = img.attr("src");
            book.setCover(cover);//来自于description描述的第一幅图
            bookService.createBook(book);
            result.put("code", "0");
            result.put("msg", "success");
        } catch (BussinessException e) {
            e.printStackTrace();
            result.put("code", e.getCode());
            result.put("msg", e.getMsg());
        }
        return result;
    }

}

在src/main/webapp/WEB-INF/ftl/management目录下新增图书管理的前端页面book.ftl

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书管理功能</title>
    <style>
        #dlgBook{
            padding: 10px
        }
    </style>
    <link rel="stylesheet" href="/resources/layui/css/layui.css">

    <script src="/resources/wangEditor.min.js"></script>


    <script type="text/html" id="toolbar">
        <div class="layui-btn-container">
            <button class="layui-btn layui-btn-sm" id="btnAdd" onclick="showCreate()">添加</button>
        </div>
    </script>

</head>
<body>


<div class="layui-container">
    <blockquote class="layui-elem-quote">图书列表</blockquote>
    <!-- 数据表格 -->
    <table id="grdBook" lay-filter="grdBook"></table>
</div>
<!--表单内容-->
<div id="dialog" style="padding: 10px;display: none">
    <form class="layui-form" >
        <div class="layui-form-item">
            <!-- 图书类别 -->
            <select id="categoryId" name="categoryId" lay-verify="required" lay-filter=
            "categoryId">
                <option value=""></option>
                <option value="1">前端</option>
                <option value="2">后端</option>
                <option value="3">测试</option>
                <option value="4">产品</option>
            </select>

        </div>
        <div class="layui-form-item">
            <!-- 书名 -->
            <input type="text" id="bookName" name="bookName" required lay-verify="required" placeholder="请输入书名"
                   autocomplete="off" class="layui-input">
        </div>


        <div class="layui-form-item">
            <!-- 子标题 -->
            <input type="text" id="subTitle" name="subTitle" required lay-verify="required" placeholder="请输入子标题"
                   autocomplete="off" class="layui-input">
        </div>

        <div class="layui-form-item">
            <!-- 作者 -->
            <input type="text" id="author" name="author" required lay-verify="required" placeholder="请输入作者信息"
                   autocomplete="off" class="layui-input">
        </div>

        <div style="margin-top: 30px;font-size: 130%">图书介绍(默认第一图将作为图书封面)</div>
        <div class="layui-form-item" >
            <!-- wangEditor编辑器 -->
            <div id="editor" style="width: 100%">

            </div>
        </div>
        <!-- 图书编号 -->
        <input id="bookId" type="hidden">
        <!-- 当前表单操作类型,create代表新增 update代表修改 -->
        <input id="optype"  type="hidden">
        <div class="layui-form-item" style="text-align: center">
            <!-- 提交按钮 -->
            <button class="layui-btn" lay-submit="" lay-filter="btnSubmit">立即提交</button>
        </div>
    </form>
</div>
<script src="/resources/layui/layui.all.js"></script>
<script>

    //  table数据表格对象
    var table = layui.table;
    //  jQuery
    var $ = layui.$;
    //  wangEditor富文本编辑器对象
    var editor = null;
    //  初始化图书列表
    table.render({
        //  指定div
        elem: '#grdBook'
        //  数据表格id
        , id : "bookList"
        //  指定工具栏,包含新增添加
        , toolbar: "#toolbar"
        //  数据接口
        , url: "/management/book/list"
        //  开启分页
        , page: true
        //  表头
        , cols: [[
            {field: 'bookName', title: '书名', width: '300'}
            , {field: 'subTitle', title: '子标题', width: '200'}
            , {field: 'author', title: '作者', width: '200'}
            , {type: 'space', title: '操作', width: '200' , templet : function(d){
                    //  为每一行表格数据生成"修改"与"删除"按钮,并附加data-id属性代表图书编号
                    return "<button class='layui-btn layui-btn-sm btn-update'  data-id='" + d.bookId + "' data-type='update' οnclick='showUpdate(this)'>修改</button>" +
                        "<button class='layui-btn layui-btn-sm btn-delete'  data-id='" + d.bookId + "'   οnclick='showDelete(this)'>删除</button>";
                }
            }
        ]]
    });
    //  显示更新图书对话框
    //  obj对应点击的"修改"按钮对象
    function showUpdate(obj){
        //  弹出"编辑图书"对话框
        layui.layer.open({
            //  指定div
            id: "dlgBook",
            //  标题
            title: "编辑图书",
            type: 1,
            //  设置对话框内容,复制自dialog DIV
            content: $('#dialog').html(),
            //  设置对话框宽度高度
            area: ['820px', '730px'],
            resize: false // 是否允许调整尺寸
        })

        //  获取"修改"按钮附带的图书编号
        var bookId = $(obj).data("id");
        //  为表单隐藏域赋值,提交表单时用到
        $("#dlgBook #bookId").val(bookId);

        //  初始化富文本编辑器
        editor = new wangEditor('#dlgBook #editor');
        //  设置图片上传路径
        editor.customConfig.uploadImgServer = '/management/book/upload'
        //  图片上传时的参数名
        editor.customConfig.uploadFileName = 'img';
        editor.create(); // 创建wangEditor
        //  设置当前表单提交时提交至"update"更新地址
        $("#dlgBook #optype").val("update");
        layui.form.render();
        //  发送ajax请求,获取对应图书信息
        $.get("/management/book/id/" + bookId , {} , function(json){
            //  文本框回填已有数据
            //  书名
            $("#dlgBook #bookName").val(json.data.bookName);
            //  子标题
            $("#dlgBook #subTitle").val(json.data.subTitle);
            //  作者
            $("#dlgBook #author").val(json.data.author);
            //  分类选项
            $("#dlgBook #categoryId").val(json.data.categoryId);
            //  设置图文内容
            editor.txt.html(json.data.description);
            //  重新渲染LayUI表单
            layui.form.render();
        } , "json")



    }
    //  显示新增图书对话框
    function showCreate(){
        //   弹出"新增图书"对话框
        layui.layer.open({
            id: "dlgBook",
            title: "新增图书",
            type: 1,
            content: $('#dialog').html(),
            area: ['820px', '730px'],
            resize: false
        })
        //  初始化wangEditor
        editor = new wangEditor('#dlgBook #editor');
        //  设置图片上传地址
        editor.customConfig.uploadImgServer = '/management/book/upload';
        //  设置图片上传参数
        editor.customConfig.uploadFileName = 'img';
        //  创建wangEditor
        editor.create();

        //  LayUI表单重新渲染
        layui.form.render();
        //  设置当前表单提交时提交至"create"新增地址
        $("#dlgBook #optype").val("create");

    };

    // 对话框表单提交
    layui.form.on('submit(btnSubmit)', function(data){
        // 获取表单数据
        var formData = data.field;

        // 判断是否包含至少一副图片,默认第一图作为封面显示
        var description = editor.txt.html();
        if(description.indexOf("img") == -1){
            layui.layer.msg('请放置一副图片作为封面');
            return false;
        }
        // 获取当前表单要提交的地址
        // 如果是新增数据则提交至create
        // 如果是更新数据则提交至update
        var optype = $("#dlgBook #optype").val();

        if(optype == "update"){
            // 更新数据时,提交时需要附加图书编号
            formData.bookId=$("#dlgBook #bookId").val();
        }
        // 附加图书详细描述的图文html
        formData.description = description;
        // 向服务器发送请求
        $.post("/management/book/" + optype , formData , function(json){
            if(json.code=="0"){
                // 处理成功,关闭对话框,刷新列表,提示操作成功
                layui.layer.closeAll();
                table.reload('bookList');
                layui.layer.msg('数据操作成功,图书列表已刷新');
            }else{
                // 处理失败,提示错误信息
                layui.layer.msg(json.msg);
            }
        } ,"json")
        return false;
    });
    // 删除图书
    function showDelete(obj){
        // 获取当前点击的删除按钮中包含的图书编号
        var bookId = $(obj).data("id");
        // 利用layui的询问对话框进行确认
        layui.layer.confirm('确定要执行删除操作吗?', {icon: 3, title:'提示'}, function(index){

            // 确认按钮后发送ajax请求,包含图书编号
            $.get("/management/book/delete/" + bookId, {}, function (json) {
                if(json.code=="0"){
                    // 删除成功刷新表格
                    table.reload('bookList');
                    // 提示操作成功
                    layui.layer.msg('数据操作成功,图书列表已刷新');
                    // 关闭对话框
                    layui.layer.close(index);
                }else{
                    // 处理失败,提示错误信息
                    layui.layer.msg(json.msg);
                }
            }, "json");

        });

    }

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

运行项目,在浏览器中输入http://localhost:8080/management/book/index.html点击添加,打开新增图书弹框,输入信息提交测试。
在这里插入图片描述
提交成功后在浏览器中访问http://localhost:8080/在图书列表的最后面查到刚新增的图书。
在这里插入图片描述

实现图书分页查询

打开MBookController.java编写分页查询方法

    @GetMapping("/list")
    @ResponseBody
    public Map list(Integer page, Integer limit){
        if (page==null){
            page=1;
        }
        if (limit==null){
            limit=10;
        }
        IPage<Book> pageObject = bookService.paging(null, null, page, limit);
        Map result = new HashMap();
        result.put("code", "0");
        result.put("msg", "success");
        result.put("data", pageObject.getRecords());//当前页面数据
        result.put("count", pageObject.getTotal());//未分页时记录总数
        return result;
    }

运行项目,浏览器访问http://localhost:8080/management/book/index.html
在这里插入图片描述

实现图书修改更新功能

打开BookService.java添加更新图书数据方法,并在BookServiceImpl.java添加方法实现

/**
     * 更新图书
     * @param book 新图书数据
     * @return 更新后的数据
     */
    public Book updateBook(Book book);
    /**
     * 更新图书
     *
     * @param book 新图书数据
     * @return 更新后的数据
     */
    @Transactional
    public Book updateBook(Book book) {
        bookMapper.updateById(book);
        return book;
    }

然后打开MBookController.java添加根据Id获取图书和更新图书的方法

    /**
     * 根据图书ID获取图书
     * @param bookId 图书ID
     * @return 图书信息
     */
    @GetMapping("/id/{id}")
    @ResponseBody
    public Map selectById(@PathVariable("id") Long bookId){
        Book book = bookService.selectById(bookId);
        Map result = new HashMap();
        result.put("code", "0");
        result.put("msg","success");
        result.put("data", book);
        return result;
    }
    
    /**
     * 更新图书数据
     * @param book
     * @return
     */
    @PostMapping("/update")
    @ResponseBody
    public Map updateBook(Book book) {
        Map result = new HashMap();
        try {
            Book rawBook = bookService.selectById(book.getBookId());
            rawBook.setBookName(book.getBookName());
            rawBook.setSubTitle(book.getSubTitle());
            rawBook.setAuthor(book.getAuthor());
            rawBook.setCategoryId(book.getCategoryId());
            rawBook.setDescription(book.getDescription());
            Document doc = Jsoup.parse(book.getDescription());
            String cover = doc.select("img").first().attr("src");
            rawBook.setCover(cover);
            bookService.updateBook(rawBook);
            result.put("code", "0");
            result.put("msg", "success");
        } catch (BussinessException e) {
            e.printStackTrace();
            result.put("code", e.getCode());
            result.put("msg", e.getMsg());
        }
        return result;
    }

运行项目,在浏览器访问http://localhost:8080/management/book/index.html并找到我们上次新增的测试图书信息,并点击修改为
在这里插入图片描述
提交数据后修改成功。
在这里插入图片描述

实现图书删除功能

打开BookService.java编写删除图书的方法,并在BookServiceImpl.java添加方法实现

/**
     * 删除图书及相关数据
     * @param bookId
     */
    public void deleteBook(Long bookId);
    /**
     * 删除图书及相关数据
     *
     * @param bookId 图书编号
     */
    @Transactional
    public void deleteBook(Long bookId) {
        bookMapper.deleteById(bookId);
        QueryWrapper<MemberReadState> mrsQueryWrapper = new QueryWrapper<>();
        mrsQueryWrapper.eq("book_id", bookId);
        memberReadStateMapper.delete(mrsQueryWrapper);
        QueryWrapper<Evaluation> evaluationQueryWrapper = new QueryWrapper<>();
        evaluationQueryWrapper.eq("book_id", bookId);
        evaluationMapper.delete(evaluationQueryWrapper);
    }

然后打开MBookController.java编写删除图书的控制器方法

    @GetMapping("/delete/{id}")
    @ResponseBody
    public Map deleteBook(@PathVariable("id") Long bookId){
        Map result = new HashMap();
        try {
            bookService.deleteBook(bookId);
            result.put("code", "0");
            result.put("msg", "success");
        } catch (BussinessException e) {
            e.printStackTrace();
            result.put("code", e.getCode());
            result.put("msg", e.getMsg());
        }
        return result;
    }

运行项目,浏览器访问http://localhost:8080/management/book/index.html并找到我们添加的测试数据删除。
在这里插入图片描述
删除成功后数据消失。
在这里插入图片描述

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

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

相关文章

CMake中string的使用

CMake中的string命令用于字符串操作,其格式如下&#xff1a; Search and Replacestring(FIND <string> <substring> <out-var> [...])string(REPLACE <match-string> <replace-string> <out-var> <input>...)string(REGEX MATCH &l…

【数据库Redis】Redis五种基本数据结构以及三种配置方式——默认配置、运行配置、配置文件启动

文章目录一、初识Redis1.1 了解Redis1.2 Redis特性1.3 Redis使用场景Redis不适合场景1.4 用好Redis的建议1.5 正确安装并启动Redis在Linux上安装Redis在Windows上安装Redis配置、启动、操作、关闭Redis1)、启动Redis2)、Redis命令行客户端3)、停止Redis服务1.6 Redis重大版本一…

JVM(十四)—— StringTable

JVM&#xff08;十四&#xff09;—— StringTableString的基本特性String的内存分配字符串拼接intern方法常见面试题&#xff1a;到底创建了几个String对象String的基本特性 作为一名Java程序员肯定少不了和 String打交道&#xff0c;使用方法就是将字符串用一对""…

SpringCloud 远程调用

目录 1. SpringCloud 2. Nacos 3. 远程通信 3.1 创建公共子模块 (nacos_commons) 3.1.1 DTO对象 3.2 父项目引入子项目 (nacos_commons) 打成的jar包 3.3 父项目指向子项目 (nacos_commons) 为儿子 3.4 子项目 (nacos_provider) 3.5 子项目 (nacos_consumer) …

【Netty】九、Netty自定义协议

Netty自定义协议一、Netty自定义协议二、 协议设计三、 协议实现编码&#xff1a;解码&#xff1a;时间轮算法Netty中的时间轮一、Netty自定义协议 公有协议&#xff08;http、tcp&#xff09;、私有协议&#xff08;自己定义的&#xff0c;不是行业标准&#xff09; 我们知道…

[Qt]QMainWindow

目录 1.基本概述 2.菜单栏 3.工具栏 4.状态栏 5.铆接部件 6.中心部件 7.资源文件 &#xff08;1&#xff09;创建菜单栏&#xff0c;及菜单项 (2)创建工具栏 (3)创建锚接部件 (4)创建中心文件 &#xff08;5&#xff09;创建状态栏 1.基本概述 QMainWindow是一个为…

腾讯网关TGW基础原理入门

本文是在组内技术分享的发言稿&#xff0c;主要介绍 TGW 基本原理和架构&#xff0c;同时为了加深理解&#xff0c;会辅助对比 TGW 与 LVS&#xff08;ipvs&#xff09;的异同。 本次分享是偏基础性的 TGW 介绍&#xff0c;不会特别深入技术细节&#xff0c;目的是帮助需要用到…

算法7:迪杰斯特拉算法

目录1. 应用场景-最短路径问题2. 迪杰斯特拉(Dijkstra)算法介绍3. 迪杰斯特拉(Dijkstra)算法过程4. 算法分析过程5. 代码实现1. 应用场景-最短路径问题 看一个应用场景和问题 胜利乡有7个村庄(A, B, C, D, E, F, G) &#xff0c;现在有六个邮差&#xff0c;从G点出发&#xff…

贪吃蛇OneDay

环境 配置git环境 安装Git Bash&#xff08;使用Mac和Linux的同学可以跳过这一步&#xff09;&#xff1a;https://gitforwindows.org/ 进入家目录生成秘钥&#xff1a;执行命令ssh-keygen 在Ac Git上注册账号&#xff0c;地址&#xff1a;https://git.acwing.com/ 将id_rsa.p…

Unity中的AssetBundle

AssetBundle的概念 AssetBundle又称AB包&#xff0c;是Unity提供的一种用于存储资源的资源压缩包&#xff0c;是对Unity 初始Resources的一种扩展&#xff1b;一般使用的策略是把必须的资源和不需要更新的资源放在Resources文件夹下&#xff0c;其他的资源放在AssetBundle下面…

【微信小程序】flex布局

&#x1f3c6;今日学习目标&#xff1a;flex布局 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;20分钟 &#x1f389;专栏系列&#xff1a;微信小程序开发 文章目录前言Flex布局什么是flex&#xff1f;flex-direc…

Hive中内部表、外部表、分区表、分桶表之间的关系

文章目录Hive中内部表、外部表、分区表、分桶表之间的关系1.0&#x1f680;内部表2.0&#x1f440;外部表3.0&#x1fae5;内部表和外部表的差异3.0&#x1f418;分区表4.0&#x1f603;分桶表Hive中内部表、外部表、分区表、分桶表之间的关系 1.0&#x1f680;内部表 内部表&…

HEAD: HEtero-Assists Distillation for Heterogeneous Object Detectors

ECCV 2022 异质辅助蒸馏 Abstract Conventional knowledge distillation (KD) methods for object detection mainly concentrate on homogeneous teacher-student detectors. However, the design of a lightweight detector for deployment is often significantly differ…

计算机毕业设计(附源码)python智能仓储进出货管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【python】都2022年不会还有人不会在电脑桌面上养宠物吧~

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ! 上班枯燥&#xff0c;对着冷冰冰的电脑&#xff0c;相信很多小伙伴即使摸鱼&#xff0c;心情也不愉快。 这时如果有个萌宠能大家进行实时互动&#xff0c;这该有多好呀。再无聊的工作也能增添那么一丝趣味。 今天博主就来给大…

2、Ubuntu下安装Vivado下的下载器驱动 Digilent 版本

简介 在Ubuntu下安装Vivado时&#xff0c;安装工具会提醒你&#xff0c;digilent驱动无法自动安装&#xff0c;需要手动安装&#xff0c;并且让用户参考UG973手册安装。 由于安装驱动很简单&#xff0c;不用麻烦大家去找手册了&#xff0c;这里直接给出安装方法 安装方法 …

【Pytorch Lighting】第 6 章:深度生成模型

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

FPGA HLS 卷积单元 数据类型hls优化约束设置

数据类型 自定义精度整形&#xff1a; ap_int<4> in1, in2; ap_int<8> concat; concat (in1, in2); // in1和in2拼起来&#xff08;按照补码拼起来&#xff09; /* 例子&#xff1a; in1 1, in2 -1 补码&#xff1a; in1 0001 in2 1001 > 11101 > 1…

Spring mvc处理异常

文章目录一、Handler ExceptionResolver处理异常二、ExceptionHandler注解三、重点&#xff1a;添加ExceptionHandler注解方法的形参只能是异常类型四、重点2&#xff1a;捕获所有方法的异常—ControllerAdvice注解五、总结六、ResponseStatusExceptionResolve自定义异常显示页…