一、MyBatis
1. mybatis是一款持久层框架,支持定制化sql、存储过程、高级映射,避免了大量的jdbc代码和手动设置参数,以及获取结果集。
2. ${} 和 #{}
${} 是字符串替换,#{}是预编译处理,PreparedStatement的set赋值
使用#{}可以有效的避免sql注入问题。
3. mybatis的步骤
1. 创建sqlSessionFactory工厂对象
2. 根据sqlSessionFactory创建sqlSession对象
3. sqlSession对象执行sql语句
4. session.commit 5. session.close
4. resultType 和 resultMap的区别
当实体类与数据库中的字段一一对应时,可以直接使用resultType进行映射。
当实体类与数据库中字段名不一致时,可以使用resultMap进行一一配置。
5. mybatis中的动态标签
if where forEach include set
6. mybatis的缓存机制
两层缓存,第一层缓存是sqlSession级别的,默认开启,无法关闭,当session.close .flush时,会删除。第二次是mapper级别的,默认关闭,需要手动开启配置,需要实现Serializable序列化接口。
二、Spring 框架
两大核心 ioc控制反转和 aop切面编程
ioc控制反转,将对象的控制权交给spring,spring创建bean实例放入spring容器,当我们需要使用对象时,直接去spring容器中获取。
aop切面编程,和面向对象继承对应,继承是纵向关系的,aop切面编程是横向关系的,将对业务没有太大影响,并且多个模块需要使用到的封装成aop切面,使用动态代理的方式创建aop对象,在切点处进行增强。
2. springAop的动态代理:jdk动态代理 cglib动态代理
3. spring声明周期:
1.实例化bean
2. ioc注入,按照spring上下文对bean进行配置
3. beanNameAware接口,调用setBeanName
4. beanFactoryAware接口,调用setBeanFactory
5. ApplicationContextAware接口,调用sertApplicationContext
6. 关联BeanPostProcessor,调用postProcessBeforeInitialization
7. 执行配置的 init-method
8. BeanPostProcessor,postAfterInitialization
9. 清理,如果实现了DisposableBean,调用destroy
10. 销毁,如果配置了 destroy-method,则调用
4. spring bean的作用于
singleton、prototype、request、session 、global-session
5. beanFactory和ApplicationContext的区别
beanFactory是spring最顶层接口,封装了spring的基本方法,比较难调用,bean是在使用的时候才去初始化。
ApplicationContext是beanFactory的子接口,启动时,直接初始化。
6. spring中的设计模式
工厂模式、单例模式、代理模式、模板模式、观察者模式
7. spring事务
spring对事务的支持来自于数据库对事务的支持,只有数据库支持事务时,spring才能提供事务支持。
编程式:commit、rollback
声明式:transactional、aop配置
8. spring的通知
前置、后置、异常、最终
9. spring Baen默认是单例的,但是也可以通过配置来变成多例。
单例bean 非线程安全,bean中有可变的成员变量时。 解决:避免可变的成员变量、定义threadlocal..
10. @Resource @Autowired
@Resource 先根据id配置,如果名称没有再根据类型配置,如果配置了 name 属性 则只能根据id注入。
@Autowired
根据类型注入,如果有多个类型,则根据属性名注入。
结合@Qualifier 根据id寻找
11. 常用注解
@Component、@Controller、@Service、@Repository
@Scope:设置spring 作用于
@PostConstruct 、 @ProDestroy 创建后和销毁方法。
@Value 简单的属性依赖注入
@Autowired:对象属性注入
@Qualifier
@Resouce 属性名称注入
@ComponentScan:组件扫描
@Bean 返回值放入容器
@PropertySource:引入其他properties配置文件
@Import:在一个配置类中导入其他配置类的内容
@Configuration 配置类。
@Transactional : 事务
三、SpringMVC
基于java实现的MVC设计模式的web轻量级框架。mvc-模块、视图、控制器
1. 主要组件
前端控制器:dispatcherServlet:接收请求、响应结果。
处理器映射器:handlerMapping:根据url查找handler
处理器适配器:handlerAdapter:执行handler
处理器:handler:处理业务逻辑java类
视图解析器:viewResolver:进行视图解析
视图:view
2. 流程
1. 用户请求到 dispatcherServlet ,dispatcherServlet调用handlerMapping去寻找handler,找到后生成处理器对象及处理器拦截器返回给dispatcherServlet。
2. dispatcherServlet 调用 handlerAdapter,handlerAdapter调用自定义的处理器Controller,controller将处理结果返回。
3. dispatcherServlet 将 modleAndView 传给 viewResolver,解析参数转化为物理视图返回。
4. dispatcherServlet进行物理视图渲染并将结果返回。
3. springMvc 转发 和 重定向,在返回值前添加
转发:forward
重定向:redirect
4. 常用注解:
@RequestMapping:处理请求的url映射
@RequestBody:接收json数据
@ResponseBody:返回json数据
@PathVariable:从路径获取参数
@RequsetParam:对传入参数进行限制 value、required、defaultValue
@ControllerAdvice:全局处理异常类
@ExceptionHandler 标记在异常类上,表示处理异常的类型
5. 统一异常处理:
1. 实现HandlerExceptionResolver接口,并实现异常处理方法,交给spring容器
2. 在类上加注解 @ControllerAdvice表示是一个异常处理类,@ExceptionHandler 表示处理类型。
6. 转发数据传递给前台
1. request域:request.setAttirbuate("name", value);
2. model传值:model.addAttribuate("name", value);
3. ModelMap传值:modelmap.put("name",value);
4. ModelAndView :mv.addObject("name",value);mv.setView("success");return mv;
7. 拦截器步骤:
1. 自定义拦截器,实现HandlerInterceptor接口
preHandler方法:返回true则继续请求
postHandle方法:调用完处理器后调用该方法
afterCompletion:前端控制器渲染界面完成后调用该方法。
2. 在配置文件中配置
8. 文件上传:
加入commons-fileupload 包,解析器id属性为:multipartResolver,后端接收数据类型为:MultipartFile 参数名与前端一致。
三要素 form表单:post 、 enctype属性:multipart/form-data、type属性为file的input标签。
四、 Spring Boot
spring子项目,简化开发。
优点:版本锁定、起步依赖、自动配置、内置Tomacat
SpringBoot 的启动器:starter
1. 配置文件
applicaiton.yml 和 bootstrap.yml
bootstrap由ApplicaiontCaontext加载,加载比较快,属性不能被覆盖
2. 注解:
@SpringBootApplicaiton:封装了@SpringBootConfiguration+@EnableAutoConfiguration +@ComponentScan
@EnableScheduling 是通过@Import 将Spring 调度框架相关的bean 定义都加载到
IoC 容器
@MapperScan:spring-boot 支持mybatis 组件的一个注解,通过此注解指定mybatis
接口类的路径,即可完成对mybatis 接口的扫描
@RestController 是@Controller 和@ResponseBody 的结合, 一个类被加上
@RequestMapping,我们都需要明确请求的路径.
@GetMappping,@PostMapping, @PutMapping, @DeleteMapping
@PathVariable:路径变量注解,用{}来定义url 部分的变量名.
@Service 这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个
注解交给spring 容器。事务的切面也会配置在这一层。
@Component 和spring 的注解功能一样, 注入到IOC 容器中.
@ControllerAdvice 和@ExceptionHandler 配合完成统一异常拦截处理.
五、 SpringCloud
SpringCloud 是一系列框架的集合,集成SpringBoot,提供很多优秀服务:服务发现
和注册,统一配置中心, 负载均衡,网关, 熔断器等的一个微服务治理框架.
1. 核心组件
Eureka: 注册中心, 服务注册和发现
Ribbon: 负载均衡, 实现服务调用的负载均衡
Hystrix: 熔断器
Feign: 远程调用
Zuul: 网关 或者 Gateway
Spring Cloud Config: 配置中心