JavaEE知识点复习资料

选择题须知注解

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

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

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

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

@Autowired自动按照类型注入,不关心bean的id,只要有唯一的类型匹配就可以注入成功。如果注入的bean在容器中类型不唯一时,他会把变量名作为bean的id,然后在容器中查找,找到则注入成功,如果没有一致的beanId则报错。
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
用户开发源代码都在src/main/java中
Resources:static静态资源:图片,视频,音频,js,css
Templates: 模板(freemarker,thymeleaf,默认不支持jsp)
Aplication.properties :spring boot 配置文件
Spring boot 内置tomcat,无需配置tomcat,直接以java application来执行

  1. 声明使用spring boot
    在这里插入图片描述

  2. web
    在这里插入图片描述

  3. 数据库

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
  1. 热部署
    在这里插入图片描述

  2. 定义mybatis全局配置文件位置和mapper文件位置
    在这里插入图片描述

  3. mybatis-config配置mybatis的全局参数
    在这里插入图片描述

  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模式

在这里插入图片描述

MVC执行流程

在这里插入图片描述

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:POJO属性名 column:数据库列名 -->
    <id property="id" column="c_id"></id>
    <!-- result定义普通列 property:POJO属性名 column:数据库列名 -->
    <result property="name" column="c_name"></result>
    <!-- 一对一对象列 property:属性名 column:关联列名 javaType:对象类型-->
    <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:一对多关联映射
        根据部门deptno先读取部门信息,然后再读取这个部门所有的用户信息。
         property表示集合类型属性名称,也就是Dept实体类中定义的员工List名字
         ofType表示集合中的对象的类型-->
        <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">
	<!--根据deptno查询员工-->
    <select id="findByDeptno" parameterType="Integer"
            resultType="nuc.ty._20231202myatis.pojo.Emp">
        select * from emp
        where deptno=#{deptno}
    </select>
</mapper>
帮你通关Mybatis【一对一、一对多】

平时测试

U+试题
课上代码
  • 46
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值