zoukankan      html  css  js  c++  java
  • hibernate、struts、spring mvc的作用

    Hibernate工作原理及为什么要用?
    原理:
    1.读取并解析配置文件
    2.读取并解析映射信息,创建SessionFactory
    3.打开Sesssion
    4.创建事务Transation
    5.持久化操作
    6.提交事务
    7.关闭Session
    8.关闭SesstionFactory

    为什么要用:
    1.    对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

    2.    Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

    3.    hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

    4.    hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

    Hibernate是如何延迟加载?
    1.  Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)

    2. Hibernate3 提供了属性的延迟加载功能

    当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

    Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

    类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、

    说下Hibernate的缓存机制

    1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存

    2. 二级缓存:
    a) 应用及缓存
    b) 分布式缓存
    条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据
    c) 第三方缓存的实现

    注: 一级缓存和二级缓存和査询缓存

    a) 什么是缓存

    b) 什么是一级缓存,session级别的缓存

    c) I什么是二级缓存,SessionFactory级别的缓存,可以跨越session存在

    i. 经常被访间

    ii. 改动不大不会经常改动

    iii. 数重有限

    d) 打开二级缓存

    i. hibernate.cfg.xml 设定:

    name= "cache.use_second_level_cache">true

    name="cache.provider_class">org.hibernate.cache.EhCacheProvider

    ii. @Cache注解(由hibernate扩展提供)

    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE) 

    注:使用EhCache二级缓存 需要导入ehcache-1.2.3.jar及commons-logging-1.0.4.jar包

    e) load默认使用二级缓存,iterate默认使用二级缓存

    f) list默认往二级缓存加数据,但是查询的时候不使用

    g) 如果要query用二级缓存,需打开查询缓存

    ="cache.use_query_cache">true

    调用Query的setCachable (true)方法指明使用二级缓存

    h) 缓存算法:

    i. LRU  LFU  FIFO

    1. Least Recently Used

    2. Least Frequently Used

    3. First In First Out 

    ii. memoryStoreEvictionPolicy = "LRU"

    list和iterate不同之处:

    a) list取所有

    b) iterate先取 ID,等用到的时候再根据ID来取对象

    c) session中list第二次发出,仍会到数据库査询

    d) iterate 第二次,首先找session 级缓存

    Hibernate的查询方式
    Sql、Criteria,object comptosition
    Hql:
    1、 属性查询
    2、 参数查询、命名参数查询
    3、 关联查询
    4、 分页查询
    5、 统计函数

           NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)

           QL应该和导航关系结合,共同为査询提供服务。

     1+N问题

    a) @ManyToOne(fetch=FetchType.LAZY) 

    //fetch=FetchType.LAZY 解决N+1问题 说明如下:

    //当多对一(@ManyToOne)已经设定属性" fetch=FetchType.LAZY "时 

    //只有当需要时(:t.getCategory().getName())才会去获取关联表中数据 可以解决N+1问题

    b) @BatchSize

    //@BatchSize 解决N+1问题 说明如下:

    //在与查询表(此例中为Topic)关联的表类(此例中为Category)头处加@BatchSize(size=5)

    //表示每次可查出5条记录 从而减少了select语句的个数

    c) join fetch

    //join fetch 解决N+1问题 说明如下:

    //修改hql语句为--"  from Topic t left join fetch t.category c  "

    d) QBC

             //QBC(Query By Criteria) 解决N+1问题 说明如下:

            //使用QBC的 createCriteria(*.class)执行查询 也可避免N+1问题

    如何优化Hibernate?
    1.使用双向一对多关联,不使用单向一对多
    2.灵活使用单向一对多关联
    3.不用一对一,用多对一取代
    4.配置对象缓存,不使用集合缓存
    5.一对多集合使用Bag,多对多集合使用Set
    6. 继承类使用显式多态
    7. 表字段要少,表关联不要怕多,有二级缓存撑腰


     Struts工作机制?为什么要使用Struts?
    工作机制:
    Struts的工作流程:
    在web应用启动时就会加载初始化ActionServlet,ActionServlet从
    struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
    当ActionServlet接收到一个客户请求时,将执行如下流程.
    -(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
    -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
    -(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
    -(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
    -(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的                    Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
    -(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
    -(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

    为什么要用:
    JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。

    基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件

    Struts的validate框架是如何验证的?
    在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。

     Struts的设计模式
    MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数 据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对 象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动 态的网页,返回给客户。

    spring工作机制及为什么要用?
    1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
    2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
    3.DispatcherServlet请请求提交到目标Controller
    4.Controller进行业务逻辑处理后,会返回一个ModelAndView
    5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
    6.视图对象负责渲染返回给客户端。

    为什么用:
    AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务  (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
    IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。
    Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。

  • 相关阅读:
    对文件的操作
    三级菜单优化
    三级菜单项目
    对字符串的操作(一些重要的方法)
    四、saltstack如何管理对象?
    三、saltstack证书管理
    二、saltstack基础配置
    一、saltstack简介和安装
    set集合
    异常处理语法
  • 原文地址:https://www.cnblogs.com/printN/p/6415997.html
Copyright © 2011-2022 走看看