JavaEE期末复习(wust)

JavaEE复习

第一章 概述

什么是 MVC 开发模式?

MVC 模式是 Web 开发中最常用的分层开发模式,即模型-视图-控制器模式。

=========================================================================================================

模型 Model:

应用的实体类,用于在内存中暂时存储数据,并在数据变化时通知控制器。

=========================================================================================================

视图 View:

主要用来解析、处理、显示内容,并进行模板的渲染。

=================================================

控制器 Controller:

处理浏览器的请求,决定如何调用业务层的数据增、删、改、查等业务操作,以 及如何将结果返回给视图进行渲染。

=================================================

什么是 Maven?

Maven 是一种基于项目对象模型(POM),通过配置文件(pom.xml)来管理项目构建的一种软件项目管 理工具。

=================================================

什么是 Spring starter Spring Boot ?

为了简化配置,提供了非常多的 starter,它先打包好与常用模块相关的所有 jar 包, 并完成自动配置,这使得开发时不需要过多关注框架配置,只需关注业务逻辑即可。

=================================================

=================================================

新建三个SpringBoot时候三个starter组件的作用

Spring Boot Devtools 项:用于项目热部署

Spring Web 项:用于构建Web应用程序

Thymeleaf 项:网页模板引擎

=================================================

编程式注解

@SpringBootApplication 入口类 用 @SpringBootApplication 注解

@ResponseBody(可以写在类、方法不用在参数上面)返回结果不会被解析为跳转路径,而是转为json格式数据

@RequestBody 用在参数上面

@Controller 如果需要返回到指定页面,则需要用@Controller 注解控制器类

@RequestMapping 注解用于配置 URL 映射 即确定请求所对应的处理方法

=================================================

MVC模式的基本体系结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NQUZz0Kq-1624193660392)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20210618110148213.png)]

=================================================

项目结构中的主要文件夹和功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMKjPVVs-1624193660394)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20210618111105826.png)]

第二章 Thymeleaf基本用法

什么是 Thymeleaf?

Thymeleaf 是一个服务器端 Java 模板引擎,适用于 Web 和独立环境,能够处理 HTML,XML, JavaScript,CSS 甚至纯文本等。Thymeleaf 主要目标是为开发工作流程带来优雅的自然模板。

=================================================### 常用表达式功能和基本用法

=================================================

=================================================

=================================================

常用标签

◼ th:action 指定表单提交地址

◼ th:value 给value属性赋值

th:text:文本标签,用于进行文本替换

th:object 获取对象

th:if 当条件为 true 则显示。

◼ th:unless 当条件为 false 则显示。

th:each 遍历集合

=================================================

第三章 Thymeleaf高级用法

布局页功能上的区别

布局页中用 th:fragment 定义模板片段, 其他页面用 th:insert 引用片段

=================================================

几个校验注解

@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内

@NotEmpty 被注释的字符串的必须非空

@NotBlank 被注释的字符串的必须非空

=================================================

第四章 SpringBoot控制层

参数传递方法

无注解获取参数

要求:HTTP 请求的参数名要和后台方法参数名一致,顺序无所谓

=================================================
使用 @RequestParam 获取参数

=================================================

使用 @PathVariable 获取参数

=================================================

@RequestBody 获 取 json : 必 须 POST 方 式 提 交 且 必 须 与 contentType= “application/json” 配合使用

@DateTimeFormat 获取格式化日期参数 一些系统中日期格式约定为 yyyy-MM-dd

=================================================

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JepdPY4f-1624193660395)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20210618165915818.png)]

=================================================

什么是 Filter Filter ?

即过滤器,它是 Servlet 技术中最实用的技术,Web 开发人员通过 Filter 技术,对 web 服 务器管理的所有 web 资源等进行拦截,从而实现一些特殊的功能。

=================================================

什么是 Interceptor?

Interceptor 即拦截器,它提供了一种机制可以使开发者在一个 Action 执行的前后执行一段代码, 也可以在一个 Action 执行前阻止其执行。基于 Java 的反射机制,是 AOP 的一种运用。

=================================================

过滤器与拦截器的区别:

① 拦截器是基于 java 反射机制来实现的,而过滤器是基于函数回调来实现的。

② 拦截器不依赖 servlet 容器,过滤器依赖于 servlet 容器。

③ 拦截器只对 Action 起作用,过滤器可以对所有请求起作用。

④ 拦截器可以访问 Action 上下文和值栈中的对象,过滤器不能。

⑤ 在 Action 的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时调用一次。

=================================================

什么是 session?

session 是一种记录服务器和客户端会话状态的机制。主要用来存储所有访问过该服务器的客户端的 用户信息,从而实现保持用户会话状态。

=================================================

什么是 token?

token 是服务端生成的一串字符串,作为客户端进行请求的一个令牌。当第一次登录后,服务器生成 一个 token 便将其返回给客户端,以后客户端只需带上这个 token 前来请求数据即可,无需再次带上 用户名和密码。

=================================================

拦截器Intercepter

定义Intercepter

基本框架

=================================================
拦截器配置类!注解@Configuration 表明是一个配置类

=================================================
定义获取session****(两种形式)****

=================================================

=================================================

第五章 JPA技术基础

什么是 ORM?

=================================================

什么是 JPA?

JPA (Java Persistence API) 是一种 Java 持久化 API,用于对象的持久化,是一种非常强大的 ORM 解决方案。JPA 通过简单约定好接口方法的规则自动生成相应的 JPQL 语句,然后映射成 POJO 对象。

=================================================

实体类的一些常用注解

@Entity声明类为实体类,不能掉! 指定当前类是实体类,对应数据库中的一个表。
@Id表示该属性作为表的主键 定当前字段是主键。
@Data(Lombok 插件)lombok注解
@GeneratedValue指定主键的生成方式。 属性:strategy 指定主键生成策略。 GenerationType.IDENTITY:自增,底层数据库必须支持自增(mysql)序列GenerationType.SEQUENCE:底层数据库必须支持序列(oracle) GenerationType.TABLE:JPA提供的一种策略,通过生成一张表的方式完成主键自增,这张表存储了下一次添加的主键的值 GenerationType.AUTO:由程序自动选择一种策略(默认)
@Column指定实体类属性和数据库表之间的对应关系。 nullable:是否可以为空 unique:是否唯一

控制器编程常用注解

@RestController@RestController注解相当于@ResponseBody + @Controller 无法解析jsp,HTML页面
@Controller如果需要返回到指定页面(jsp html等),则需要用@Controller 注解控制器类
@Autowired自动注入,即对象只需声明,不用new就能使用
@GetMapping是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping@RequestMapping(method = RequestMethod.POST)的缩写。

Repository 层常用 crud 方法

findAll() findById(id).get() getById() deleteById() delete() save()

第六章 JPA技术实践

如何理解 Entity 层、DAO 层、Service 层和 Controller 层?

=================================================
Entity 层:

实体层(也称为 pojo 层),也就是所谓的 Model,是数据库在项目中的类,该文件包含

实体类的属性和对应属性的 set、get 方法;

=================================================
DAO 层:

持久层,主要与数据库进行交互,如 CRUD 等操作。DAO 层会调用 Entity 层。

=================================================
Service 层:主要负责业务模块的逻辑应用设计。一般先设计接口,再创建实现该接口的类。service

层调用 DAO 层,接收 DAO 层返回的数据。

=================================================

Controller 层:控制层,负责具体的业务模块流程的控制。负责前后端交互,接受前端请求,调用Service 层,接收 Service 层返回的数据,最后返回具体的页面和数据到客户端。

=================================================

Repository 仓库、服务层接口和实现(要求基本的 CRUD 功能)

仓库

**服务层接口*
*

**服务层实现(基本CRUD方法)**

7 JPA 高级用法

=================================================

什么是 JPQL?

JPQL:全称 Java Persistence Query Language,是一种和 SQL 非常类似的对象查询语言,它最终会被编译成针对不同底层数据库的 SQL 查询,从而屏蔽不同数据库的差异。

补充:JPQL 支持的操作是:select、update、delete,不支持 insert

=================================================

1 对多,写出实体类,完成数据库表的自动映射

几个注解

@OneToMany写在 1 端 cascade =CascadeType.ALL 赋予级联的所有权限(慎用) fetch=FetchType.EAGER 在查询主对象时同时加载关联对象
@ManyToOne写在多端
@JsonIgnore该注解写在1的一方:解决json数据死循环
@Transactional****涉及删除、修改,需要加上
@Modifying****涉及删除、修改,需要加上
@Query查询常用注解

(识别 JPQL 写法和原生 SQL 写法的不同,注意参数占位符序号从 1 开始)

根据JPA命名规则定义的函数要能转化为对应的JPQL片段表示

KeywordSample对应的 JPQL 片段
AndfindByLastnameAndFirstname… where x.lastname = ?1 and x.firstname = ?2
NotfindByLastnameNot… where x.lastname <> ?1
IgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstame) = UPPER(?1)

编程题1

仓库Repository

public interface UserRepository extends JpaRepository<User, Long> {   User是实体模型  Long是主键类型
// JpaRepository 自动实现了很多内置的CURD方法
// 可直接调用而不用自己写代码,例如:
// List<T> findAll();
// Optional<T> findById(id);
// User save(user);
// void delete(user);
// void deleteById(id);
// long count();
// boolean existsById(id);
}



服务层接口

public interface UserService {      //名字自取
public List<User> getUserList();    //User是实体模型     getUserList() 根据实体类变换
public User findUserById(Long id);  //User也是实体模型   findUserById(Long id)   Long是主键类型    id 是主键名称
public void save(User user);        //User是实体模型名
public void edit(User user);        //User是实体模型名
public void delete(Long id);        //Long是主键类型,    id 是主键名称
}

接口的实现

@Service //声明类为服务实现类               //别忘了!!!

public class UserServiceImp implements UserService{
@Autowired       // 自动注入(不需要自己new对象)

private UserRepository userRepository;  //声明仓库以调用

@Override                              //方法的实现
public List<User> getUserList() {
return userRepository.findAll();       //直接调用Repository内置的CURD方法
}


@Override
public User findUserById(Long id) {
return userRepository.findById(id).get(); //直接调用Repository内置的CURD方法

}

@Override
public void save(User user) {
userRepository.save(user);              //直接调用Repository内置的CURD方法
}

@Override
public void edit(User user) {          //保存修改的对象
userRepository.save(user);             //直接调用Repository内置的CURD方法   //注意这里还是save()方法
}

@Override
public void delete(Long id) {
userRepository.deleteById(id);        //直接调用Repository内置的CURD方法
}
}

编程题2

1端

@Entity   //表明是实体类
@Data      //lombok插件
public class Category implements Serializable {   //序列化
@Id             //声明主键
@GeneratedValue(strategy = GenerationType.IDENTITY)   //自增模式
private Long id;               //  定义主键
private String name;            
@JsonIgnore                    //写在一端,防止json
@OneToMany(mappedBy="category", cascade = CascadeType.ALL, fetch = FetchType.EAGER)  
private List<Book> books = new ArrayList<Book>();           //把多端初始化一下
}

多端

@Entity                     //声明实体类
@Data                           //lombok插件
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })   //写在多端
public class Book implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@JoinColumn(name="category_id")        //属性映射的外键名,不写也是自动默认为category_id
@ManyToOne                            //写在多端(category属性负责维护外键)
private Category category;            //用一下一端
}
  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值