1.常见的ORM框架有哪些?
1.Mybatis
Mybatis是一种典型的半自动的ORM框架,所谓的半自动,是因为还需要手动的写SQL语句,再由框架根据SQL及传入数据来组装为要执行的SQL。
其优点为︰
- 因为由程序员自己写SQL,相对来说学习门槛更低,更容易入门。
- 更方便做SQL的性能优化及维护。
- 对关系型数据库的模型要求不高,这样在做数据库模型调整时,影响不会太大。适合软件需求变更比较频繁的系统,因此国内系统大部分都是使用如Mybatis这样的半自动ORM框架。
其缺陷为:
- 不能跨数据库,因为写的SQL可能存在某数据库特有的语法或关键词
2.Hibernate
Hibernate是一种典型的全自动ORM框架,所谓的全自动,是SQL语句都不用在编写,基于框架的API,可以将对象自动的组装为要执行的SQL语句。
其优点为∶
- 全自动ORM框架,自动的组装为SQL语句。
- 可以跨数据库,框架提供了多套主流数据库的SQL生成规则。
其缺点为︰
- 学习门槛更高,要学习框架API与SQL之间的转换关系对数据库模型依赖非常大,在软件需求变更频繁的系统中,会导致非常难以调整及维护。可能数据库中随便改一个表或字段的定义,Java代码中要修改几十处。
- 很难定位问题,也很难进行性能优化:需要精通框架,对数据库模型设计也非常熟悉。
2.Bean容器/loc容器的理解
Spring容器主要是对loC设计模式的实现,主要是使用容器来统一管理Bean对象,及管理对象之间的依赖关系。
创建容器的API主要是BeanFactory和ApplicationContext两种:
- BeanFactory是最底层的容器接口,只提供了最基础的容器功能:Bean的实例化和依赖注入,并且使用懒加载的方式,这意味着beans只有在我们通过getBean()方法直接调用它们时才进行实例化。
- ApplicationContext(应用上下文)是BeanFactory的子接口,与BeanFactory懒加载的方式不同,它是预加载,所以,每一个bean 都在ApplicationContext启动之后实例化。
- 除了基础功能,还添加了很多增强:
整合了Bean的生命周期管理- i18n国际化功能(MessageSource)
- 载入多个(有继承关系)上下文,使得每一个上下文都专注于一个特定的层次,比如应用的web层
- 事件发布响应机制(ApplicationEventPublisher)
- AOP
3. loC/DI的理解
概念
loC(Inversion of Control)即控制反转,是面向对象编程中的一种设计原则。主要是通过第三方loC容器,对Bean对象进行统一管理,及组织对象之间的依赖关系。获得依赖对象的过程,由原本程序自己控制,变为了loC容器来主动注入,控制权发生了反转,所以叫做loC,控制反转。
loC又叫做DI︰由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),相对loC而言,依赖注入实际上给出了实现loC的方法:注入。所谓依赖注入,就是由loC容器在运行期间,动态地将某种依赖关系注入到对象之中。
依赖注入(Dl)和控制反转(loC)是从不同的角度的描述的同一件事情,就是指通过引入loC容器,利用依赖关系注入的方式&