零基础Java EE黑马笔记【 重点+说人话 +每节课ppt的总结】

0.前置学习课程为JavaWeb

(一共就一点点,2分钟就看完了,有基础可以直接略过,0基础还是花2分钟看下.先搭起来个知识框架,设计一些乱七八糟的层,不稍微看看没法学java ee):

一 web网站的开发模式

前端搭架子(样子),数据库往架子里填进去数据,后端是用来写逻辑的.

浏览器属于一个程序,能够解析前端代码和后端代码,将前/后端写好的代码解析后做出反应(比如搭架子/根据url访问java程序去找数据并填数据)

二 三层架构

原代码:(解耦性差,不遵循单一职责原则)

分层后(重要):

我个人的理解是类似于取快递的过程.

Controller层_听需求和相应需求,比如说告诉对方我要取快递/寄快递

Server层_给你提供相应服务,比如说为你取快递/寄快递/处理快递问题

Dao层_数据访问层,查快递,和数据库有关的

强烈建议这里去花十几分钟听一下!!!!!时间有限只听这一节就行(把前一节的案例听一下更好,便于理解,一共没几分钟),时间充裕建议直接听这套javaweb课程就完事了,我打算这几天考完期末ssm框架后来详细听听这个课:

Day05-09. 分层解耦-三层架构_哔哩哔哩_bilibili

总框架:

用SSM框架学习JavaEE

第一部分:Spring

一 概述

  • Spring的2个核心理念:

1.控制反转IoC——对Bean对象的管理

2.面向切面编程AoP——事务(指一系列数据库操作的集合)管理等功能

  • IoC和DI

IoC介绍:由主动 new对象 转化为 由外部(IoC容器 即Spring容器)提供对象,在容器中的对象称为Bean对象。

DI介绍(依赖注入):在容器内给bean和bean之间"绑关系"

  • 目标:充分解耦

使用IoC容器管理bean + 将容器内有依赖关系的bean绑关系 =====>>使用对象时,不仅可以直接从容器中获取,且bean已经绑定了所有依赖关系

二 IoC

0.包结构

(一)介绍:

由主动 new对象 转化为 由外部(IoC容器 即Spring容器)提供对象,在容器中的对象称为Bean对象。

(二)使用思路+具体步骤

1.管理什么?  --->Service和Dao

2.使用Spring导入哪些坐标(依赖)?----->在pom.xml中导入依赖

导入的依赖名是spring-context

3.如何将需要被管理的对象告诉容器?--->(即放入bean)配置.

创建spring的配置文件,并放入bean

a.在resources下创建名为applicationContext.xml的配置文件

b.配置bean的方法:这里下面有具体说

<bean id = "随便起" class = "要放入的对象的类型(实现类)">

4.如何获取和使用IoC容器?--->接口

在主程序入口类(名为App,与Dao层 Service层同级的,有主函数的类中):

a.先通过接口获取容器(接口不能创建对象,new一个接口的实现类才能创建):

ApplicationContext ctx = new classPathXmlApplicationContext("applicationContext.xml");

5.得到IoC容器后,如何拿出bean?---->接口方法(获取bean的方法)

b.再获取容器里的bean对象(用getBean("id")方法)

BookDao bookDao = (BookDao)ctx.get Bean("bookDao"); 

                                   //↑这里因为是object类型,所以需要强制转换一下类型

三 DI

(一)介绍

DI介绍(依赖注入):在容器内给bean和bean之间"绑关系"

(二)思路+具体步骤

1.基于IoC管理bean

2.Service中使用new形式创建的dao对象是否保留?--->否,删除右边

3.Service中需要的dao对象怎么进入到Service中>?---->提供方法

在Service实现类里提供创建Dao的方法

4.Service与dao之间的关系如何描述?----->配置关系

如何配置当前bean的属性?

<property name = "bookDao" ref = "bookDao"/>

//name 配置哪一个(前面类里的代码的属性的名称)具体的属性【也就是前面set方法的对象名setXxx(... Xxx)】

//ref参考着哪一个(要绑定依赖关系的bean)bean的id

Tip:插入一点Java基础复习

(只针对我自己这种几乎是0基础的java水平,会的不用看)

四 bean

(一)bean的配置

1.基础配置(在配置文件applicationContext.xml中)

id:唯一、通过id获取对应bean。

class:配置bean的全路径类名、bean的类型。

<beans>

        <bean id = "bookDao" class = "com.dao.impl,BookDaoImpl"/>

        <bean ..../>

</beans>

2.bean别名配置

用属性name表示

eg:

3.bean的作用范围:——控制bean创建实例的数量

一个bean造出来的对象,是不是同一个对象?

用scope属性控制,是同一个对象就用单例 (默认),不是就用非单例prototype

scope = "prototype"

多例eg:

(二)bean的实例化方法(三种----其实是四种,1和4重要)

  • 构造方法
  • 静态工厂
  • 实例工厂
  •      FactoryBean

1.法一【常用】:创建空参的构造方法(可以不写(默认有空参的),也可以写上)

具体实现:

小tip:如何看报错?从最下面(最核心)开始往上看起。一般解决了最后一个就行。

2.法二【了解即可】静态工厂

这需要前面的基础太,不会,也不咋重要,看看拉倒

3.法三【了解即可】使用实例 (非静态)工厂

4.法四:【后期常用】——FactoryBean,把法三改进了,造出来的是getObiect()方法里的对象

(三)bean的生命周期

介绍:bean从创建到销毁的过程

(三)Bean的注入方式(依赖注入的方式)

0.依赖注入的两种方式:

  • setter(属性)注入
  • 构造器注入(构造方法注入)

详细笔记:两种方式就相当于换个方法,一种是set一种是构造方法, 然后再进行相应的配置

(一)Setter注入

  • 引用类型
  • 简单类型

Setter注入---引用类型

1.提供set方法

2.配置中用property标签的ref属性注入 引用类型的对象

详细笔记:

Setter注入---简单类型

1.提供set方法

2.配置中用property标签的value属性注入 简单类型的数据

详细笔记:

(二)构造器注入

构造器注入的两种类型

  • 引用类型
  • 简单类型

引用类型

1.使用全参的构造方法

2.使用constructor-arg标签的ref属性

详细笔记::

简单类型

1.使用全参的构造方法

2.使用constructor-arg标签的value属性.配置时:name识别的是形参的名字

详细笔记:

了解即可的的内容:

①用name的方法,耦合性太强(形参名称问题)

②解决形参名称问题,用type属性(但不能有多个同类型的参数)

③解决参数类型重复的问题,用参数位置来解决问题,,用index属性(从0号开始)

详细笔记:

(三)依赖注入方式的选择

1.必须选的依赖,用构造器注入

2.可选可不选的依赖,用setter注入

3.去公司人家要严谨点,最好用构造器

4.[重要]自己开发用setter注入,这个好用!

详细:

(四)小结:

(四)自动装配(自动注入)

(一)分类

  • 按类型[常用]

aotuwire = "byType"

  • 按名称

aotuwire = "byName"

(二)步骤

1.提供一个set方法

2.在bean属性配置时,加个aotuwire属性

(三)装配特征

(五)集合注入

(一)类型

  • 数组
  • List
  • Set
  • Map
  • Properties

(二)具体操作

1.定义简单类型,并提供它们对应的set方法

2.装配:

[通用格式]

在装配时,用property标签 name = "方法名":

<类型名>决定了要注入啥类型

        <value>值</value>        //注简单类型:这里也很会根据不同类型使用不同的标签

</类型名>

(六)案例:数据源对象管理
[以后学精了在实际开发中再花时间研究]

管理一个第三方对象----重点是思路

eg1.连接池 druid的数据源对象

1.导依赖

去Maven网站找

2.配bean(看看用啥注入方式,这里用setter方法(找的) )

eg2.管一个c3p0的数据源对象

1.导依赖

2.配bean:搜一下它连接池的对象是谁之类的...

(七)加载外部properties文件

1.开启context命名的空间

2.使用context空间加载properties文件

3.把value的值改成属性占位符${去properties文件里找属性}读取 properties中的属性

详细笔记:

小坑:

1.和系统环境变量的名字冲突:

2.加载多个properties 文件(第一个*为也加载jar包中的properties;第二分*是加载你自己全部的properies文件)

详细笔记:

五 容器

(一)  容器

(一)创建容器 (2种)

[常用方式一]

见图1部分

详细:

(二)获取bean ( 3种 )

见上图2

详细:

(三)容器类层次结构图

(四)BeanFactory初始化

BeanFactory是所有容器的顶层接口

(二)容器/bean/依赖注入 总结

  • 容器相关
  • bean相关
  • 依赖注入相关

(一)容器相关

(二)bean相关

常用的也就没几个

(三)依赖注入相关

也就是setter(属性)注入重要一点

六 注解开发

0.框架

(一) 使用注解形式定义bean

(一)解释下是啥意思

把bean用注解的方式放入容器

@Component  相当于 <bean id = '啥啥啥" class="啥啥啥"/>这一大串

(二)使用步骤

1.把注解@Component直接写到对应的实现类那就完事了.想给它起名在括号里写上就行.@Componen()

2. 配置:写上你要扫描的包的路径,所有子包都会扫到

3.获取bean

详细:

(三)@component注解在不同层的不同形式

@component 等于 @Controller 等于 @Service 等于 @Repository

  • @Controller——表现层(Controller层)bean定义
  •  @Service——业务层(Service层)bean定义
  • @Repository——数据层(Dao)bean定义

详细:

(二)用java类代替配置文件

(一)介绍

用java类代替配置文件

(二)步骤

1.创建java类

包名:config---->类名:SpringConfig

2.在这个类里写上注解@Configuration 和 @ComponentScan("要扫的包的路径")

这俩注解相当于 一个是红色区域/一个是蓝色区域:

详细笔记:

数组演示:

3.加载配置类(而不是配置文件)

(三)用注解管理bean

  • bean的作用域
  • bean的生命周期

小结:

(四)用注解方法 进行依赖注入

(一)用 注解@Autowired(可以不用set方法,这个注解就相当于set方法了(不需要入口了,写不写都行))

详细:

(二)不同类型

注入类型为引用类型时:就如上,用@Autowired

注入类型为简单类型时:用@Value(“写值”),不用@Autowired注解了

详细笔记:

(三)properties文件加载

这样注入简单类型有助于使用外部文件,那如何把外部properties文件加载进来?

1.在配置文件中,用注解@propertySource(“文件名”)

tips:多个properties文件可以用数组{}加载,且不能用*

2.如何使用?

直接写值@Value(“¥{properties文件里的名字}”)

详细笔记:

(五)配置第三方bean

法一:初级版,但是不太好

1.定义一个方法 获得要管理的对象

2.把方法的返回值,当成bean

法二:常用——又新建一个配置类

1.新建java类

2.配置:

详细笔记:

(六)第三方bean依赖注入

当缺简单类型:

当缺引用类型:

(七)总结——XML配置对比注解配置


 

第二部分:MyBatis

一 MyBatis简介

(一)持久层 框架

框架类似于 没上色的石膏娃娃,是半成品

(二)JDBC缺点

(三)MyBatis简化

靠了,原来配置文件是这个作用,可以把代码写死,把要变动的信息写配置文件里

二 MyBatis快速入门

【案例】查询user表中所有数据

(一)思路:把user表的数据查出来,装到user对象里面去,再把这一个一个的对象装进集合里。

(学到这里我自己的感叹:尊嘟是万事开头难,一开始真是听的迷糊又不懂,但是学了这么久发现(从自己开始乱学到现在 一共学了15h)好像有点理解了,原来一点儿都不会的地方好像也稍微明白点了,最开始是硬看书,其实看不懂,但现在突然懂当时看的了,感觉很神奇很有成就感,也感觉知识也是越学越容易,越了解越好学一点。还有一点就是学一门课前应该硬着头皮先研究一下大概的框架和骨架,看不懂没事,后面细学的时候就明白了,而且先看一下总框架效率会更高点。)

(二)具体步骤

1.从外部复制user表

2.创建个Maven模块,导入坐标。

①只选个用Maven就行,别的不用动

②导入很多坐标:MyBatis的依赖、mysql的驱动、junit测试、logback日志坐标(这个比较多,而且还得再导入个配置文件 放resource里)

再导入这个才能用日志

3.写核心配置文件

①在resource文件下创建文件mybatis-config.xml文件

②可以从官网上复制这些代码,修改框起来的部分

第二个框那:mapper是映射文件的意思,写得是一会儿第4步写好的sql的映射文件的类路径(相对路径)

4.编写Sql的映射文件

①在resource文件下创建文件UserMapper.xml文件(xxxMapper.xml表示是xxx的映射文件)

②从官方文档里复制出来

id:sql语句的唯一标识

resultType:返回结果的类型(这里首先要先创建好这个类)

写sql语句

5.编码

在User类中:

①声明所有变量 (tip:超nb的小技巧:按alt+鼠标左键   可以实现整列编辑)

②写所有属性对应的getter和setter方法(alt + insert 选中所有属性)

③还得添加toString()方法(也是全选)

在测试类中

①创建测试类,并通过快捷键psvm生成Main方法

②编写代码

//1.也是从官方文档复制,然后改巴改巴

22行:把字符串传进来,返回一个字节输入流

23行:通过把流传进来,返回一个sqlSessionFactory对象

//3.括号里写得是("名称空间.sql语句的id")

(三)解决sql语句提示警告

1.问题:

原因:

解决方法:

2.idea连接上数据库后,可以直接在idea里实现很多数据库的操作(直接写sql)

好用,有很多提示信息

三 Mapper代理开发

(一)解释 原理

(二)使用步骤

1.定义与sql映射文件同名的Mapper接口,并且将Mapper接口和sql映射文件放在同一目录下.

①定义接口:一般会单独放一个包(且名字一样)

②让它们在同一个目录下:由于映射文件最好别和java类(接口)放一起,所以我们采用的办法是----->在resource目录下,创建与类一样的层次结构.注意!不能直接用xxx.xxx.xxx一次性新建多层次的包,得用/来创建多层次的包

③这里还要注意!!因为把sql映射文件的位置改了,也要记得在mybatis的配置文件里把sql映射文件的位置改过来!!

2.设置sql映射文件的namespace属性 为Mapper接口全限定名

3.在Mapper接口中,定义方法,方法名就是sql映射文件中sql语句的id,并保持参数类型和返回值的类型一致

根据图一

写出图二

4.编码

(1)通过SqlSession的getMapper方法  获取 Mapper接口的代理对象

(2)调用对应方法完成sql的执行

①先创建类

②也就是改了这两个地方

 分析一下整个流程:从自己编码的主函数类开始分析:

通过加载mybatis的配置文件,获取了SqlSessionFactory,又通过SqlSessionFactory获取了SqlSession对象,通过2的SqlSession对象,获取了xxxMapper接口的对象,从而可以找到它的接口类 和 接口类对应的sql映射文件了(因为接口类下有与接口类同名的映射文件,所以能找到),找到sql语句的映射文件就能读取文件中写好的sql语句(32行之前的编码就是为了找)丨,通过主函数的编码 调用了sql方法(也就是33行)--->转到了xxxmapper接口类下的方法---->(因为方法名=sql语句的id名)转到了sql映射文件中对应的sql语句,并执行sql语句下的操作,然后将返回值---->再返回给接口类接收.

完整展示一下用mapper代理的项目结构和各个类(只有上述分析的提到的类和文件):

用包扫描的方式 ,去加载映射文件,只需要这一行代码

四 mybatis核心的配置文件

详细的可以去官网查看,地址:mybatis.org

听求不懂,拉倒吧,以后边实践边学.(基本框架在前面都写了,0基础的菜狗先只掌握前面就完事了)

 environments:配置数据库述接环境信息。可以配置多environment,通过defaut属性切换不同的environment

五 用xml配置文件的方式 完成 增删改查(具体操作)

(一)环境配置 准备工作

(将sql语句写到配置文件中)

【案例】完成品牌数据的增删改查操作

1.数据库表

2.实体类(数据库的字段名称,要和实体类这里的名称对应上!!如果对应不上,就不能自动封装,但也能手动封装一下,方法见如下(法二重要))

在pojo包下,创建brand实体类

手动封装方法:

①(缺点多)起别名 缺点:每次查询都得从定义一次别名--->通过sql片段解决,但也有局限性,不灵活

②(常用)resultMap标签:id唯一标识,随便起 type:要和哪个类型映射

id:完成主键字段的映射

result:完成一般字段的映射

完整代码:

有注释版:

 

手动封装小总结:

3.测试用例

在test下创建包

4.安装mybatisx插件

点一下可以从sql映射文件直接跳转到对接口的方法类

下载好了,就素这个鸟!!!在方法那边,点alt+enter就能直接生成

(二)❤❤❤增删改查具体步骤

0.核心点,不管是什么项目,分析三件事

①.分析sql语句怎么写

(常见写法)

②.完成这个功能要不要参数

③.完成后要返回什么参数

【❤❤❤以下功能分别实现❤❤❤】

1.1【案例】 查所有

(1)先创建xxxmapper接口,写好方法

(2)写xxxMapper的映射文件,可以通过mybtisx插件alt+enter一键生成

(3)在MyBatisTest测试类中,编写测试用例(这里面的逻辑比较固定,就写第4步其实)

小总结:

1.2【案例】查看详情

(1)还是在BrandMapper接口类里编写方法

(2)还是在BrandMapper映射文件里编写sql语句(新知识为 参数占位符)

小总结:

(3)还是在MyBatisTest测试类中,编写测试用例(这个id=1不是!是个可接收的动态sql,这里只是先随便写一个运行)

1.3【案例】条件查询 (很常用,且三种情况)
1.3.1多条件查询

意思就是这三个条件同时查询

法一:散装参数@Param("名字")

(1)还是在BrandMapper接口类里编写方法

(2)还是在BrandMapper映射文件里编写sql语句(新知识为 参数占位符)

(3)还是在MyBatisTest测试类中,编写测试用例(这个id=1不是!是个可接收的动态sql,这里只是先随便写一个运行)

法二

(1)接口类

(2)sql映射文件不变

(3)测试类 (这些操作未来可以自动完成)

法三

(1)接口类

(2)sql映射文件不变

(3)测试类

多条件查询-参数接受-小结:

1.3.2查询-多条件-动态条件查询

1.解释:用户只根据某些条件进行查询,不会把三个都填上。

2.具体步骤: 改正sql语句(xml映射文件中 )

法一(if恒等式):白学

法二(if-where标签,这个标签很智能)常用

1.3.3 查询-单条件-动态单条件查询

1.解释:在下拉框中选一个要查的类型,再输入要查的东西.比如,选择:公司名称,搜索:华为

2.具体步骤

(1)写sql语句

(2)在测试类,调用方法+放开某个属性测试一下

2.添加

1.解释

3.修改

3.1修改全部字段

3.2修改动态字段

4.删除

0.

4.1删除一个

4.2批量删除

六 用注解方式 完成 增删改查

1.介绍:

简单情况用注解,负责情况用xml配置文件。其实说白了就是把原来写到xml配置文件中的sql语句删了,直接在xxxMapper接口类里加上对应sql语句的@注解(“sql语句”)就行。并且测试类也不用做任何改动。

2.具体步骤:

(1)删掉xml中的sql语句

(2)写注解

七 动态sql

第三部分:SpringMVC

一SpringMVC简介

(一)概述

SpringMVC是一种web层框架技术(用于做表现层开发)

(二)入门案例

1.基本思路(4步)

(1)导入依赖

(2)创建控制器类

(3)做专用于SpringMVC的配置类

(4)加载Tomcat服务器

详细解释(也就写一次,不咋重要):

2.具体实现

(0)准备环境-创建工程(还有点不太重要的,实际做的时候再去看下课吧)

(1)导入两个依赖(见1.基本思路)

(2)创建控制器类

(3)创建配置类

(4)加载Tomcat服务器

在pom.xml文件中把tomcat的插件加载上

(5)启动tomcat服务器,再运行程序,去网页访问自己的主机端口

3.小结:

4.入门案例工作流程分析

(三)Controller加载控制/bean加载控制(加速学了从这开始)

方法一: 

方法三:

总结:最后写法三的简化版就行

(四)postman工具介绍

可以用于测试网页(不用做测试页)

二请求与响应

0.框架

(一)设置 请求 映射路径

(二)请求参数

一 普通参数怎么传?

  • get请求
  • post请求

1.Get请求

2.post请求

拓展下,还能发文件和图表

2.1的乱码处理

3.当postman传的参和代码中的不同:用这个注释绑定关系

二 5种类型参数传递

1.普通参数(同上节4)

2.POJO类型参数

3.嵌套POJO类型参数(一个实体类中包含了另一个实体类--->一级一级传)

4.数组类型参数

5.集合类型参数

(三) Json数据 传递参数

1.导入Json坐标

2.在postman-rwa中传入json格式的数据,用get还是post无所谓

3.配置文件中 开启这个功能

4.参数前加个@RequestBody

涉及注释:

 

三种格式(上面是第一种):

(四) 日期型 参数传递

(五) 响应 @ResponseBody

0.

跳转页面(返回的是个页面,不是text文本,也不是json数据,所以不需要加响应体的注解,返回得是这两两种数据才需要加注解)

以下都一样

注释介绍:

用得是这个接口

三 REST风格

(一)RESTt简介

意思是 访问网络资源的形式

只有 查 和 删 才传

(二)RESTful入门案例

注释介绍:

接收参数的注释对比:

最终版※(三)REST快速开发

注解介绍:

(四)案例:基于RESTful页面数据交互

(一)基于页面,获取到REST风格的请求:

项目结构:

两个配置类:

mvc的配置类

实体类(为了封装数据):

Controller层的控制器类(真正需要写的类)

(二)用页面进行展示.

1.把页面文件导入工程

2.创建一个配置类,为了进行资源过滤(放行非mvc的请求 )

eg.写这些

在配置文件里加上要扫描它

3.将页面和Controller类绑定(在页面发起对后台的调用)

第四部分: SSM整合

(一)创建工程

(二)

所有总结:

零散的知识点:

@Date注解:  使用@Data注解后,Lombok会自动为User类生成对应的getter、setter、equals、hashCode和toString方法。

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值