JAVA EE 复习重点
题型:
- 选择题 15 道题,共30分
- 判断题 7 道题,共7分
- 填空题 4道题8个空,共8分
- 简答题 4道题,共20分
- 综合题:共2道题, 共35分
一、SSM 框架: Spring + Spirng MVC + MyBatis
- Spring: 容器管理
- Spring MVC :MVC 开发模式
- MyBatis : 持久层
- 常规的SSM 指是通过xml 方式来配置的,Spring Boot其实就是 基于自动配置,简化Spring 操作
二、重点
- ES6 部分:
- 用let 替代var 声明变量:a. 语法严谨;b.let 变量具有块级作用域。
- 解构数组用中括号,解构对象用大括号。
let arr = ["AA", "BB", "CC", "DD"]; let [first, second] = arr; //解构数组用[] let obj = {"name": "hkx", "age": 18}; let {name} = obj
- 面向对象
- 如何创建对象 和 java 一样,有class 关键字。
- 什么是Mybatis 呢
- Mybatis 是一种对象关系映射的持久层框架
- 目前流行的持久层框架有MyBatis 和 JPA
- MyBatis 简单理解,就是SQL 映射对象,最常用的注解或xml 标签和查询操作相关
- @Select 、@Insert、@Delete 、@Update、@ResultType、@Param
- 也可以通过xml 方式来实现:对应
- Mybatis 的核心就Mapper接口文件(Dao):
- 作用:定义SQL 查询语句和JAVA 对象的映射。
- 声明:
- 通过 @Mapper 注解来声明。
- 动态SQL(重点)
- 是什么? :动态SQL 简而言之,就根据不同的条件生成不同的SQL语句。Mybatis 提供了
if
(when,otherwise)
(where, set)
- 具体的应用场景(SQL的用处)
- 条件查询:根据用户提供不同的查询条件,自动生成不同的SQL语句,主要用if 元素
- 批量操作:一般用于批量处理集合数据,主要是用foreach
- 动态更新:根据用户提供不同的字段自动生成不同的SQL语句。
- 动态排序:根据用户提供不同的字段自动生成不同的SQL排序语句。
- 是什么? :动态SQL 简而言之,就根据不同的条件生成不同的SQL语句。Mybatis 提供了
- MyBatis缓存机制
- MyBatis 内置了一个强大的事务性查询缓存机制,包括一级缓存和二级缓存。
- 一级缓存指SqlSession中缓存,默认开启,基于对象引用的,可以减少查询的次数,提高性能。用于同一个SqlSession多次查询相同的数据。当SqlSession关闭时,一级缓存被清空。
- 二级缓存指SqlSessionFactory中的缓存,默认是关闭的,是全局共享,基于对象序列化的。用于多个SqlSession多次查询相同的数据。当数据变化时候,二级缓存被清空。
- Spring IOC
- 主要作用是:管理对象生命周期。
- 对象创建:
- 属性注入:常见的,用法简单。
- 构造器注入:最大的优点可以保证依赖关系完整性。
- 作用域方式:
- 单例模式:默认的。Controller、Service等都是这种模式。
- 原型模式:需要指定 prototype
- 注入的注解:(填空)
- @Autowired : 既可以根据类型又可以根据名称注入
- @Resource :
- Spring AOP
-
Spring AOP 基于动态代理实现。
-
关键概念:
- 切入点(连接点):被拦截的方法
- 切面:是一个类,定义通知的地方
-
Spring AOP的两种动态代理的实现方式
- 基于JDK的动态代理
- jdk 动态代理要求代理对象必须有接口
- 通过反射机制生成一个代理类,再重写接口中的方法来实现代理,代理方法中调用目标对象的方法。
- 基于cglib动态代理
- cglib 是一个功能强大的代码生成库,可以在运行时候动态生成class文件字节码。
两种动态代理有哪些不同
Spring AOP中,如果对象没有实现任何接口,Spring AOP 采用cglib方式,如果该对象有接口,采用JDK默认的动态代理。 - 基于JDK的动态代理
-
-
Spring MVC
- Spring MVC中可以挖出一个东西,叫前端控制控制器,叫 DispatcherServlet处理分发请求。
- ModelAndView: 模型数据和视图层
-
Spring IOC、Spring MVC、Spring Boot 中常用的注解。(要求掌握10 个以上)并描述作用
- 基于组件化
- @Component : 组件注解。
- @Controller:组件注解,用于控制器
- @Service::组件注解,用于服务层
- @Repository:组件注解,用于持久层
- @Autowired: 自动注入(装配),用于自动装配对象,根据类型或名称进行装配。
- Spring MVC
- @RequestMapping : 映射请求路径的。
- @PostMapping: 和@RequestMapping功能一样,限定请求方式为Post
- @GetMapping: 和@RequestMapping功能一样,限定请求方式为get
- @PutMapping: 和@RequestMapping功能一样,限定请求方式为put
- @DeleteMapping: 和@RequestMapping功能一样,限定请求方式为delete
- @RequestParam: 用于接收指定的参数,将请求参数绑定到控制器的方法上
- @RequestBody: 请求头注解,用于接收json格式的请求头信息参数。
- @ResponseBody:响应体注解,用于json 形式返回结果给客户端。
- @RestController: Restful风格的控制器,相当于@Controller和@ResponseBody的组合。
- @PathVariable: 路径变量,用于获取请求通配符路径的变量。
- SpringBoot
- @Configuration : 用于标注配置类。
- @SpringBootApplication:在SpringBoot中用于标注主类。
- 基于组件化
-
分层(为什么要分层,分为几层):
- 控制层
- 控制器类似传统的Servlet,用于处理web请求。接收请求,处理请求,调用服务层、Dao层等组件实现业务逻辑。
- 如何定义?通过@Controller 或 @RestController 进行标注。
- 处理结果返回数据模型和视图,根据返回的数据跳转到不同的视图页面作展示。
- 服务层
- Dao层
- 控制层
-
如何设计数据库(第一道大题)
购物车提交就是订单,数据结构一模一样
用户 ,商品,购物车/订单之间的关系(ER图)- 第一问:概念,ER 图等
- 第二问:实现一个完整基本的功能:Mapper 接口查询某个时间段的订单或购物车
9.第二大题
1. mapper 代码
```text
@Mapper
public interface OrderMapper {
public List<Order> selectOrderByGoods(@Param("goodsId") String goodsId, Date beginTime);
}
<select id="selectOrderByGoods" >
select * from order where goodsId = #{googsId} and createTime = #{beginTime}
</select>
```
- Service 层代码
@Service
public class OderService {
@Autowired
private OrderMapper orderMapper;
public List<Order> listOrderByGoods(String goodsId, Date beginTime){
return orderMapper.selectOrderByGoods(goodsId,beginTime);
}
}
3.Controller 层
public class OrderController {
@Autowired
private MyOderService myOderService;
@RequestMapping("/list/xxxx/{id}")
public String listOrderByGoods(@PathVariable String id, @RequestParam("beginTime") Date beginTime, Model model){
List<Order> orderList = myOderService.listOrderByGoods(id, beginTime);
model.addAttribute("orderList",orderList);
return "listOrder";
}
}
- 视图层
<table>
<tr><td>序号</td><td>订单编码</td><td>商品</td></tr>
<c:forEach items="${orderList}" var="order" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${order.orderNum}</td>
<td>${order.goodsId}</td>
</tr>
</c:forEach>
</table>