day07 项目启动以及git

news2025/1/6 18:33:17

spring框架

spring 负责整合各种框架,把new对象的部分交给spring去做,对象new不出来,项目就启动不起来,这样可以有效保证所需要的对象都在容器中存在,后续的部分都可以顺利执行
控制反转:业务对象创建依赖资源的控制权反转给容器
依赖注入:容器把业务对象依赖的资源注入到业务对象

容器:IOC容器
业务对象:servlet/action/controller
依赖资源:service

mybatis用于取代dao层

git

用于版本控制,程序员们每天将自己写的代码传入git仓库里,
add将修改过的文件添加到Git的暂存区(staging area),这是准备提交的第一步;
再commit将暂存区的更改提交到本地仓库,这样更改就被保存在本地的版本历史中;
如果有需求也可以push将本地仓库的更改推送到远程仓库,通常是在团队协作时,将个人的更改共享给其他团队成员;
使用pull从远程仓库拉取最新的更改到本地仓库,这通常发生在开始工作前,以确保你的代码库是最新的。

commit到git的安装特别简单,一直点击下一步即可,通常使用bash命令行来运行这样比较快。

常用操控的命令行指令——

git clone http仓库网址 + 输入华为云用户名、密码可以将本地项目和git仓库联系起来
git cat hello.txt 看到文件的内容
git pwd 看到当前所在的目录
git add hello.txt 不用加引号
git status 获取当前你提交的文件
git log 看你是不是有任何的commit
--引号 必须英文的!!!
git commit [hello.txt] -m "add new file hello.txt" 上传到华为云仓库,“-m”不能省略!!!
用 git pull origin master 来更新本地的文件

debug

解决之前提出的下拉表格无法根据某一行的内容来决定是否显示表格的问题~!

具体就是根据每一行(记录)UserNum的计算值判断点击下拉之后是否可以显示表格,如果UserNum>0,就可以显示,如果=0就不显示表格。

因为UserNum也是计算得到的,所以不能和别的列一样直接从对象中获取,想了很多种方法tree-props属性还是v-if都不行,但是解决方法其实很简单,就是下拉列代码内部加一层div嵌套在template内部,再使用v-show,直接判断每一行(记录/对象)所包含的对象数组的长度即可,而并不能根据UserNum来判断

如图圈住的代码换成——

<div v-show="props.row.bankUserList != null&& props.row.bankUserList.length > 0">

附上完整代码——

<template>
  <div>
    <h1>Bank View</h1>
    <el-button @click="find" type="primary">search</el-button>
    <el-button @click="add" type="primary">add</el-button>
    <br /><br /><br />
    <el-input v-model="inputValue" placeholder="请输入id"></el-input>
    <br /><br />
    <el-table :data="bankList" style="width: 100%" >
      <el-table-column type="expand">
        <template slot-scope="props" >
          <div v-show="props.row.bankUserList != null&& props.row.bankUserList.length > 0">
          <el-table :data="props.row.bankUserList" style="width: 100%">
            <el-table-column label="userName" prop="userName">
            </el-table-column>
            <el-table-column label="role" prop="role"> </el-table-column>
            <el-table-column label="realName" prop="realName">
            </el-table-column>
            <el-table-column label="password" prop="password">
            </el-table-column>
            <el-table-column label="phone" prop="phone"> </el-table-column>
            <el-table-column label="createTime" prop="createTime">
            </el-table-column>
            <el-table-column label="updateTime" prop="updateTime">
            </el-table-column>
          </el-table>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="UserNum"  width="180">
        <template slot-scope="props">
        {{ props.row.bankUserList != null ? props.row.bankUserList.length : null }}
        </template>
      </el-table-column>
      <el-table-column label="bankId" prop="bankId" width="180">
      </el-table-column>
      <el-table-column label="bankName" prop="bankName" width="180">
      </el-table-column>
      <el-table-column label="bankPhone" prop="bankPhone" width="180">
      </el-table-column>
      <el-table-column label="introduce" prop="introduce" width="300">
      </el-table-column>
      <el-table-column label="money" prop="money" width="180">
      </el-table-column>
      <el-table-column label="rate" prop="rate" width="180"> </el-table-column>
      <el-table-column label="repayment" prop="repayment" width="180">
      </el-table-column>
      <!--  -->
      <el-table-column fixed="right" label="操作" width="100">
        <template slot-scope="scope">
          <el-button
            @click="deleteBank(scope.row.bankId)"
            type="text"
            size="small"
            >删除</el-button
          >
          <el-button
            type="text"
            size="small"
            @click="updateBank(scope.row.bankId)"
            >编辑</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <!--  添加的对话框-->
    <el-dialog :title="title" :visible.sync="dialogFormVisible">
      <el-form :model="form" :rules="rules" ref="bankForm">
        <el-form-item
          label="bankName"
          :label-width="formLabelWidth"
          prop="bankName"
        >
          <el-input v-model="form.bankName" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          label="bankPhone"
          :label-width="formLabelWidth"
          prop="bankPhone"
        >
          <el-input v-model="form.bankPhone" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          label="introduce"
          :label-width="formLabelWidth"
          prop="introduce"
        >
          <el-input v-model="form.introduce" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="money" :label-width="formLabelWidth" prop="money">
          <el-input v-model="form.money" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="rate" :label-width="formLabelWidth" prop="rate">
          <el-input v-model="form.rate" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          label="repayment"
          :label-width="formLabelWidth"
          prop="repayment"
        >
          <el-input v-model="form.repayment" autocomplete="off"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancel">取 消</el-button>
        <el-button type="primary" @click="save">保 存</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import bankApi from "../api/bank";

export default {
  name: "BankView",
  created() {
    this.findAndBankUser();
  },
  data() {
    return {
      bankList: [],
      bank: {},
      inputValue: "",
      dialogFormVisible: false, // 控制添加的对话框是否可见
      title: "",
      formLabelWidth: "100px",
      form: {
        bankName: "",
        bankPhone: "",
        introduce: "",
        money: "",
        rate: "",
        repayment: "",
      },
      rules: {
        bankName: [
          { required: true, message: "请输入银行名称", trigger: "blur" },
          {
            min: 2,
            max: 50,
            message: "长度在 2 到 50 个字符",
            trigger: "blur",
          },
        ],
        bankPhone: [
          { required: true, message: "请输入银行电话", trigger: "blur" },
          { min: 11, max: 11, message: "长度为11位", trigger: "blur" },
        ],
        introduce: [
          { required: true, message: "请输入银行介绍", trigger: "blur" },
          {
            min: 2,
            max: 200,
            message: "长度在 2 到 200 个字符",
            trigger: "blur",
          },
        ],
        money: [
          { required: true, message: "请输入银行存款金额", trigger: "blur" },
        ],
        rate: [{ required: true, message: "请输入银行利率", trigger: "blur" }],
        repayment: [
          { required: true, message: "请输入银行还款期限", trigger: "blur" },
        ],
      },
    };
  },
  methods: {
    updateBank(id) {
      this.title = "编辑银行";
      this.dialogFormVisible = true;
      bankApi.findById(id).then((res) => {
        if (res.data.code == 200) {
          if (res.data.data == null) {
            this.infoMessage("数据库错误,请联系管理员");
          } else {
            this.form = res.data.data;
          }
        } else {
          this.errorMessage(res.data.message);
        }
      });
    },
    deleteBank(id) {
      this.$confirm("确定要删除编号为" + id + "的数据吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          bankApi.deleteBank(id).then((res) => {
            if (res.data.code == 200) {
              this.successMessage("删除了" + res.data.data + "条数据");
              this.findAndBankUser();
            } else {
              this.errorMessage(res.data.message);
            }
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消删除",
          });
        });
    },
    save() {
      // 验证表单
      this.$refs.bankForm.validate((validate) => {
        if (validate) {
          // 验证通过,可以提交数据
          if (this.form.bankId == null || this.form.bankId == 0) {
            bankApi.saveBank(this.form).then((res) => {
              if (res.data.code == 200) {
                this.successMessage("添加了" + res.data.data + "条数据");
                // this.successMessage();
                this.findAndBankUser();
              } else {
                this.errorMessage(res.data.message);
              }
            });
          } else {
            bankApi.updateBank(this.form).then((res) => {
              if (res.data.code == 200) {
                this.successMessage("修改了" + res.data.data + "条数据");
                this.findAndBankUser();
              } else {
                this.errorMessage(res.data.message);
              }
            });
          }

          this.dialogFormVisible = false;
          this.$refs.bankForm.resetFields(); //重置表单
        }
      });
    },
    cancel() {
      this.dialogFormVisible = false;
      this.$refs.bankForm.resetFields(); //重置表单
    },
    add() {
      this.title = "添加银行";
      this.dialogFormVisible = true;
      this.$refs.bankForm.resetFields(); //重置表单
    },
    find() {
      if (this.inputValue) {
        // alert(this.inputValue);
        this.findById();
      } else {
        this.findAndBankUser();
      }
    },
    findById() {
      bankApi.findById(parseInt(this.inputValue, 10)).then((res) => {
        // alert(parseInt(this.inputValue, 10));
        if (res.data.code == 200) {
            this.bank = res.data.data;
          if (this.bank != null) {
            
            this.$set(this, "bankList", []); // 清空原有数据
            this.bankList.push(this.bank);
          } else {
            this.infoMessage("没有找到该银行");
          }
        } else {
          this.errorMessage(res.data.message);
        }
      });
    },
    findAndBankUser() {
      bankApi.findAndBankUser().then((res) => {
        if (res.data.code == 200) {
          this.bankList = res.data.data;
        }
      });
    },
    successMessage(message) {
      this.$message({
        message: message,
        type: "success",
      });
    },
    infoMessage(message) {
      this.$message({
        message: message,
        type: "warning",
      });
    },
    errorMessage(message) {
      this.$message.error(message);
    },
  },
};
</script>

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

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

相关文章

零基础入门转录组数据分析——机器学习算法之lasso

零基础入门转录组数据分析——机器学习算法之lasso 目录 零基础入门转录组数据分析——机器学习算法之lasso1. Lasso基础知识2. Lasso&#xff08;Rstudio&#xff09;——代码实操2. 1 数据处理2. 2 构建Lasso模型2. 3 提取Lasso关键基因2. 4 Lasso结果简单可视化 1. Lasso基础…

高度偏斜特征处理:log(x)、sqrt(x)、box-cox、Yeo-Johnson

一、概念 高度偏斜的特征 &#xff1a; 数据分布不均匀、不对称的特征 处理之后&#xff1a;使其分布更接近正态分布或至少减少偏斜程度 二、处理方法 1、对数变换&#xff1a;log(x) 适用于右偏数据压缩大值&#xff0c;拉伸小值 2、平方根变换&#xff1a;sqrt(x) 对右…

臂式血压计电子方案ocba设计与开发

臂式血压计是运用电子技术与血压间接测量原理进行血压测量的医疗设备。臂式血压计有臂式、腕式、手表式之分&#xff1b;其电子技术已经历了最原始的第一代&#xff08;机械式定速排气阀&#xff09;、第二代&#xff08;电子伺服阀&#xff09;、第三代&#xff08;加压同步测…

学习测试12-车(略)

系统讲解&#xff0c;可以在懂车帝网站去了解汽车结构

商用密码测评之对HTTPS(TLS)协议中各个参数解释

1、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是一个广泛使用的TLS&#xff08;传输层安全协议&#xff09;加密套件&#xff0c;它结合了多种技术和算法来确保网络通信的安全。下面是对该加密套件中各个参数的详细解释&#xff1a; 1. TLS 定义&#xff1a;TLS&#xff08;传…

【文件解析漏洞】实战详解!

漏洞描述&#xff1a; 文件解析漏洞是由于中间件错误的将任意格式的文件解析成网页可执行文件&#xff0c;配合文件上传漏洞进行GetShell的漏洞! IIS解析漏洞&#xff1a; IIS6.X&#xff1a; 方式一:目录解析 在网站下建立文件夹的名字为.asp/.asa 的文件夹&#xff0c;其目…

【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

最近我在做前端面试题总结系列&#xff0c;感兴趣的朋友可以添加关注&#xff0c;欢迎指正、交流。 争取每个知识点能够多总结一些&#xff0c;至少要做到在面试时&#xff0c;针对每个知识点都可以侃起来&#xff0c;不至于哑火。 JavaScript 之你不一定会的基础题 前言 面试往…

python中list的深拷贝和浅拷贝

其实这还是涉及到python中的可变对象和不可变对象的概念。 https://www.cnblogs.com/poloyy/p/15073168.html # -*- coding: utf-8 -*-person [name, [savings, 100.00]] hubby person[:] # slice copy wifey list(person) # fac func copy a [id(x) for x in person] b …

【Vue3】watch 监视多种类型数据

【Vue3】watch 监视多种类型数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…

新闻稿的写作格式,干货分享

随着互联网的发展&#xff0c;新闻稿在互联网上的地位非常高&#xff0c;新闻稿对比一般软文来说内容质量偏高而且还具备&#xff1a;严谨、时效、可观的特点。 撰写新闻稿主要就是突出最新鲜、最重要的事实&#xff0c;同时&#xff0c;新闻稿也是文字简洁&#xff0c;并且时效…

【nginx、apache】网站只有首页可以正常打开,其他页面都实现404

【nginx、apache】网站只有首页可以正常打开&#xff0c;其他页面都实现404 1、检查伪静态规则&#xff08;中枪&#xff09;

【剑指offer】

剑指offer 面试题67&#xff1a;字符串转成整数面试题1&#xff1a;赋值运算符函数面试题3&#xff1a;数组中重复的数字 面试题67&#xff1a;字符串转成整数 LeedCode&#xff1a;LCR 192. 把字符串转换成整数 (atoi) 测试atoi的功能和异常效果 #include <iostream> #…

【Linux】全志Tina配置屏幕时钟的方法

一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\device\config\chips\c200s\configs\F1C200s\sys_config.fex 二、文件内容 三、介绍 在此处可以修改屏幕的频率&#xff0c;当前为21MHz。 四、总结 注意选择对应的屏幕的参数&#xff0c;sdk所支持的屏幕信息都在此文件夹中…

嵌入式C++、STM32、Flask框架、SQL、ROS系统和MQTT协议通讯:智能药盒及物联网数据监测设计思路(代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. 开发环境 2. STM32 微控制器代码示例 3. ROS 节点代码示例 4. 后端服务器代码示例&#xff08;Flask&#xff09; 数据库部分 3.4 删除药物记录 项目概述 随着老龄化社会的加剧&#xff0c;患者…

钢琴模拟器

文章目录 钢琴模拟器代码结构HTML结构CSS样式JavaScript功能 源码效果图 钢琴模拟器 代码结构 HTML结构 <html>: HTML文档的根元素。 <head>: 包含文档的元数据。 <base>: 指定相对URL的基准。 <title>: 指定页面的标题。 <style>: 包含嵌入的…

关于用log提高排查问题的设置

今天在了解项目业务的时候&#xff0c;想搞清楚执行顺序&#xff0c;加了很多打印&#xff0c;类似console.log(1111,xxxx) console.log(2222,xxxx)&#xff0c;有时候断点没开sourcemap不是源码所以我更喜欢打印&#xff0c;然后就导致打印比较紊乱&#xff0c;而且前面的1111…

sql截取时间数据方法函数之截取时间的年月

sql截取时间数据方法函数之截取时间的年月 方法一&#xff1a;DATE_FORMAT() 函数 select trans_date,date_format(trans_date,%Y-%m) month from Transactions;方法二&#xff1a;left(str, length)函数 #从左边开始截取 select trans_date,left(trans_date, 7) month fro…

中国高新科技杂志中国高新科技杂志社中国高新科技编辑部2024年第10期目录

科研达人 互联网领域资深工程师陈晔 技术引领 创新赋能 以IT技术推动行业转型升级 宋丽君; 5-6 中国科学院过程工程研究所副研究员武春晓 助跑科研“马拉松”共圆创新中国梦 周玮 ;杨烁; 7-8 中国科学院大学资源与环境学院副教授蔡晓琳 生物治理重金属 土壤焕发新生…

「安当产品应用案例100集」004-国密UKEY增强软件授权安全

国密UKEY在软件授权方案中的应用主要体现在增强软件授权的安全性、实现更严格的访问控制以及满足特定行业或领域的安全要求等方面。以下是安当的客户在软件授权方面的应用案例概述。 一、安当UKEY软件授权案例 国密UKEY&#xff0c;即采用国家密码管理局认证的密码算法的USB安全…

Spring源码解析(25)之AOP的BeanDefinitiion准备

一、AOP代码准备 aop.xml文件准备&#xff0c;代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…