Spring,Hibernate框架简单总结

在介绍Spring框架前,首先引入IoC和AOP概念
Ioc:控制反转(Inverse of Control),即依赖注入,是一种降低对象之间耦合关系的设计思想。将设计好的对象交给容器控制,不再是在对象内部直接控制。
并且可以提高系统的可扩展性。
注入有三种方式:构造注入,属性注入和接口注入,
Spring容器使用构造注入和属性注入方式,与构造注入方式不同,属性注入更加灵活方便,只在需要该对象是才调用
构造入住代码
class Sale
{    
    private AbstractTea t;
    public Sale(AbstractTea t){
        this.t= t;
    }
}

属性注入:
class Sale
{    
    private AbstractTea t;
    public void setSale(AbstractTea t){
        this.t= t;
    }
}

”关于IoC的更详细讲解,可参考博客:https://blog.csdn.net/qq_22654611/article/details/52606960“

AOP:面向切面编程,是面向对象开发的一种补充,允许开发人员动态地修改模型以满足新的要求,例如,开发人员可以在不改变原有业务逻辑的基础上的动态添加日志,安全和异常处理的要求。

Spring提供了对轻量级IoC的支持,也提供了对AOP技术的封装,主要是模块化的设计,框架内的每个模块都能完成特定的工作,并且能独立运行,不会相互牵连。
Spring框架主要有7个模块构成:
Spring AOP:面向切面编程,使Srping管理的对象都支持AOP,同时这个模块也提供了事务管理,可以不依赖具体EJB组件
Spring DAO:提供了对数据访问对象模式和JDBC的支持,DAO可以实现把业务逻辑和数据库访问的代码分离,从而降低代码的耦合度。
Spring Web:提供了servlet监听器的Context和web应用的上下文。同时还继承了一下现有的web框架,如struct;
Spring Context:扩展核心容器
Spring Web MVC:提供了一个构建web应用程序的MVC实现;
Spring core:Spring容器的核心框架,提供了Spring框架的基本功能。这个模块最主要的一个组件为BeanFactory,BeanFactory采用IoC思想,通过读取XML文件实例化对象,用工厂模式创建对象,实现了对生命周期的管理,对组件创建,装配和销毁功能。

Hibernate是一个开放源代码的对象关系映射(Object Relation Mapping)框架,对JDBC实现了轻量级的封装。
提供了5个核心接口:Session,SessionFactory,Transaction,Query和Configuration.
Hibernate的使用过程如下:
1)应用程序通过读取配置文件创建一个SessionFactory:
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
2)通过SessionFactory生成Session对象
        Session session = SessionFactory.openSession();
3)通过Session对象的buildTransaction()方法创建一个事务
      Transaction t = Session.buildTransaction();
      s.save()/s.get()/s.update();
      t.commit()/t.rollback();
4)在完成持久化操作及事务操作后需要关闭Session和SessionFactory;
session 是非线程安全的轻量级对象,主要负责被持久化对象和数据库的操作,session在访问数据库是会建立与数据库的连接,这个连接只有在需要时才会被建立;
transaction 负责事务相关的操作,主要有commint()和rollback()
sessionFactory 负责初始化Hibernate,可以看做数据源的代理,SessionFactory是线程安全的,可以同时被多个线程访问。SessionFactory会在hibernate启动时创建一次。
query负责执行各种数据库查询;
configuration:读取配置文件,主要有两种配置文件:1) hibernate.cfg.xml或hibernate.property 配置数据库服务信息,如数据库的驱动,使用的url,用户名和密码等;2)xx.hbm.xml,配置java对象与关系数据库记录的映射关系。

hibernate的缓存技术:
一级缓存由session管理,必不可少
二级缓存由sessionFactory管理,可有可无,需要引入第三方插件,EnCaChe,JbossCache,OSCache,其中Encache比较常用,是一个全局的缓存,可以实现多线程和事务共享。
缓存机制的使用减少了应用程序对物理数据源访问的次数,提供了Hibernate的性能。原则是将当前或者接下来一段时间会用到的数据保存在内存中,在使用时直接从内存中读取,而非从硬盘中读取。使用session查询数据时,首先会在该session内部查找该对象是否存在,若存在,则返回,若不存在,则去查询数据库,并将查询到的结果缓存起来以便后期使用。缺点是生命周期较短,线程不安全的,不能被多个线程共享。

hibernate的分页机制:
Query q=session.createQuery();
q.setFirstResult(起始数据);
q.setMaxResult(数据总数);

session的get()方法和load()方法:
1)若数据库不存在该对象,load()方法返回ObjectNotFoundException,get()方法返回null;
2)get()方法会首先查询一级缓存,没有时查找二级缓存,再去数据库中查找,load()在创建时首先查找session缓存,若没有,则创建代理对象,使用时才查找二级缓存和数据库,因此支持延迟加载。
3)get()方法永远返回实体类,load()方法可以返回实体类的代理类实例
4)get()方法和find()方法会查询数据库,load()方法首先查找session的persistent context中是否有缓存,若有则返回,没有,则判断是否lazy,如果不是,直接访问数据库检索,查到记录返回,查不到抛出异常。若是lazy,则需要建立代理对象,对象的initialized属性为false,target为null。在访问获得的代理对象的属性时检索数据库,若找到记录,将initialized记为true,没有抛出异常。

hibernate的对象有3种状态:持久态,瞬时态和托管态。

猜你喜欢

转载自blog.csdn.net/u013363120/article/details/80868554