学习笔记1——SSM的基础知识

学习笔记系列开头会发一些寻亲消息

网站:https://baobeihuijia.com/bbhj/contents/3/195510.html
在这里插入图片描述

SSM的基础知识

cs架构:多个客户端可以访问一台服务器

  • 请求:协议://主机[: 端口][/路径][?查询参数]
    • http就是一种协议,https是一种带加密的协议更加安全一点
    • 主机:localhost
    • 端口号:因为tomcat和mysql都是网络应用,会占据端口,如何区分是使用该服务器的哪个应用?tomcat是8080,mysql是3306
    • 路径就是指定使用该项应用的什么功能add
    • 查询参数 问号开头,多个参数&连接

springboot 内嵌了tomcat,并提供了方便处理cs架构中的输入和输出的类

  • maven可以帮助我们下载和管理第三方jar包,需要将下载地址修改为国内的地址,可以通过加mirror加速
  • 新加入的模块需要将pom文件添加为maven项目,才能正常使用
  • 三种
    • new String[2]
    • new String[]{}
    • {}
  • 用maven下的package进行打包,打包完成后在命令行用java -jar xxx就可以运行
  • @Controller
  • @RequestMapping
  • @ResponseBody
  • @SpringBootApplication

类和对象

  • 如果没有赋值的话,java会给出默认值

    • byte,short,int,long,char 默认0
    • float,double 默认0.0
    • boolean 默认false
    • 其余默认为null
  • 可以通过构造函数参数不同进行不同的初始化构造,无参构造在没有别的构造时可以省略

  • 当多个对象具有相同的元素,使用static,并且使用类名来调用,静态对象和静态方法不从属于任何对象,方法内使用的信息全部来自于参数

  • final的意思是这个变量只能赋值一次

  • 变量类型:

    • static:从类被虚拟机加载开始,static变量就一直存在能用
    • 参数变量
    • 局部变量
    • 成员变量
  • 继承:减少字段的定义和方法的重写

数据类型:

  • 基本类型:byte,short,int,long,float,double,char,boolean

  • 引用类型:对象,数组,String,包装类型(Byte,Character, Integer)

    • 包装类型:有成员变量和方法
    • null:nullpointexception空指针异常
  • 数据类型转换:

    • 1、基本类型

      • boolean不可以和其他转化

      • 在这里插入图片描述

      • 顺箭头java自动转换,逆着箭头需要进行强制转换(可能损失精度)

    • 2、包装和基本类型的转换

      • 包装类型和对应的基础类型可以直接转换
    • 3、对象类型的转换

      • java中的继承只能是单继承

      • object是类的顶层父类,隐式继承

      • 在这里插入图片描述

      • 对象类型之间的向上转型:a is a b, now a transfer b 隐式转换:Animal a = new cat() :对象还是new的对象,只不过用父类型来代表。无法调用子类型的变量

      • 对象类型之间的向下转型:由animal转化为cat时需要强制转换,Cat a = (Cat) a;是可以的, Dog d = (Dog) a: a还是指一只猫,猫 not is a 狗 ;Object b = new Cat; Animal g = (Animal) b是可以的,因为b实际指一只猫,猫 is a animal,所以正确【总结:逆着转化需要真正代表的对象和目标对象符合is a的关系】

      • 向上转型可以使用同一的类型来表示子类型,比如在处理数组和传参参数的时候,而向下转型可以再还原回来

        • a,getClass()获得代表对象的真实类型
        • 对象a instanceof 类型:判断对象是否是一个xx类型,判断真实类型是否与类型满足is a的关系
    • 4、不属于以上三种的类型转化

      • String a = “1”; Integer.parseInt (a) + Integer.parseInt (b)

多态

  • 同一个方法表现出了不同的行为,那么此方法具有多态性 poly morphism(多种形态)

  • Animal[] animals = getAnimals()

  • animals[i].say()

  • 虽然表面上都是animals类型的say方法,但是在say的时候会去找对应的真正对象

  • 能够产生多态的情况;

    1、用父类型来代表子类型,用一个父类型统一操作子类对象

    2、方法重写:子类和父类都有相同的方法say,父类一定要有,不然调用就会报错,子类如果有的话就调用子类的

    • 同名,参数,和返回对象也要一致
    • 注解:override 编译器帮忙检查该方法重写规则是否满足、
  • 在这里插入图片描述

    • 先看对象的真正类型

    • 优先执行真正类型中的重写方法

    • 没有重写就执行父类的方法

    • ctri+o对方法进行重写

  • 多态的好处:加新方法的时候,对原有代码的改动非常小

封装:(对外隐藏实现细节)

  • 为了保护成员变量不被外界恶意修改,可以将成员变量变为私有的

  • 四种访问修饰符

    • public:谁都能使用
    • protected(不能加在类上):同包类可以使用,子类即使是跨包的但是也可以使用(这就要求原始父类的修饰类型为public,否则按照默认的访问修饰符是不可以访问的)
    • 没有标识默认访问修饰符:只有同包类才能使用
    • private(不能加在类上):只有本类可以使用
  • 使用原则:尽可能让访问范围更小:private<默认<protected<public; 字段想让子类使用的话就是用protected

javabean

  • javabean是一种写java的规范

    • 字段私有,可以通过公共的方法来访问私有字段 get set is
    • 最好提供无参构造
    • 最好实现一个接口 Serializable
  • javabean中一般只封装数据,除了getset没有别的复杂逻辑方法

  • 行话:有getName/setName方法,Teacher这个javabean有name属性,有字段不一定有属性!

接口——解决单继承

  • 一个类可以实现多个接口

  • 接口:

    • 放入接口的方式必须加上default
    • default只能用public修饰,可以省略
    • 接口中的方法可以直接给出实现方式,类implement后也具有了这种实现方式
  • 接口多态:

    • 用父类代表子类对象/用接口类型代表实现类对象
    • 子类要重用父类方法,必须发生方法的重写
    • 子类或者实现类的访问修饰符必须大于父类和接口的访问修饰符
  • 抽象方法:只有方法声明,没有方法体

    • 用abstract修饰,必须是public,abstract和public都可以省略
    • public abstract void e();
    • 实现类必须重写接口中的抽象方法
  • 封装

    • 接口对象可以代表实现类,但是只能拿到接口中有的成员方法,不能访问其他
  • 在同一个文件下的限制:

    • 多个接口和类中只能有一个是public
    • public的这个类或者接口必须与java的原文件同名
  • 真正实现的时候,很少用父子类来进行代码复用,而会使用接口来减少代码复用,并且会单独用javabean存数据,用service存储方法,实现数据和逻辑的分离

可以用Spring框架来代替new创建对象 @ Service

  • 控制反转:Inversion of Control对象的创建权转移到Spring框架
  • @Controller和@Service和JavaBean的创建都是交给spring来创建对象的
  • 怎么拿到创建的sevrice对象呢?
    • 依赖注入:通过框架来找依赖对象
    • @Autowired 根据类型到Spring这儿找对象
    • 因为创建的对象都可以转化为CalculatorService,所以这句话加了Autowired就会将Spring中产生的三个service对象放到数组中,产生的controller对象不会放入,而三个service对象的放置顺序与名字中标识的012有关
  • 怎么创建javabean对象(一般是在控制器处理请求的时候,会将传入的参数根据一定的规则创建javabean对象)
    • 优先调用JavaBean的无参构造,根据传入数据的标识符和set进行匹配,p寻找setP,m寻找setM等,没有对应接受的值还是需要通过reponsebody进行传参
    • 没有无参构造嘞?spring会执行new Calculator(double p. int m, double yr),传入参数会寻找有没有p,m,yr等,有的话就传进去构造bean
    • 传入的顺序和接受的顺序没有要求,但是名字一定要相同
  • 如果是接口的话spring可以直接帮忙创建实现类

ArrayList,数组的容量是固定的

  • 如果想要打印数组元素,不需要循环,而是用 Arrays.toString (arr0) 将数组转化为String再打印
  • ArrayList扩容
    • new ArrayList( 初始容量) // 默认为10
    • list.add()
    • 内部封装了扩容,每次会比原来大1.5倍,向下取整
    • ArrayList的本质就是object数组,可以放置任意类型的对象
    • 可以用直接list.toString或者增强for循环的方式进行遍历
  • 泛型ArrayList 只能指引用类型
    • ArrayList list = new ArrayList();
    • 泛型限制了LIST中可以放入的类型
  • List是ArrayList的父类,如果只有两个元素那么类型为List12,超过两个元素类型为ListN, 其中List12和ListN是不可变的list,通常用List.of()初始化
  • 可以组合使用,list.addAll(别的类型)
  • 在这里插入图片描述

Map映射

  • key-value (键值对:entry)
  • key要唯一
  • Map声明的时候两个泛型分别限制key和value
  • 不可变的Map集合:Map<String,String> map = Map.of()
  • 可变的Map集合: Map<String,String> map = new HashMap<>();
    • map.put的时候如果没有就新增
    • 如果已经有了那么就是修改
    • map.remove (key)
    • map.get(key): 根据key查询value
    • 遍历:for(map.Entry<Strign,String> e : map.entrySet())
    • e.getKey e.getValue

异常

  • 在这里插入图片描述

  • try-catch: 没有异常就照常执行,有异常的话可以通过执行catch语句处理异常

  • catch获取异常对象,让程序恢复正常流程

  • 抛出异常是将异常对象交给了方法的上一层(Spring会自动向上抛出)

    • 如果上一层的方法能够捕获异常,那就catch到了,就开始执行catch中的代码然后继续执行catch后的语句
    • 否则的话就继续往上一层抛出,直到main的上一层java虚拟机,就说明无法处理,程序结束

-在这里插入图片描述

  • 在这里插入图片描述

在这里插入图片描述

  • 异常分为两大类

    • 运行时异常(红圈圈住的):自动交给上一层处理,不需要加说明
    • 编译异常:自己处理异常/交给方法的上一层处理异常 throws Exception 需要显式说明
  • finally:无论是否出现异常都会执行finally 记得close关闭资源

    在这里插入图片描述

MyBatis是将javabean和sql中用到的数据转换更加容易,连接数据库的步骤

  • 加入mybatis和mysql依赖
  • 加入recources下的application.properties
  • 写javabean,类名对应表名,类名的字段对应表中字段
  • StudentMapper类,要加Mapper注解,表明这是专用于数据库增删改查的接口(不需要写实现类,这里的实现不是由service和autowried实现的,而是mybatis和spring来实现的) @Select、@Insert 、@Update、@Delete

controller调用service,service调用mapper

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B-tree(PostgreSQL 14 Internals翻译版)

概览 B树(作为B树访问方法实现)是一种数据结构&#xff0c;它使您能够通过从树的根向下查找树的叶节点中所需的元素。为了明确地标识搜索路径&#xff0c;必须对所有树元素进行排序。B树是为有序数据类型设计的&#xff0c;这些数据类型的值可以进行比较和排序。 下面的机场代…

蓝桥杯每日一题2023.10.20

题目描述 等差数列 - 蓝桥云课 (lanqiao.cn) 知识点&#xff1a; 排序找出最大公约数则为公差 项数: n (第n项值-首项) / 公差 1。 n (an-a1) / d1 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; int a[N], n; int gcd…

RabbitMQ中的核心概念和交换机类型

目录 一、RabbitMQ相关概念二、Exchange类型三、RabbitMQ概念模型总结 一、RabbitMQ相关概念 Producer&#xff1a;生产者&#xff0c;就是投递消息的一方。生产者创建消息&#xff0c;然后发布到RabbitMQ中。消息一般可以包含两个部分&#xff1a;消息体和附加消息。 消息体…

openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数

文章目录 openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数102.1 背景信息102.2 操作步骤 openGauss学习笔记-102 openGauss 数据库管理-管理数据库安全-客户端接入之查看数据库连接数 102.1 背景信息 当用户连接数达到上限后&#…

蓝桥每日一题(day 4: 蓝桥592.门牌制作)--模拟--easy

#include <iostream> using namespace std; int main() {int res 0;for(int i 1; i < 2021; i ){int b i;while(b){if (b % 10 2) res ;b / 10;}}cout << res; return 0; }

【UCAS自然语言处理作业一】利用BeautifulSoup爬取中英文数据,计算熵,验证齐夫定律

文章目录 前言中文数据爬取爬取界面爬取代码 数据清洗数据分析实验结果 英文数据爬取爬取界面动态爬取 数据清洗数据分析实验结果 结论 前言 本文分别针对中文&#xff0c;英文语料进行爬虫&#xff0c;并在两种语言上计算其对应的熵&#xff0c;验证齐夫定律github: ShiyuNee…

zzy-project-cli,提供多个框架的脚手架

npm地址 install npm install zzy-project-cli -g做什么&#xff1f; 将多个可选的框架提供给使用者选择&#xff0c;选中后自动下载对应模板&#xff0c;快捷使用。 使用 step1 zzy-cli create [项目名称]step2 获取模板之后选取任一进行下载 下载完成之后即可使用 模…

图像超分辨率超分辨率NeRF论文阅读

文章目录 前置知识图像超分辨率《High-resolution image reconstruction with latent diffusion models from human brain activity》【CVPR23】《Dynamic High-Pass Filtering and Multi-Spectral Attention for Image Super-Resolution》【ICCV21】《DiffBIR: Towards Blind …

Tomcat启动控制台乱码问题

修改Tomcat/conf/logging.properties

Microsoft Edge中使用开源的ChatGPT

一、双击打开浏览器 找到&#xff1a;扩展&#xff0c;打开 二、打开Microsoft Edge加载项 三、Move tab新标签 获取免费ChatGPT 四、启用Move tab。启用ChatGPT。 扩展 管理扩展 启用 五、新建标签页&#xff0c;使用GPT 六、使用举例 提问 GPT回复

【JavaEE初阶】 线程池详解与实现

文章目录 &#x1f334;线程池的概念&#x1f384;标准库中的线程池&#x1f340;ThreadPoolExecutor 类&#x1f6a9;corePoolSize与maximumPoolSize&#x1f6a9;keepAliveTime&#x1f6a9;ThreadFactory&#x1f6a9;workQueue&#x1f6a9;RejectedExecutionHandler handl…

尝试使用jmeter-maven-plugin

前提准备 1、maven项目 2、已安装JMeter、Jenkins、maven、jdk 环境要求&#xff1a; jmeter>5.6.2 maven >3.9 jdk>1.8 Jenkins ? 备注&#xff1a;jmeter-maven-plugin 无需下载&#xff0c;可查阅相关地址&#xff1a;GitHub - jmeter-maven-plugin/jmete…