JavaEE知识点复习资料

选择题须知注解

@RequestParam用于从请求URL中获取参数并映射到方法参数中的注解。

@RequestMapping将一个请求URL指向一个类的方法的注解。用于处理请求地址映射,可以作用于类和方法上。

@ResponseBody作用于方法上,可以将整个返回结果以某种格式返回,如JSON字符串。

@ModelAttribute作用在Controller的某个方法上,此方法会首先被调用,并将方法结果作为Model的属性。

@Autowired自动按照类型注入,不关心bean的id,只要有唯一的类型匹配就可以注入成功。如果注入的bean在容器中类型不唯一时,他会把变量名作为bean的id,然后在容器中查找,找到则注入成功,如果没有一致的beanId则报错。
JavaEE知识点复习资料_第1张图片
JavaEE知识点复习资料_第2张图片

除注解外,还需要了解项目的文件路径、配置文件等。

JavaEE知识点复习资料_第3张图片
用户开发源代码都在src/main/java中
Resources:static静态资源:图片,视频,音频,js,css
Templates: 模板(freemarker,thymeleaf,默认不支持jsp)
Aplication.properties :spring boot 配置文件
Spring boot 内置tomcat,无需配置tomcat,直接以java application来执行

  1. 声明使用spring boot
    JavaEE知识点复习资料_第4张图片

  2. web
    JavaEE知识点复习资料_第5张图片

  3. 数据库


    org.springframework.boot
    spring-boot-starter-jdbc



    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.1



    mysql
    mysql-connector-java
    runtime

  1. 热部署
    JavaEE知识点复习资料_第6张图片

  2. 定义mybatis全局配置文件位置和mapper文件位置
    JavaEE知识点复习资料_第7张图片

  3. mybatis-config配置mybatis的全局参数
    JavaEE知识点复习资料_第8张图片

  4. typeAliases起别名

程序填空题

Conreoller层文件

@Component【最好对应到每层中(@Controller、@Service、@Repository、@Mapper)】、@RequestMapping(“路径”)【填写路径时需要注意类名上方是否已经存在父路径】、@Autowired、@RequestParam(“xx”)【xx为前端中的name属性对应的名称】、

Mapper文件

resultType【全类名一定要写对】、parameterType、resultMap、association【id、result】、collection【id、result】、#{}、useGeneratedKeys、一些id的对应关系

拦截器

@preHandle、@postHandle、@afterCompletion、addInterceptors、HandleInterceptor

AOP

@Pointcut、@Before、@After、@Around、@AfterReturning、@AfterThrowing

简答题

IOC原理:

将组件之间的依赖关系反转,让外部容器来负责这些依赖关系,而不是由组件自己来创建和管理他们。

依赖注入的三种方法:

①使用set方式注入 ②使用构造函数 ③使用注解注入【配置文件可能出现的代码题中】

IOC加载配置文件的方法:

使用ApplicationContext工厂的接口,使用该接口可以获取到具体的Bean对象。

AOP原理:

面向切面编程,把程序中重复的代码抽取出来,在需要执行的时候使用动态代理技术在不修改源代码的基础上对已有方法进行增强。

AOP中概念:

①Joinpoint(连接点):指能被拦截到的点,在Spring中只有方法能被拦截。
②Pointcut(切点):指要对那些连接点进行拦截,即被增强的方法。
③Advice(通知):指拦截后要做的事情,即切点被拦截后执行的方法。
④Aspect(切面):切点加通知称为切面。

AOP注解的作用:

@Pointcut:定义切入点表达式,即指定在哪些方法或类上应用切面逻辑。

@Before:在目标方法执行之前执行切面逻辑。

@After:在目标方法执行之后(无论是否发生异常)执行切面逻辑。可用于执行一些收尾操作,如资源释放、事务处理等。

@Around:在目标方法执行前后执行切面逻辑,并可以控制目标方法的执行。

@AfterReturning:在目标方法成功执行后执行切面逻辑。

@AfterThrowing:在目标方法抛出异常后执行切面逻辑。

AOP的执行顺序 详看请点击:
1、程序正常执行:

① 环绕通知前
② @Before通知
③ 程序逻辑
④ @AfterReturning通知
⑤ 通知@After通知
⑥ 环绕通知后

2、程序异常:

① 环绕通知前
② @Before通知
③ @AfterThrowing异常通知
④ @After通知

执行顺序和Spring版本有关

拦截器执行过程,其流程描述如下:

①执行preHandle方法,该方法返回一个布尔值。如果为false,则结束所有流程;如果为true,则执行下一步;
② 执行处理器逻辑,它包含控制器的功能;
③ 执行postHandle方法;
④ 执行视图解析和视图渲染;
⑤执行afterCompletion方法。

MVC模式

JavaEE知识点复习资料_第9张图片

MVC执行流程

JavaEE知识点复习资料_第10张图片

ModelAndView
public ModelAndView test(User user) {
    ModelAndView mv = new ModelAndView();
    MappingJackson2JsonView jsonview = new MappingJackson2JsonView();
    mv.setView(jsonview);
    mv.addObject("user", user);
    return mv;
}
Mybatis原理

ORM(对象关系映射) 数据库表字段名和实体类属性名保持一致。

Mybatis中的四个一致

映射文件名和接口文件名称一致(除扩展名)
mybatis映射文件的位置必须和dao接口的包结构相同
映射文件的名称空间namespace对应接口全类名
映射配置文件的操作配置,id的取值必须是dao接口的方法名

代码题

一、IOC三种依赖注入
1.Spring Ioc属性注入使用 set方法注入
private String bookname;
public void setBookname(String bookname) {
    this.bookname = bookname;
}
<bean id="book" class="cn.itcast.property.Book">
    <property name="bookname" value="数据结构"/>
bean>
2.使用有参数构造注入
<bean id="book" class="cn.itcast.property.Book">
	<constructor-arg name="bookname" value="数据结构"/>
bean>
3.注解注入属性
public class UserServiceImpl1 implements IUserService {
    @Autowired
    private IUserDao userDao;
    
    @Override
    public void saveCustom(String arg){
        ...
    }
}
二、文件上传
1)上传文件JSP /WEB-INF/jsp/file/upload/.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<html>
<body>
	<form method="post" action="/upload/multipart" enctype="multipart/form-data">
        <input type="file" name="photo" value="请选择上传的文件"/>
        <input type="sumbit" value="提交"/>
    form>
body>    
html>
2)文件上传控制器
package com.springmvc.chapter0320191007.controller;
@Controller
public class FileController{
    @PostMapping("/upload/multipart")
    @ResponseBody
    public Map<String, Object> upload(@RequestParam("photo") MultipartFile photo)
    {
        String path = "d:/uploaded/";//保存路径
        String filename = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
        
        // 获取上传文件的后缀suffix
        String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf("."));
        try {
            // Spring提供了文件操作类FileCopyUtils
            FileCopyUtils.copy(photo.getInputStream(), new FileOutputStream(path+filename+suffix));
        } catch(IOException e) {
            e.printStackTrace();
            return dealResultMap(false, "上传失败");
        }
        return dealResultMap(true, "上传成功");
    }
    
    // 处理上传文件结果
    private Map<String, Object> dealResultMap(boolean success, String msg) {
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("success", success);
        result.put("msg", msg);
        return result;
    }
}
三、Spring整合Mybatis
1)定义实体类
package com.cn.entity
public class User{
    private Integer id;
    private String userName;
    private String note;
    
    setter、getter方法
}
2)持久层
package com.cn.dao
/***import***/
@Mapper
public interface IUserDao{
    public List<User> findAllUsers();
    public User getUserById(Integer uid);
    public Integer insertUser(User user);
    ...
}
3) UserMapper.xml文件
<mapper namespace="com.cn.dao.IUserDao">
	<select id="getUserById" paramterType="Integer" resultType="com.cn.entity.User">
        select id,user_name as userName,note from t_user where id=#{uid};
    select>
    <select id="findAllUsers" resultType="com.cn.entity.User">
         select id,user_name as userName,note from t_user
    select>
    <insert id="insertUser" parameterType="com.cn.entity.User" 
useGeneratedKeys="true" keyProperty="id">
    	insert into t_user(user_name, note) values(#(userName), #{note})
    insert>
mapper>
四、Mybatis一对一,一对多
一对一
<select id="getClass" parameterType="Integer" resultMap="ClassResultMap">
    select *
    from class c,
         teacher t
    where c.teacher_id = t.t_id
      and c.c_id = #{id}
select>

<resultMap id="ClassResultMap" type="nuc.ty._20231202myatis.pojo.Classs">
    
    <id property="id" column="c_id">id>
    
    <result property="name" column="c_name">result>
    
    <association property="teacher" column="teacher_id" javaType="nuc.ty._20231202myatis.pojo.Teacher">
        
        <id property="id" column="t_id"/>
        
        <result property="name" column="t_name"/>
    association>
resultMap>
一对多
<mapper namespace="nuc.ty._20231202myatis.dao.IDeptDao">
    
    <select id="findByDeptno" parameterType="Integer" resultMap="deptMap">
        select *
        from dept
        where deptno = #{deptno}
    select>
    
    <resultMap type="nuc.ty._20231202myatis.pojo.Dept" id="deptMap">
        <id property="deptno" column="deptno"/>
        <result property="dname" column="dname"/>
        <result property="location" column="loc"/>
        
        <collection property="emps" javaType="ArrayList"
                    ofType="nuc.ty._20231202myatis.pojo.Emp"
                    column="deptno"
                    select="nuc.ty._20231202myatis.dao.IEmpDao.findByDeptno">
        collection>
    resultMap>
mapper>
<mapper namespace="nuc.ty._20231202myatis.dao.IEmpDao">
	
    <select id="findByDeptno" parameterType="Integer"
            resultType="nuc.ty._20231202myatis.pojo.Emp">
        select * from emp
        where deptno=#{deptno}
    select>
mapper>
帮你通关Mybatis【一对一、一对多】

平时测试

U+试题
课上代码

你可能感兴趣的:(Java系列,java-ee,java,开发语言)