前言
期末复习笔记。黄色为重点,蓝色为课件问题
1.智能系统基础
概念:能产生人类行为的计算机系统
常见智能系统:
- 门禁系统、停车管理系统、智能客服、智能推荐系统
2.Maven
本质就是项目管理工具,将项目开发和管理过程抽象成项目对象模型。
1.核心功能
2.如何解决依赖冲突:手动解决,使用 <exclusions> 标签来排除不需要的某个特定的传递性依赖
3.jar包坐标什么组成:群组id、项目id、版本号
概念
仓库:集中存储jar包和插件,分为:本地、远程和中央仓库
坐标:引入依赖就这样从远程仓库中复制粘贴即可
核心功能
依赖管理和项目构建
依赖管理:
- 依赖配置:配置当前项目所需jar包,一个项目可设置多个依赖
- 依赖传递:依赖具有传递性。依赖的传递性是指当一个项目依赖了某个库(或称为“依赖项”)时,如果这个库又依赖了其他的库,那么这些被依赖的库也会被自动添加到项目的依赖中。
- 依赖冲突:路径优先:当依赖出现相同资源时,层级越深优先级越低。声明优先:资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
项目构建:生命周期、常用命令
生命周期
clean:用于清理项目,包括删除target目录生成的文件
default:核心工作:编译、测试、打包、部署
site:用于生成项目站点文档等内容
常用命令
扩展:模块划分、maven骨架
3.MyBatis
作用:数据库交互、SQL映射
javaweb三层架构,各有什么框架
- Web层:表现层,用于展示数据
- 业务层:用于处理业务需求
- 数据层:持久层,用于处理数据持久化
概念:基于java的持久层框架,内部封装了JDBC
ORM:对象关系映射,一种数据持久化技术,在对象模型和关系型数据库间建立起对应关系,可用javabean操作数据库表中数据。
MyBatis使用步骤
- 添加mybatis依赖
- 创建数据表
- 编写实体类
- 编写接口
- 编写映射文件
- 编写核心文件
- 编写测试类
核心代码
核心配置文件
事务的特性:事务:多个要做的操作组合成一个整体
- 原子性、一致性、持久性、隔离性
Mybatis加载映射文件的方式
- mapper
- resource
请求参数
传递多个参数方式
- 直接传递
- 使用注解传递
- 使用Map传递
- 使用JavaBean传递
#{}${}
映射返回结果
resultMap
动态SQL
概念:mybatis提供的一种功能,允许开发者根据不同的输入参数或条件动态生成SQL语句,避免了手动拼接SQL字符串的复杂性,能灵活处理查询、插入、更新
各标签使用场景:
- if:用于条件判断,当条件为真时执行内部的SQL语句。
- choose、when、otherwise:用于多条件分支选择,类似于Java中的switch语句
- trim、where、set:条件过滤
- foreach:用于遍历集合,常用于IN查询或者批量插入操作。
if标签
WHERE 1=1 作为一个始终为真的条件,可以作为条件语句的起始点。这样,在添加额外的条件时,只需要在它后面添加AND或OR,而不需要每次都写WHERE关键字。作用:
- 方便拼接:使用1=1后,无论是否添加额外条件,SQL语句都是有效的。
- 避免SQL注入
- 提高性能和可读性和维护性
缺陷:
where标签:用于多条件分支选择,类似于Java中的switch语句。
多表关联
表间关系:一对一、一对多、多对多
MyBatis查询使用的标签:
一对一查询:使用<association>标签在 <resultMap> 标签中定义结果映射,结合 <select> 标签进行查询。映射文件为:
asociation
一对多查询:使用 <collection> 标签在 <resultMap> 中定义集合属性,结合 <select> 标签进行查询。
collection
多对多查询:通常需要自定义SQL查询,然后在 <resultMap> 中使用 <collection> 标签嵌套另一个 <collection> 标签来处理。
延迟加载
概念:性能优化技术,旨在推迟对象加载,直到实际需要这些对象的时候可减少不必要的数据库访问,避免一次性加载所有关联数据,提高应用效率,适用于一对多,多对多的关联查询中
使用场景:
使用流程就是在映射文件中通过<collection>元素中设置fetchType='lazy',select还要引入id
缓存
什么是缓存?
概念:存于内存中的数据,第一次查询时把数据存储在内存中,下次再使用时不用再去数据库查询。减少和数据库的交互次数,提高执行效率,快速取出数据
应用场景?
一级缓存
只在同一个session中生效
二级缓存
使用:
- mybatis主文件中配置框架支持二级缓存(默认支持)
- 让当前的mapper映射文件支持二级缓存
- 测试
总结区别
4.单元测试&日志框架
Junit
概念:用于编写和运行自动化测试的开源java测试框架,用于单元测试,允许编写可重复执行的测试代码
优势:
- 测试代码、业务代码分离
- 自动化测试
- 每个单元用例相对独立
- 不影响其他测试方法
日志框架
日志系统
概念:
常见日志框架:
日志门面
概念:抽象层,用于将应用程序代码与底层日志系统分离开来,使得应用程序可以在不修改代码的情况下切换不同日志框架
日志级别
Spring
概念:简化java应用开发的框架,核心理念:控制反转IoC,依赖注入DI,降低代码耦合度,应用更灵活
优势
- 简化开发:IOC控制反转,AOP面向切片编程
- 框架整合:mybatis
核心功能
IOC
控制反转,spring的一个容器,不是技术而是思想,是基于面向对象编程知道如何构建松耦合、优性良的程序。控制反转的是对象的创建权。
耦合:程序间的依赖关系
解耦步骤:
- 利用反射创建对象,避免使用new关键字。因为new关键字是主动创建,应用与资源直接联系无法消除,独立很难。所以使用反射,由工厂控制资源为应用提供对象。
- 通过读取配置文件来获取要创建的对象的类名
IOC容器:为实现IOC思想而提供的容器,充当“外部”,其中存放的是一个个Bean对象 。
Bean对象:容器中存放的对象
AOP
概念:面向切面编程
作用:不改变原有代码的前提下实现功能增强
适用场景 :与业务无关却为业务模块共同调用的场景如日志记录、权限校验
相关术语重点:通知类型
使用aop步骤:后三个为核心
- 引入依赖、注册bean、定义切面、定义切点、定义通知
获取Bean对象
BeanFactory
ApplicationContext:子接口
区别
常用实现类
定义bean的方式
xml
步骤:创建xml配置文件,定义bean
- id:Beanid,唯一标识符。
- class:类全名
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myBean" class="com.example.MyBean">
<property name="property" value="value"/>
</bean>
</beans>
注解
减少了XML配置的复杂性,步骤:
- 启用注解支持:在Spring配置类上使用@AnnotationConfigApplicationContext或在XML配置中启用注解扫描。
- 使用注解定义Bean:在类上使用@Component注解来声明一个Bean,或者使用其他特定的注解如@Service, @Repository, @Controller等。
- 注入依赖:使用@Autowired注解自动依赖注入。
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;
@Component
public class MyBean {
private final Dependency dependency;
@Autowired
public MyBean(Dependency dependency) {
this.dependency = dependency;
}
// 类的其他部分
}
依赖注入(DI)方式
依赖注入:绑定对象和对象之间的依赖关系。即之前自己创建对象,但现在变为由外部(IOC容器)创建好后注入。
注解Autowired
xml配置
构造器:
- 修改类
- 配置applicationContent.xml文件
- 注册Bean
set方法:
bean作用范围
单例对象和多例对象
scope=“singleton”表默认的单例对象,一个应用只有一个对象的实例,作用范围就是整个引用。
scope=“prototype”表多例对象,每次访问对象时都重新创建实例
6种作用域:
singleton:单例
prototype:原型
request:请求
session:会话
application:应用
websocket:WebSocket
<!-- XML配置方式 -->
<bean id="mySingletonBean" class="com.example.MyBean" scope="singleton"/>
<bean id="myPrototypeBean" class="com.example.MyBean" scope="prototype"/>
<bean id="myRequestBean" class="com.example.MyBean" scope="request"/>
<bean id="mySessionBean" class="com.example.MyBean" scope="session"/>
<bean id="myApplicationBean" class="com.example.MyBean" scope="application"/>
// 注解方式
@Component
@Scope("singleton")
public class MySingletonBean {
// ...
}
常用注解
注解分4类:
- 用于创建对象的
- 注入数据的
- 改变作用范围的
- 和生命周期相关的
Bean类型注解
- @Autowired:自动注入依赖的Bean。可以用于构造函数、字段、Setter方法。
- @Component:放在类上,标识这个类是一个Bean。
- @Resource:
String和基本类型注解
以上注解只能注入其他bean类型注解,而String类型和基本类型不能实现,下面的才可以:
- @Value
- @Scope
生命周期注解
@PostConstruct:
在Bean创建后,初始化之前调用,用于执行初始化操作。
@PreDestroy:
在Bean销毁之前调用,用于执行清理操作。
@Configuration 注解用于定义配置类
@ComponentScan 注解用于自动扫描并注册带有特定注解的组件
SpringMVC
概念:基于java实现的web表现层框架,封装了监听器及工具类,减少重复代码。
如何直接回显数据?
- 使用ModelAndView对象:添加模型数据和指定视图名称。在控制器方法中返回ModelAndView对象,Spring MVC会将模型数据传递给视图,并渲染视图返回给客户端。
-
使用@ResponseBody注解:方法的返回值应该直接作为响应体写入HTTP响应中,而不是被解析为视图名称。
MVC模式
mvc概念
即model-view-controller,模型视图控制器的缩写,是用于创建表现层的模式
- model,代表存取的对象或POJO(Java对象),模型表数据或业务规则,主要作用:进行业务逻辑处理和数据封装
- view视图,即用户看到的界面,根据模型数据创建的。主要作用:进行页面展示,渲染。
- controller控制器,处理用户交互的部分,主要作用:处理程序逻辑,接受用户输入,再通过视图显示结果,对应servlet技术
三层架构
不等同于mvc模式,而是将应用划分为三层,高内聚低耦合的思想:
- 表现层UI
- 业务逻辑层BLL
- 数据访问层DAL
SpringMVC执行流程
执行流程
- http请求
- 寻找处理器
- 处理器映射器
- 处理器
- 调用模型处理业务
- 返回ModelAndView
- 处理器适配器将返回的ModelAndView返回给前端控制器
- 处理视图映射
- 视图解析器向前端控制器返回解析的view
- 将model数据放在view中渲染
- 响应视图
Controller控制定义流程
Controller是处理用户请求的入口,它负责接收请求、处理业务逻辑,并返回响应。
- 创建Controller类:@Controller注解标注,表示这是一个Controller类。
- 定义处理方法:使用@RequestMapping或其特定的HTTP方法注解(如@GetMapping、@PostMapping等)来映射URL到对应的处理方法。
- 接受请求参数:使用@RequestParam来接收URL查询参数或表单数据。使用@RequestBody来接收请求体中的数据,通常用于处理JSON或XML格式的数据。
- 业务逻辑处理:调用Service层的业务逻辑处理方法。
- 返回响应:直接返回视图名称,Spring将使用视图解析器来渲染视图并返回给客户端。
- 异常处理:使用@ExceptionHandler注解方法来处理Controller中抛出的异常。
- 请求数据校验:使用@Valid注解和JSR 303/JSR 380 Bean Validation API来校验请求数据。
- 拦截器使用:通过实现HandlerInterceptor接口或使用@Interceptor注解来定义拦截器,对请求进行前置和后置处理。
- 异步请求处理:使用@ResponseBody注解返回异步结果,
- 日志记录:Controller中添加日志记录,以便于调试和监控。
@Controller
public class MyController {
@GetMapping("/home")
public String home() {
return "home"; // 返回视图名称
}
@PostMapping("/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password) {
// 业务逻辑处理
return "loginSuccess"; // 返回视图名称
}
MyController类定义了2个方法,分别处理GET请求到/home、POST请求到/login。这些方法展示了如何返回视图名称、处理表单数据。
请求
@RequestParam
- 用于将Web请求中的参数(如查询参数或表单数据)绑定到Controller方法的参数上。
- 通常用于处理GET或POST请求中的简单数据类型参数。
@RequestBody
- 这个注解用于将HTTP请求的正文(body)部分绑定到Controller方法的参数上,通常用于处理POST请求中的数据。
- 它允许你直接将请求体中的JSON或XML数据转换为一个对象。
响应
请求转发&重定向
通过返回值中指定参数:
请求转发:也是默认的,没有参数forward时默认是请求转发。不只可以转发到jsp,其他控制器方法也可以
重定向:使用redirect
ModelAndView
SpringMVC中的一个重要类,用于控制器中处理请求时同时传递数据模型和视图信息,该类主要包括两部分:
- 模型数据model:通过addObject向视图传递数据
- 视图名称view:指定需要渲染的视图名,Spring根据配置找到对应的视图文件jsp和html
model接口只用于存储数据,不包含视图信息,通常和String返回值一起使用,控制器方法返回视图名称,Spring自动解析并渲染视图。
@ResponseBody
用于将Controller方法的返回值直接写入HTTP响应体中,而不是解析为JSP视图或其他类型的视图模板。
Model对象
视图解析器
用于将控制器中返回的逻辑视图名解析为具体的视图(View)的组件
InternalResourceViewResolver:这是最常用的视图解析器,它将逻辑视图名解析为Web应用的内部资源,通常是JSP页面。
- configureViewResolvers 方法用于注册视图解析器。
- jsp 方法的第一个参数是前缀路径,第二个参数是后缀。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
}
前端控制配置方式
前端控制器(Front Controller)通常指的是DispatcherServlet,它是Spring MVC的核心组件,负责处理所有的HTTP请求和响应。前端控制器的配置主要涉及到DispatcherServlet的配置和Spring MVC的配置。
-
web.xml配置
-
Java配置
web.xml配置方式:
<web-app>
<!-- 其他配置 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- <servlet-name>定义了DispatcherServlet的名称。
- <servlet-class>指定了DispatcherServlet的全类名。
- <init-param>中的<param-value>指定了Spring MVC配置文件的位置。
- <load-on-startup>指定了DispatcherServlet的加载顺序。
- <url-pattern>/</url-pattern>表示DispatcherServlet将处理所有的请求。
注解
@RequestMapping
其中RequestMethod方法为请求方式:GET、POST、DELTE、PUT\TRACE、HEAD、OPTIONS