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

本文介绍了SSM架构的基础概念,涉及HTTP请求处理、SpringBoot的内嵌Tomcat和数据处理,Maven的依赖管理,Java对象和类型系统,以及多态、封装、Javabean和MyBatis的数据库操作。还涵盖了异常处理和Spring框架中的依赖注入。
摘要由CSDN通过智能技术生成

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

网站: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值