一、mybatis
首先,mybatis是一种对象关系映射(orm)框架是为了解决面向对象和关系数据库之间存在不匹配的现象。也就是说,mybatis的重点是对象和数据库之间的映射。mybatis将包装从数据库中获得的松散数据,以便开发人员直接获得对象。mybatis实际上是对jdbc操作数据库的包装,使关注者只需要关注sql本身。
Mybatis需要手写Sql语句,对jdbc的包装程度不如hibernate,但也要灵活得多; 使用mybatis时,只需要注意三个部分(1.sql语句 ;2.输入参数; 3.输出参数)。
mybatis实现数据的持久性:1)开发持久性po,编写持久性操作Mapper,定义sql语句;
2)获得sqlsesionfactory;
3)获得sqlsesion;
4)以面向对象的方式操作数据库;
5)关闭事务,关闭sqlseesion。
#{}和{}#{}分析传输的参数数据,预编译sql语句,防止sql注入 , 先用#{}代替#{} ?再次调用preparedstatement的set方法赋值;
${}传递的参数原装拼接到sql语句中,${}字符串替换 ,变量值直接替换;
如何实现动态sql原理?使用OGNL从SQL参数中计算表达值,并根据表达值组装动态SQL。
二、springspring是一个非常庞大的系统,在其系统下有熟悉的springframework、springdata、springsecurity、springboot、springclouod……
beanng是spring的核心概念、ioc(di)、aop。Spring通过Beanfactory获取这些对象,并通过配置文件中的节点将该类交给Spring进行管理。Applicationcontext的实现类通过getbean()从Spring容器中获取对象,默认为单例。
ioc:将需要创建的对象以池的形式管理,并注入需要的对象。
方式: 注入setter,注入接口,注入结构方法。
aop:面向切面 :包装为业务模块共同调用的逻辑或责任;减少重复代码,减少耦合,便于后期维护和开发。
使用场景:事务、错误处理、日志信息 、权限控制;
Spring bean:生命周期Spring Bean的生命周期分为四个阶段和多个扩展点。扩展点可分为多个Bean和单个Bean。分类如下:
四个阶段
·实例化 Instantiation
·属性赋值 Populate
·初始化 Initialization
·销毁 Destruction
bean 实例化过程:1.实例化 bean 对象,类似 new XXObject()
2.将配置文件中配置的属性填充到刚刚创建的属性中 bean 对象中。
3.检查 bean 是否实现了对象 Aware 如果实现了一种接口,则设置相应的依赖性 bean 对象中。如果 bean 实现了 BeanFactoryAware 接口,Spring 在实例化bean的过程中,容器会 BeanFactory 容器注入到 bean 中。
4.调用 BeanPostProcessor 前置处理方法,即 postProcessBeforeInitialization(Object bean, String beanName)。
5.检查 bean 是否实现了对象 InitializingBean 如果实现接口,则调用接口 afterPropertiesSet 方法。或检查配置文件中是否配置了配置文件 init-method 属性,如果配置,则调用 init-method 属性配置的方法。
6.调用 BeanPostProcessor 后处理方法,即 postProcessAfterInitialization(Object bean, String beanName)。我们知道的 AOP 就在这里 Apce 逻辑织入到 bean 中的。
7.注册 Destruction 相关回调方法。
8.bean 对象处于就绪状态,可以使用。
9.上下文应用被销毁,注册应用被调用 Destruction 相关方法。如果 bean 实现了 DispostbleBean 接口,Spring 容器会调用 destroy 方法。如果在配置文件中配置 destroy 属性,Spring 会调用容器 destroy 对应属性的方法。
spring事务:1.事务可以在代码或数据库中配置;
2.事务是并发控制单位,是用户定义的操作序列。这些操作要么完成,要么不完成,不可分割;
3.事务是作为单个逻辑工作单元执行的一系列操作;
事务的四大特点:1、原子:事务是由一系列动作组成的原子操作;事务的原子保证要么完全完成,要么完全无效。
2、一致性:一旦事务完成(无论是成功还是失败),系统必须确保其建模的业务处于一致状态,而不是部分失败;
3、隔离:事务应隔离;因为许多事务可能同时处理相同的数据,所以每个事务都应该与其他事务有隔离策略。
4、持久性(acid):一旦事务完成,其结果就不会受到影响。通常,事务的结果写在持久存储器中。
commit:提交事务; rollback:回滚事务; savepoint:保存点;
三、springmvcspringmcv是基于java实现mvc设计模式的请求驱动型轻量级web框架、view、controller分离,解耦web层,将复杂的web应用分为逻辑清晰的部分,减少错误,简化开发,方便团队人员相互开发合作。
springmvc的工作流程:1.用户向前端控制器发送请求DispatcherServlet
2.DispatcherServletcontrolerler通过处理器映射器选择
3.dispatcherservlet请求controller处理
4.处理完controller后,返回modelandview给处理器映射器
5.通过视图解析器试图处理映射器
6.根据模型数据渲染视图回应用户
对springmvc的理解:1.这是基于mvc的web框架;
2.springmvc是spring的一个模块,是spring的子容器,子容器可以拿父容器的东西,父容器不能拿子容器的东西;
3.Dispatcherservletspringmvc用于分发请求,使操作简单;
4.springmvc三大组件
1)handleMapping:处理器映射器
controller的用户请求路径映射;
2)handlerAdapter:处理器适配器
根据handler的不同开发方法,寻找不同的处理器适配器;
3)viewResolver:视图解析器
可以分析jsp/freemarkerr/pdf等;
四、ssmssm是springmvc、spring、整合mybatis等框架,将整个系统分为dao层和mapper层、service层、controller层四层。利用springmvc负责转发请求和管理视图,spring实现业务对象管理,mybatis作为数据对象的持久引擎。
五、Spring CloudSpring Cloud是一系列框架的有序集合。它使用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载平衡、断路器、数据监控等 一键启动和部署Boot的开发风格。Spring没有重复制造轮子。它只是通过Spring将各公司开发的成熟、经得起实际考验的服务框架结合起来 Boot风格的重新包装屏蔽了复杂的配置和实现原理,最终给出了开发人员留出了一套简单易懂、易部署、易维护的分布式系统开发工具包。
核心组件:Netflix Eureka 注册和发现服务
当我们有太多的微服务时,管理服务的通信地址是一件非常麻烦的事情。Eureka用于管理微服务的通信地址清单。有了Eureka,我们可以通过服务名称调用服务。
Netflix Ribbon\Feign : 客户端负载均衡
Ribon和Feign都是客户端负载平衡器。它的功能是帮助我们在服务呼叫时按照一定的规则将请求分发给多个目标服务器。简单的理解是解决微服务之间的通信问题。
Netflix Hystrix :熔断器、容错管理工具
旨在通过熔断机制控制服务和第三方库的节点,为延迟和故障提供更强的容错能力。
Netflix Zuul : 服务网关
zul作为一个服务网关,我们可以把它看作是微服务的大门,所有的要求都需要zul才能达到目标服务。根据这一特点,我们可以将微服务的公共事务交给zul进行统一处理,如用户权利识别、请求监控等。
Spring Cloud Config :分布式配置
微服务架构中的服务实例很多,服务配置文件分散在每一项服务中,每次修改服务配置文件和重新服务实例都是一项非常麻烦的工作,Spring Cloud 作为分布式配置管理中心,Config是用于统一管理服务的配置文件。
Spring Cloud Bus : 消息总线
新闻总线是微服务中每个微服务广播新闻的组成部分。我们使用新闻总线建立一个新闻中心,其他微服务可以访问新闻中心。当新闻总线发起新闻时,访问的微服务可以收到消息以消费。
Spring Cloud sleuth :跟踪微服务链路
当我们的应用采用微服务架构时,背景可能有数十甚至数百个服务支持,请求可能需要多次服务呼叫才能完成,链路跟踪的作用是监控维护呼叫关系,让程序员方便直观地感受微服务的请求,以及服务请求时间,是否有异常等。
spring cloud 如何注册和发现服务?服务器发布时,指定服务器用户名端口,将服务注册到注册中心(zk,eureka),springcloud在此过程中自动实现,只需在main方法中添加即可。
ribbon和feign的区别ribbon和feign都调用其他服务,但方式不同
1.ribbon的启动注解不同于启动类注解@Ribbonclient,启动类注释feign@Enablefeignclient ;
2.服务的指定位置不同,ribon在启动注释中发表声明,feign在定义抽象接口方法时发表声明@feignclient ;
3.不同的调用方式,ribbon需要建立自己的http请求,模拟http请求,然后调用template发送给其他服务,步骤相当繁琐 ;
feign在ribbon上进行了改进,并通过界面将其他需要调用的方法定义为抽象方法。