框架原理

作者: 写java的逗比叫z1 | 来源:发表于2016-11-27 22:12 被阅读107次

    1.Spring-mvc原理

    1. 客户端请求提交到DispathcerServlet
    2. 由DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller
    3. DispatcherServlet讲请求提交到Controller
    4. Controller调用业务逻辑处理后, 返回ModelAndView
    5. DispatcherServlet查询一个或多个ViewResoler视图解析器, 找到ModelAndView指定的视图
    6. 视图负责讲结果显示到客户端.

    2.Struts2工作流程

    1. 用户发出一个HttpServletRequest请求
    2. 这个请求经过一系列的过滤器Filter来传送. 如果Struts2 与Site Mesh插件以及其他的框架进行了集成, 则请求首先要经过可选的ActionContextCleanUp过滤器.
    3. 调用FilterDispatcher. FilterDispatcher是控制器的核心, 它通过询问 ActionMapper 来确定该请求是否需要调用某个Action. 如果需要调用某个Action, 则FilterDispatcher就把请求转交给ActionProxy来处理.
    4. ActionProxy通过配置管理器Configuration Manager询问框架的配置文件struts.xml, 从而找到需要调用的Action类.
    5. ActionProxy 创建一个ActionInvocation的实例, 该实例使用命名模式来调用. 在Action执行的前后, ActionInvocation实例根据配置文件加载与Action相关的所有拦截器Interceptor.
    6. 一旦Action执行完毕, ActionInvocation实例根据struts.xml文件中的配置找到相对应的返回结果, 返回结果通常是一个JSP或者FreeMarker的模版.
    7. 最后, HttpServletRequest响应通过web.xml文件中配置的过滤器返回.

    3. Hibernate的工作原理

    1. Hibernate的初始化,创建Configuration对象.

    这一步用来读取xml配置文件和映射文件的信息到Configuration对象的属性中. 具体为

    1. 从Hibernate配置文件Hibernate.cfg.xml中读取配置文件信息, 存放到Configuration对象(内存)中
    2. 根据配置文件中的mapping元素加载所有的实体类对应的映射文件到Configuration

    2. 创建SessionFactory实例.

    通过Configuration对象读取到的配置文件信息创建 SessionFactory, 即将Configuration对象内的配置信息存入SessionFactory的内存(属性)中. SessionFactory充当数据存储源的代理, 并负责创建Session对象. 得到SessionFactory对象后, Configuration对象的使命就结束了.

    3. 创建Session实例, 建立数据库连接.

    Session通过SessionFactory打开, 创建一个Session对象就相当于在数据库建立了一个新的连接. Session对象用来操作实体对象, 并把这些操作专程对数据中数据的增加, 删除, 查询和修改操作.

    4.创建Transaction实例, 开始一个事物

    Transaction用于事物管理, 一个`Transaction对象对应的事物可以包括多个操作, 在使用 Hibernate进行增加, 删除和修改操作时必须先创建Transaction对象.

    5.利用Session的方法进行持久化操作,将实体对象持久化到数据库中.

    6.提交操作结果并结束事物,对实体对象的持久化操作结束后, 必须提交事物

    7. 关闭Session, 与数据库断开连接.

    4.spring事物管理

    • 使用声明式事物管理
    1. 配置Spring JDBC 中的数据源事务管理
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
             <property name="dataSource" ref="dataSource"/>
    </bean>
    
    1. 配置注解式事务处理
    <tx:annotation-driven transaction-manager="txManager"/>
    
    1. 使用声明式事物
    @Transactional
    public Object 业务方法(){
        业务过程
        添加数据
        删除数据
        修改数据
        添加数据
    }
    

    5.MyBatis哪几种方式传参?

    1. 传递单个参数, 直接写就可以, 参数类型可以是String, 也可以是基本类型
    <select id="findById"   parameterType="string" resultType="string">
            select user_name from user where id=#{id}
    </select>
    
    1. 传递单个参数, 参数类型是封装类, xml增加说明
    <insert id="addUser" parameterType="cn.tedu.entity.User">
            insert into user set id=#{id},name=#{name}
    </insert>
    
    1. 传递多个参数, 把参数放在map中, 传递这个map做为参数
    <insert id="addUser"  parameterType="map">
            insert into user set id=#{id}, name=#{name}
    </insert>
    
    1. 直接传参数, 使用@Param标注, 传参使用标注名或者序列
      Java代码:
    public int find(@Param("username")String username,@Param("password")String password);
    

    XML

    <select id="find" parameterType="string" resultType="Integer">
            select count(*) from user 
            where username=#{username} and password=#{password}
    </select>
    

    另一种写法

    <select id="find" parameterType="string" resultType="Integer">
            select count(*) from user 
            where username=#{0} and password=#{1}
    </select>
    
    1. 封装类使用@Param标注, 一般不怎么用, 使用多个实体类才这样做
      Java代码:
    public int update(@Param("user")User user);
    

    XML

    <update id="update" parameterType="cn.tedu.entity.User>
             update user set username=#{user.username}, password=#{password}
             where userid=#{user.id}
    </update>
    

    相关文章

      网友评论

        本文标题:框架原理

        本文链接:https://www.haomeiwen.com/subject/bumnpttx.html