智能系统设计与开发

前言

期末复习笔记。黄色为重点,蓝色为课件问题

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配置的复杂性,步骤:

  1. 启用注解支持:在Spring配置类上使用@AnnotationConfigApplicationContext或在XML配置中启用注解扫描。
  2. 使用注解定义Bean:在类上使用@Component注解来声明一个Bean或者使用其他特定的注解如@Service, @Repository, @Controller等。
  3. 注入依赖使用@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 

@GetMapping

@PostMapping

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值