• 学习笔记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<默认

    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 map = Map.of()
    • 可变的Map集合: Map map = new HashMap<>();
      • map.put的时候如果没有就新增
      • 如果已经有了那么就是修改
      • map.remove (key)
      • map.get(key): 根据key查询value
      • 遍历:for(map.Entry 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

  • 相关阅读:
    06.论Redis持久化的几种方式
    【Rust日报】2022-11-26 yew发布0.20
    数据结构(四) -- 递归
    Vite 与 Vue Cli 对比 - 尤雨溪: Vite 会取代 vue-cli 吗?
    李彦宏:已有10%的大搜流量通过文心一言模型生成;谷歌云误删账户、数据丢失导致客户业务瘫痪 7 天 | 极客头条
    《持续交付:发布可靠软件的系统方法》- 读书笔记(十三)
    567.字符串中的排列
    共谋工业3D视觉发展,深眸科技以自研解决方案拓宽场景应用边界
    【操作系统】BIOS开机自检
    【Nginx23】Nginx学习:响应头与Map变量操作
  • 原文地址:https://blog.csdn.net/CZY925323/article/details/133920005