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

news2024/11/15 17:32:27

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.coloradmin.cn/o/1110976.html

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

相关文章

Babylonjs学习笔记(二)——创建基本材质

书接上回&#xff0c;这里讨论给网格添加材质&#xff01;&#xff01;&#xff01; 准备好材质 1、创建材质球 /*** 创建网格材质* param scene 场景对象* returns 材质对象*/ const createGroundMaterial(scene:Scene):StandardMaterial>{const texArray:Texture[] []// …

计网----数据包在传输中的变化过程,单播组播和广播,APR协议,APR代理,免费ARP,DNS协议,路由数据转发过程

计网----数据包在传输中的变化过程&#xff0c;单播组播和广播&#xff0c;APR协议&#xff0c;APR代理&#xff0c;免费ARP&#xff0c;DNS协议&#xff0c;路由数据转发过程 一.数据包在传输中的变化过程&#xff08;在同一个路由器下&#xff09; 1.传输数据时&#xff0c…

《SQLi-Labs》04. Less 23~28a

title: 《SQLi-Labs》04. Less 23~28a date: 2023-10-19 19:37:40 updated: 2023-10-19 19:38:40 categories: WriteUp&#xff1a;Security-Lab excerpt: 联合注入&#xff0c;注释符过滤绕过之构造闭合&#xff0c;%00 截断、二次注入、报错注入&#xff0c;空格过滤绕过&…

蓝牙助听模块场景分析之一

蓝牙助听模块场景分析之一 使用经典蓝牙助听&#xff0c;低成本&#xff0c;cVc降噪&#xff0c;支持蓝牙音频。 利用高通cVc算法&#xff0c;本地麦克风&#xff08;支持单麦和双麦&#xff09;声音输入到高通QCC芯片&#xff0c;然后QCC芯片DSP&#xff08;cVc算法&#xf…

第十五章总结

一.输入/输出流 1.输入流 InputStrema类是字节输入流的抽象类&#xff0c;它是所有字节输入流的父类。 该类中所有方法遇到错误都会引发IOException异常。 read()方法&#xff1a;从输入流中读取数据的下一个字节。返回0~255的int字节值。如果因为已经到达流末尾而没…

开源智能体来啦!港大团队发布OpenAgents,可以搞数据分析、聊天、支持200+插件

夕小瑶科技说 原创 作者 | 智商掉了一地、ZenMoore 港大的研究团队最近发布了一个新的开源 Agent 框架&#xff0c;名为 OpenAgents. 它可以用于实际用户场景&#xff0c;特别是在使用自然语言执行复杂任务的情况下。先前的语言智能体框架主要关注概念验证或者供开发人员使用&…

6个无版权、免费、高清图片素材库

找免费无版权图片素材&#xff0c;就上这6个网站&#xff0c;超高质量&#xff0c;可商用&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要为新手设计师提供免费素材&#xff0c;这些素材的质量都很高&#xff0c;类别也…

如何让你的Node.js应用程序处理数百万的API请求

目录 一、了解 Node.JS 和 API 请求 二、优化 NodeJS 以实现高性能 1.使用异步操作 2.实现缓存 3.优化数据库查询 4.负载平衡 5.水平扩展 三、测试和监控性能 1.负载测试 2.应用程序性能监控(APM) 四、结论 一、了解 Node.JS 和 API 请求 在我们深入研究这些技术之…

【C语言基础】结构体中内嵌联合体|联合体中内嵌结构体

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

【算法|动态规划No.22】leetcode115. 不同的子序列

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

jmeter接口自动化测试

前面我们复习了jmeter 的非图形化界面运行我们的测试接口。 大家可以翻看往期jmeter的文章。 具体来说就是&#xff1a;jmeter -n -t ****.jmx -l ****.jtl -e -o **** (*号代表路径&#xff09; 生成了测试报告。 但是这个非图形化运行有个缺点&#xff0c;就是只能运…

Pygame中实现图片的移动

在《Pygame中将鼠标形状设置为图片2-1》和《Pygame中将鼠标形状设置为图片2-2》中提到将鼠标设置为指定图片。接下来在该文章涉及到的代码基础之上&#xff0c;实现图片的移动&#xff0c;效果如图1所示。 图1 图片移动效果 从图1中可以看出&#xff0c;导入一个大猩猩的图片&…

DailyPractice.2023.10.19

文章目录 1. 24. 两两交换链表中的节点2. 23. 合并 K 个升序链表3.148. 排序链表4.236. 二叉树的最近公共祖先5.78. 子集6.138. 随机链表的复制7.25. K 个一组翻转链表 1. 24. 两两交换链表中的节点 24. 两两交换链表中的节点 /*** Definition for singly-linked list.* stru…

扫描全能王文档矫正逆向记录

背景 扫描全能王有个功能是将弯曲的文本拉直成平直的文本。在扫描全能王的app上&#xff0c;这个功能的入口在拍书籍的tab。同时在图片编辑页面&#xff0c;也有个按钮可以触发这个功能。它的效果大概如下。 这篇文章主要介绍如何逆向这个算法 初步定位 对扫描王apk初步逆向…

【软考-中级】系统集成项目管理工程师 【15 信息 (文档) 和配置管理】

持续更新。。。。。。。。。。。。。。。 【第十五章】信息&#xff08;文档&#xff09;和配置管理 知识精讲考点 1:软件文档一般分为三类:开发文档、产品文档、管理文档。考点 2:文档的质量可以分为四级:考点 3:配置管考点 4:考点 5:考点6:考点 7:配置项版本号:考点 8:考点9…

[BUUCTF newstar week2] crypto/pwn/reverse

难度上来了&#xff0c;而且比赛加多了&#xff0c;newStar/0xGame/SHCTF&#xff0c;moe也结束了&#xff0c;周末还有TCP1P&#xff0c;来不及写东西了。抓时间先一个个来吧。 crypto 滴啤 就是dp的意思&#xff0c;也就是泄露dp求分解 from Crypto.Util.number import *…

汽车标定的ASAM MCD-1 POD

1.导语 ​做汽车标定slave基础软件以及做参数标定的同学&#xff0c;对ASAM MCD-2-MC(ASAP2&#xff0c;人话A2L文件)、ASAM MCD-1-XCP&#xff08;人话xcp协议&#xff09;一定非常熟悉。 常见的标定套件也是由很熟悉的供应商提供&#xff0c;例如ETAS的INCAES500系列产品、…

Hadoop3教程(二十三):Yarn的三大调度器

文章目录 &#xff08;129&#xff09;FIFO调度器&#xff08;130&#xff09;容量调度器特点资源分配算法 &#xff08;131&#xff09;公平调度器特点缺额的定义队列资源分配方式基于FIFO策略基于Fair策略资源分配算法 DRF策略 参考文献 &#xff08;129&#xff09;FIFO调度…

R6G azide, 5-isomer具有良好的水溶性,2135330-71-9

试剂 | 基础知识概述&#xff08;部分&#xff09;: 英文名称&#xff1a;R6G azide, 5-isomer CAS&#xff1a;2135330-71-9 分子式&#xff1a;C30H32N6O4 分子量&#xff1a;540.61 规格标准&#xff1a;10mg&#xff0c;25mg&#xff0c;50mg&#xff0c;可提供mg级以…

C1N短网址 | 核心专利(1) - 基于随机字符实现的网址缩短

1.短链接介绍 举个例子&#xff0c;现在我的博客地址是这个&#xff1a;https://blog.csdn.net/liwei128/article/details/91358071 (55个字符)&#xff0c;我通过短链接服务可以将上面的地址转成http://m.c1n.cn (15个字符) 那我为什么要将原有的URL转成较短的链接呢&#x…