论文管理系统(增删查改功能的实现)

news2024/11/16 15:55:48

目录

一、后端

1.1实体类

1.2paperMapper类

1.3 PaperMapper类 

1.4Service层 

1.5 Controller层 

二、前端

源代码

 


我们已经实现列表数据了,接下来我们将实现增删查改功能,新增和修改还能够回显

一、后端

1.1实体类

实体类还是我们上一版的列表功能的实现的paper实体类

 

代码附在上一版中 

1.2paperMapper类

<?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.woniu.paper.mapper.PaperMapper">
    <!--    建立数据库t_paper表和实体Paper的映射关系-->
    <resultMap id="paperResult" type="Paper">
        <result column="id" property="id"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="title" property="title"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="type_id" property="typeId"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="paper_summary" property="paperSummary"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="paper_path" property="paperPath"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="created_by" property="createdBy"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="creation_data" property="creationData"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="modify_by" property="modifyBy"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="modify_data" property="modifyData"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="file_name" property="fileName"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="type_name" property="typeName"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
    </resultMap>
    <select id="selectPaperListByCondition" resultMap="paperResult">
        select p.*, t.type_name from t_paper as p LEFT JOIN t_type as t on
        p.type_id=t.id
        <where>
            <if test="title!=null and title!='null'">
                and title like '%${title}%'
            </if>
            <if test="typeName!=null and typeName!='null'">
                and type_name=#{typeName}
            </if>
        </where>
        limit #{start},#{size}
    </select>
    <select id="count" resultType="int">
        select count(t.type_name) from t_paper as p LEFT JOIN t_type as t on
        p.type_id=t.id
        <where>
            <if test="title!=null and title!=''">
                and title like '%${title}%'
            </if>
            <if test="typeName!=null and typeName!=''">
                and type_name=#{typeName}
            </if>
        </where>
    </select>

    <select id="getPaperByid" resultMap="paperResult">
        select p.*, t.type_name from t_paper as p left join t_type as t on p.type_id=t.id where p.id=#{id}
    </select>
    <delete id="deletePaperById">
        delete from t_paper where id=#{id}
    </delete>
    <insert id="insertPaper">
        insert into  t_paper (title, type_id,created_by) values ( #{title}, #{typeId}, #{createdBy})
    </insert>
    <update id="updatePaperById"> update t_paper set title=#{title}, type_id=#{typeId}, created_by=#{createdBy} where id=#{id} </update>
</mapper>

1.3 PaperMapper类 

package com.woniu.paper.mapper;

import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.entity.Paper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.net.HttpCookie;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
public interface PaperMapper extends BaseMapper<Paper> {
     List<Paper> selectPaperListByCondition(String title, String typeName, int start, int size);
     int count(String title, String typeName);//查询总数,用于列表分页
     //根据id获取论文信息的接口
      Paper getPaperByid(Long id);
     //根据id删除论文的接口
    int deletePaperById(Long id);
     //添加论文
    int insertPaper(Paper paper);
     //根据id修改论文
     int updatePaperById(Paper paper);

}

1.4Service层 


接口 

package com.woniu.paper.service;

import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.entity.Paper;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
public interface IPaperService  {
    public HttpResult selectPaperListByCondition(String title, String typeName, int pageIndex, int pageSize);
   // public HttpResult insertPaper(String title,Long typeId,String paperSummary,String paperPath,String createdBy,String modifyBy,String fileName);
    HttpResult  getPaperByid(Long id);
    HttpResult  deletePaperById(Long id);
    HttpResult insertPaper(Paper paper);
    HttpResult updatePaperById(Paper paper);
}

 


实现类

 

package com.woniu.paper.service.impl;

import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.entity.Paper;
import com.woniu.paper.mapper.PaperMapper;
import com.woniu.paper.mapper.UserMapper;
import com.woniu.paper.service.IPaperService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
@Service
public class PaperServiceImpl implements IPaperService {
    @Autowired(required = false)
    private PaperMapper paperMapper;//实例化DAO对象

    @Override
    public HttpResult selectPaperListByCondition(String title, String typeName, int pageIndex, int pageSize) {
        List<Paper> papers = paperMapper.selectPaperListByCondition(title, typeName, (pageIndex - 1) * pageSize, pageSize);
        int count = paperMapper.count(title, typeName);
        HttpResult result=null;
        if (papers!=null&&papers.size()>0){
            result= new HttpResult(papers,count,200,null);
        }else{
            result= new HttpResult(null,0,500,"没有更多数据");
        }
        return result;
    }

    @Override
    public HttpResult getPaperByid(Long id) {
        Paper paper = paperMapper.getPaperByid(id);
        HttpResult result=null;
        if (paper!=null){
            result= new HttpResult(paper,0,200,null);
        }else{
            result= new HttpResult(null,0,500,"没有更多数据");
        }
        return result;
    }

    @Override
    public HttpResult deletePaperById(Long id) {
        int count = paperMapper.deletePaperById(id);
        HttpResult result=null;
        if (count>0){
            result=new HttpResult(null,0,200,"删除论文成功");
        }else{
            result=new HttpResult(null,0,500,"删除论文失败");
        }

        return result;
    }

    @Override
    public HttpResult insertPaper(Paper paper) {
        int count = paperMapper.insertPaper(paper);
        HttpResult result=null;
        if (count>0){
            result=new HttpResult(null,0,200,"添加论文成功");
        }else{
            result=new HttpResult(null,0,500,"添加论文失败");
        }
        return result;
    }

    @Override
    public HttpResult updatePaperById(Paper paper) {
        int count = paperMapper.updatePaperById(paper);
        HttpResult result = null;
        if(count > 0){
            result = new HttpResult(null, 0, 200, "修改论文成功");
        } else {
            result = new HttpResult(null, 0, 500, "修改论文失败");
        }
        return result;
    }


}

1.5 Controller层 

 

 

package com.woniu.paper.controller;


import com.woniu.paper.entity.HttpResult;
import com.woniu.paper.entity.Paper;
import com.woniu.paper.service.IPaperService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.origin.Origin;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zhang
 * @since 2022-11-18
 */
@RestController
@RequestMapping("/paper/paper")
public class PaperController {
    @Autowired
    private IPaperService paperService;//实例化Service对象
    /**
     * 根据分页查询论文列表
     * @return
     */
    @RequestMapping("/list")
    @CrossOrigin(origins = "*")
    public HttpResult selectPaperListByCondition(String title,String typeName,int pageIndex,int pageSize) {
    return paperService.selectPaperListByCondition(title,typeName,pageIndex,pageSize);
    }
    /**
     * 根据id查询论文信息
     */
    @RequestMapping("/info")
    @CrossOrigin(origins = "*")
    public HttpResult getPaperByid(Long id){

        return paperService.getPaperByid(id);
    }

    /**
     * 根据id删除论文
     * @param id
     * @return
     */
    @RequestMapping("/delete")
    @CrossOrigin(origins = "*")
    public HttpResult deletePaperById(Long id){
        return paperService.deletePaperById(id);
    }

    /**
     * 增加论文数量
     */
    @RequestMapping("/add")
    @CrossOrigin(origins = "*")
    public HttpResult insertPaper(String title,String createdBy,Long typeId){
        Paper paper = new Paper();
        paper.setTitle(title);
        paper.setCreatedBy(createdBy);
        paper.setTypeId(typeId);
        return paperService.insertPaper(paper);

    }
    @RequestMapping("/update")
    @CrossOrigin(origins = "*")
    public HttpResult updatePaperById(Long id,String title,String createdBy,Long typeId){
        Paper paper = new Paper();
        paper.setId(id);
        paper.setTitle(title);
        paper.setCreatedBy(createdBy);
        paper.setTypeId(typeId);
        return paperService.updatePaperById(paper);
    }


}

 这就是我们增删改查的后端部分,接下来,我们将来写前端部分

二、前端

源代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="assets/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="assets/jquery-3.5.1.min.js"></script>
    <script src="assets/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
    <script src="assets/vue.min-v2.5.16.js"></script>
    <script src="assets/vue-router.min-2.7.0.js"></script>
    <script src="assets/axios.min.js"></script>
</head>
<body>
<!--论文添加或修改的页面-->
<template id="template_insert_or_update">
    <div style="width: 500px; position: fixed; top: 50px; left: 50px; background-color: white; border: 1px solid black">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <label>论文主题</label>
                <input type="text" class="form-control" v-model="adTitle">
            </div>
        </div>
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <label>作者</label>
                <input type="text" class="form-control" v-model="adCreateBy">
            </div>
        </div>
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <label>论文类型</label>
                <select v-model="adTypeId">
                    <option value="1">软件</option>
                    <option value="2">财务</option>
                </select>
            </div>
        </div>
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <button @click="saveOrUpdate">保存</button>
            </div>
        </div>
    </div>
</template>
<div id="app">
    <router-view v-if="isRouterViewShow"></router-view>
    <div style="margin-left: auto; margin-right: auto;">
        <div style="width: 1000px; height: 100px; border: 1px solid black; text-align: center;font-size: 18px; line-height: 100px;">
            论文管理系统
        </div>
        <div style="width: 200px; height: 700px; border: 1px solid black; text-align: center; font-size: 18px; line-height: 50px; float: left">
            <div>
                <button class="btn btn-link" @click="doUserManager">用户管理</button>
            </div>
            <div>
                <button class="btn btn-link" @click="doPaperManager">论文管理</button>
            </div>

        </div>
        <div style="width: 800px; height: 700px; border: 1px solid black; float: left">
            <div v-if="isShow">
                论文主题:
                <input type="text" v-model="title">
                论文类型:
                <select v-model="typeName">
                    <option>软件</option>
                    <option>财务</option>
                </select>
                <button @click="doQuery">查询</button>
                <button @click="doAddPaper">添加论文</button>
                <!--使用bootstrap的斑马线样式表格-->
                <table class="table table-striped">
                    <caption>论文列表</caption>
                    <!--表头-->
                    <thead>
                    <tr>
                        <th>论文主题</th>
                        <th>作者</th>
                        <th>论文类型</th>
                        <th>发表时间</th>
                        <th>修改时间</th>
                        <th>操作</th>
                    </tr>
                    </thead>
                    <!--表内容-->
                    <tbody>
                    <!-- 通过vue的v-for指令循环输出论文信息-->
                    <tr v-for="p in papers">
                        <td>{{p.title}}</td>
                        <td>{{p.createdBy}}</td>
                        <td>{{p.typeName}}</td>
                        <td>{{p.creationData}}</td>
                        <td>{{p.modifyData}}</td>
                        <td>
                            <button class="btn btn-link" @click="doUpdate(p.id)">修改</button>
                            <button class="btn btn-link" @click="doDelete(p.id)">删除</button>
                        </td>
                    </tr>
                    </tbody>
                </table>
                <!--分页-->
                <ul class="pagination" v-for="p in pageNum">
                    <!-- class=active表示被选中 -->
                    <li v-if="p == pageIndex" class="active">
                        <a @click="doGo(p)">{{p}}</a>
                    </li>
                    <li v-else="p == pageIndex">
                        <a @click="doGo(p)">{{p}}</a>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>
<script>
    var _self = null; //用于等量代换vue对象的this
    //创建添加或删除页面的模板的实例对象
    var myTemplate = {
        template: '#template_insert_or_update',
        //要绑定的数据
        data() {
            return {
                adTitle: null, //主题,用于添加或修改
                adCreateBy: null, //作者,用于添加或修改
                adTypeId: null //类型的ID,用于添加或修改
            }
        },
        //要绑定的函数
        methods: {
            //点击新增页面的保存按钮执行
            saveOrUpdate() {
                if (_self.isUpdate) { //修改跳转来的
                    //收集表单数据并调用后台修改论文的接口提交到后台
                    var url = "http://localhost:8080/paper/paper/update?title=" + this.adTitle + "&createdBy=" + this.adCreateBy + "&typeId=" + this.adTypeId + "&uid=" + localStorage.getItem("uid") + "&id=" + _self.paperId;
                    axios.get(url).then(response => {
                        console.log(response.data);
                        if (response.data.code == 200) { //修改成功
                            //刷新列表
                            var url = "http://localhost:8080/paper/paper/list?pageIndex=1&pageSize=" + _self.pageSize + "&uid=" + localStorage.getItem("uid");
                            _self.pageIndex = 1;
                            _self.requestPapers(url); //调用请求论文列表的函数发送请求
                        } else { //修改失败
                            alert(response.data.msg);
                        }
                    });
                } else { //添加按钮跳转来的
                    //收集表单数据并调用后台添加论文的接口提交到后台
                    var url = "http://localhost:8080/paper/paper/add?title=" + this.adTitle + "&createdBy=" + this.adCreateBy + "&typeId=" + this.adTypeId + "&uid=" + localStorage.getItem("uid");
                    axios.get(url).then(response => {
                        console.log(response.data);
                        if (response.data.code == 200) { //添加成功
                            //刷新列表
                            var url = "http://localhost:8080/paper/paper/list?pageIndex=1&pageSize=" + _self.pageSize + "&uid=" + localStorage.getItem("uid");
                            _self.pageIndex = 1;
                            _self.requestPapers(url); //调用请求论文列表的函数发送请求
                        } else { //添加失败
                            alert(response.data.msg);
                        }
                    });
                }

                //关闭当前页面(让router-view的显示状态为false)
                _self.isRouterViewShow = false;
            }
        },
        created: function () {
            //判断是否要回显,当通过修改按钮跳转进来时,需要回显
            if (_self.isUpdate) { //说明是通过修改按钮跳转进来的
                //通过axios发送请求
                axios.get("http://localhost:8080/paper/paper/info?id=" + _self.paperId + "&uid=" + localStorage.getItem("uid")).then(response => {
                    console.log(response.data.data);
                    this.adTitle = response.data.data.title;
                    this.adCreateBy = response.data.data.createdBy;
                    this.adTypeId = response.data.data.typeId;
                });
            }
        }
    }

    //创建router实力,维护路由(点击不同链接,显示不同的模板)
    var rt = new VueRouter({
        routes: [
            {path: '/add', component: myTemplate}
        ]
    });

    //创建vue实例对象
    new Vue({
        //将id=app的div的管理权交给vue
        el: '#app',
        router: rt, //将自定义的路由绑定到vue实例
        //需要绑定的数据
        data: {
            papers: null, //论文列表
            isShow: false, //控制列表是否显示
            isRouterViewShow: false, //控制router-view是否显示
            isUpdate: false, //是否是修改页面
            paperId: null, //论文的id,用于传参
            //用于条件查询
            title: null,
            typeName: null,
            //用于分页
            pageIndex: 1, //当前页面
            pageSize: 10, //每页显示的条数
            pageTotle: 0, //总条数
            pageNum: 0 //页数
        },
        //需要绑定的函数
        methods: {
            //请求论文列表
            requestPapers(url) {
                //通过axios发送请求get请求,then响应
                axios.get(url).then(respones => {
                    console.log(respones.data);
                    this.papers = respones.data.data; //给论文列表赋值
                    this.pageTotle = respones.data.pageTotle; //给总条数赋值
                    //Math.ceril函数=》小数取整,向上取整
                    this.pageNum = Math.ceil(this.pageTotle / this.pageSize); //计算页数
                });
            },
            //分页器跳转
            doGo(p) {
                this.pageIndex = p;
                var url = "http://localhost:8080/paper/paper/list?pageIndex=" + p + "&pageSize=" + this.pageSize + "&uid=" + localStorage.getItem("uid");
                this.requestPapers(url); //调用请求论文列表的函数发送请求
            },
            //用户管理
            doUserManager() {
                this.isShow = false; //让列表不显示
            },
            //论文管理
            doPaperManager() {
                this.isShow = true; //让列表显示
            },
            //点击查询按钮执行
            doQuery() {
                var url = "http://localhost:8080/paper/paper/list?pageIndex=" + this.pageIndex + "&pageSize=" + this.pageSize + "&uid=" + localStorage.getItem("uid") + "&title=" + this.title + "&typeName=" + this.typeName;
                this.requestPapers(url); //调用请求论文列表的函数发送请求
            },
            //添加添加论文按钮时执行
            doAddPaper() {
                //设置是否为修改页面的变量状态
                this.isUpdate = false;
                //让router-view控件显示出来
                this.isRouterViewShow = true;
                //通过roter对象的push函数跳转指定的模板
                this.$router.push("/add");
            },
            //点击表格修改按钮时执行
            doUpdate(id) {
                //设置是否为修改页面的变量状态
                this.isUpdate = true;
                //让router-view控件显示出来
                this.isRouterViewShow = true;
                //通过roter对象的push函数跳转指定的模板
                this.$router.push("/add");
                this.paperId = id;
            },
            //点击表格修改按钮时执行
            doDelete(id) {
                //通过axios发送请求
                axios.get("http://localhost:8080/paper/paper/delete?id=" + id + "&uid=" + localStorage.getItem("uid")).then(response => {
                    console.log(response.data);
                    if (response.data.code == 200) { //删除成功
                        var url = "http://localhost:8080/paper/paper/list?pageIndex=1&pageSize=" + this.pageSize + "&uid=" + localStorage.getItem("uid");
                        this.requestPapers(url); //调用请求论文列表的函数发送请求
                    } else { //删除失败
                        alert(response.data.msg);
                    }
                });
            }
        },
        //页面加载完成后执行
        created: function () {
            _self = this;
            //通过localStorage的getItem函数获取缓存的uid
            var url = "http://localhost:8080/paper/paper/list?pageIndex=" + this.pageIndex + "&pageSize=" + this.pageSize + "&uid=" + localStorage.getItem("uid");
            this.requestPapers(url); //调用请求论文列表的函数发送请求
        }
    });
</script>
</body>
</html>

 

 

 

 

 

 

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

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

相关文章

IFD-x 微型红外成像仪探测距离说明

红外热成像仪是用光学镜头来收集被测物体的热辐射能量的&#xff0c;故此探测距离会受镜头视场角 和热成像像素分辨率有关。 假如某成像仪的成像分辨率为 32*32 像素&#xff0c;视场角为 75 度&#xff0c;则可以理解为从镜头发射出 32*321024 条激光来探测 1024 个点的…

数据结构初阶:队列

目录 一、队列的概念和结构 二、队列的实现 定义队列结构 初始化队列 销毁队列 检测队列是否为空 入队列 出队列 获取队列头部元素 获取队列队尾元素 获取队列中有效元素个数 优化 三、测试 四、优化后的全部代码 一、队列的概念和结构 队列:只允许在一端进行插入数据操作…

【区块链】用Python实现一条区块链

用Python实现一条区块链 点击链接获取可执行文件 本文使用 python 实现了一条简单的区块链。主要分两个模块&#xff1a;实现每个区块的结构和相关的方法、实现整条区块链的结构和相关的方法。下面是对这两个模块的描述。 每个区块主要包括两个成员&#xff1a;区块头和区块…

GlobalWebsoket.js 的使用,实现获取实时数据

在称重小程序是使用 GlobalWebsoket 实现获取实时数据前言一、逻辑分析二、实现方式1.方法整体流转分析 -- 初始化并绑定1. onLoad1. init2. getDeviceInfo3. initWebSocket4. setProperties2.方法整体流转分析 -- 解除绑定1. onBackPress2. remoeSubscribe三、参数调用分析四、…

“大数据分析”相比“传统数据分析”优势明显,体现在哪些方面

一、大数据和数据分析的定义&#xff1a; 数据分析&#xff1a;指使用适当的统计分析方法来收集数据&#xff0c;以进行大量数据分析。 大数据分析&#xff1a;指在可承受的时间范围内无法使用常规软件工具捕获&#xff0c;管理和处理的数据集合&#xff1b; 数据分析的核心…

【web渗透思路】任意账号的注册、登录、重置、查看

目录 一、任意用户注册 1.未验证邮箱/手机号 2、不安全验证邮箱/手机号 3.批量注册 4.个人信息伪造 5.前端验证审核绕过 6.用户名覆盖 二、任意用户登录 1、万能密码 2、验证码、密码回显 3、登录检测不安全 三、任意账号重置 1、重置账号名 2、验证码 3、MVC数…

2022年第三季度泛出行行业洞察:泛出行行业正在经历数智化升级的关键时期,用户规模保持平稳增长,行业整体良性发展

易观分析&#xff1a;泛出行行业涵盖综合车主服务、车辆加油充电、网约车、旅游预定、酒店预定、户外出行等领域。当前泛出行领域正在经历传统模式向数智化新模式的转变&#xff0c;智能化升级和服务品质提升在该领域变革中正发挥着积极的作用。未来泛出行领域将在数智化、电动…

Web3:价值投资的范式转移

​潜力博主推荐&#xff0c;点上面关注博主 ↑↑↑ 进化是宇宙中最强大的力量&#xff0c;是唯一永恒的东西&#xff0c;是一切的驱动力。———桥水基金 雷.达利奥 时间拉长&#xff0c;进化才是人类的主旋律。过去&#xff0c;环境的变化是进化的主因。 现在&#xff0c;技…

Servlet | 深度剖析转发和重定向

一&#xff1a;深度剖析转发和重定向 &#xff08;1&#xff09;在一个web应用中通过两种方式可以完成资源的跳转 第一种方式&#xff1a;转发方式 第二种方式&#xff1a;重定向方式 &#xff08;2&#xff09;转发和重定向的区别 区别一&#xff1a;代码上的区别 ①转发 &a…

阿里资深专家撰写出的 Nginx 底层与源码分析手册,GitHub 已爆赞

NGINX 发展史&#xff1a; 过去最主流的服务器是 1995 年发布的 Apache 1.0。Apache 源于 NCSAHTTPd 服务器&#xff0c;是一个多进程模型的 Web 服务器。但运行到后期&#xff0c;Apache 渐渐出现很多问题&#xff0c;比如内存占用很大、扩展需挂接第三方库、并发能力受限等。…

高效的股票数据接口工具有哪些?

我们已经知道了量化投资是是通过数量化方式及计算机程序化发出买卖指令&#xff0c;以获取稳定收益为目的的交易方式&#xff0c;而其中最重要的载体是数据。在金融领域中量化的应用让金融分析师、外汇交易员、产品研发员等技术人员又有了新的用武之地&#xff0c;转型成为量化…

【微信小程序】saveFile:fail tempFilePath file not exist

开发微信小程序尝试保存文件时&#xff0c;会提示saveFile:fail tempFilePath file not exist错误&#xff0c;是什么问题呢&#xff0c;接下来带你如何分析和解决问题 文章目录1. 定位问题2. 解决问题1. 定位问题 首先&#xff0c;看一下代码怎么写得&#xff0c;如下所示 w…

数据结构之线性表中的顺序表【详解】

前言 现在是北京时间11月24号0点2分&#xff0c;天气有一些冷&#xff0c;我现在很困&#xff0c;但是博客还没写&#xff0c;我很想睡觉&#xff0c;假如我现在放弃的码字&#xff0c;往床上一趟&#xff0c;其实也不怎么样&#xff0c;但是我们不能有拖延症&#xff0c;所以…

关于元宇宙的六七八你知道多少?

&#x1f3e0;个人主页&#xff1a;黑洞晓威 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晓威&#xff0c;一名普普通通的大二在校生&#xff0c;希望在CSDN中与大家一起成长。&#x1f381;如果你也在正在学习Java&#xff0c;欢迎各位大佬来到我的博客查漏补缺…

【MySQL篇】第三篇——表的操作

创建表 创建表案例 查看表结构 修改表 删除表 创建表 在创建数据库之后&#xff0c;接下来就要在数据库中创建数据表了。所谓创建数据表&#xff0c;指的是在已经创建数据库中建立新表。 创建数据表的过程是规定数据列的属性的过程&#xff0c;同时也是实施数据完整性&am…

JAVA实训第二天

目录 JDK8新特性 Java8介绍 JAVA 8主要新特性 Java 8接口增强-默认方法 接口 接口的应用 Lambda表达式介绍 Lambda表达式的写法 功能性接口Lambda表达式的应用 函数接口 JDK8新特性 Java8介绍 •Java8是Java发布以来改动最大的一个版本&#xff0c;其中主要添加了函数式…

自定义数据类型——结构体

我们今天来简单介绍一下结构体。 目录 1. 结构体的声明 2. 结构体成员的访问 3. 结构体传参 首先我们要知道为什么会有结构体的存在&#xff0c;我们的生活里有很多东西&#xff0c;比如一只猫&#xff0c;一本书&#xff0c;一个人&#xff0c;我们如果要用程序来描述他们…

C语言 指针

C语言 指针引言1. 什么是指针2. 简单认识指针3. 取地址符 & 和解引用 * 符一、指针与内存二、指针类型的存在意义1. 指针变量的大小2. 指针移动3. 不同指针类型的解引用三、指针运算1. 指针加减整数程序清单1程序清单22. 指针 - 指针3. 指针关系运算四、二级指针五、野指针…

这个双11,我薅了华为云会议的羊毛

文章目录前言华为云会议悄然助力各行各业和其他云会议产品相比&#xff0c;华为云会议优势是什么&#xff1f;云端一体线下会议室和云会议互通专业会管与会控能力更安全华为云会议有哪些 AI 能力&#xff1f;华为云会议入门有多简单&#xff1f;下载步骤如下安装加入会议预约会…

原生js 之 (DOM操作)

Web API Web API是浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM) JavaScipt由三部分构成 ECMAScript、DOM和BOM。 BOM浏览器对象模型&#xff0c;提供了与浏览器的交互方法和接口&#xff1b; DOM 文档对象模型&#xff0c;提供了处理网页内容、结构 、样式的方法…