Java5大框架回顾

时间:2022-08-28 12:10:33

一、Hibernate:

    1. Jdbc操作数据库表

      Java5大框架回顾

    2. Hibernate是一个对象关系映射的持久层框架,Jdbc封装后的产物,特点是:操作实体类,就相当于操作了数据库表。

    3. 有两个配置文件:

        映射文件:实体类名.hbm.xml

       1)配置了实体类与数据库表的映射关系,

               配置表与表之间的关系。

       2)主要标签:

           <hibernate-mapping> 

                <class>        //声明实体类与数据库表名

                     <id>         //声明主键及生成策略

                  <property>  //声明实体类属性与数据库表列

              </class>

          </hibernate-mapping>

 

        主配置文件:hibernate.cfg.xml

        1)配置SessionFactory,其中包括数据库信息、Hibernate基本配置和映射文件位置,与Spring

     整合后由Spring管理这些对象。

        2)主要标签:

                <hibernate-configuration> 

                    <session-factory>  

                         <property>   //声明数据库连接信息(数据源),声明Hibernate基本配置,比如:是否输出SQL语句、采用何

               种方式生成表结构...

                       <mapping>    //声明映射文件位置

                  </session-factory>

              </hibernate-configuration>

    4.Hibernate的主要对象解析?

      SessionFactory:

           重量级对象,线程安全,主要用于Session初始化,同一个工厂生产的Session共享工厂数据,它还维护着Hibernate的二

          级缓存。  

      Session:

           Session用于操作数据库,还可以获取事物对象transaction),它维护着Hibernate的一级缓存,是一个轻量级、线程不

    安全的对象。

        注:(1)使用factory.openSession();方法时,为了保证Session线程安全,需要把Session绑定到当前线程,配置即可。

                (2)Session的get()和load()的区别?

                      Get()即立即查询;而Load()查询返回的是一个代理对象,仅初始化了OID属性值,当需要用到其余字段时才去执行

                      查询。

 

    5.Hibernate的对象状态?

     ①.对于刚创建的一个对象,如果session中和数据库中都不存在该对象,那么该对象就是瞬时对象

     ②.瞬时对象调用save方法,或者离线对象调用update方法可以使该对象变成持久化对象,对象是持久化对象时,那么对

   该对象的任何修改,都会在提交事务时才会与之进行比较,如果不同,则发送一条update语句,否则就不会发送语句

     ③.离线对象就是,数据库存在该对象,但是该对象又没有被session所托管

   6.什么是事务,什么时候要用事物?

   (1)涉及到DML(增删改)语句就要使用事务控制

   (2)事务的4个特性:原子性、一致性、隔离性、持久性

  (3)事物的隔离机制:

         Java5大框架回顾

 7.Hibernate的5中查询方式?

 (1)根据Id查询,即Sessionget()load()方法

 (2)对象导航查询,即两个实体有关联时,可以通过一个实体获取另一个实体数据

 (3HQL查询:

          Session.createQuery(String sql);

         特点:类名称代替表名,类属性代替表字段

    (4)QBC查询:

            Session.createQuery(实体类字节码);

            特点:将查询条件优化为方法

           注:QBC查询的离线对象

                  Java5大框架回顾

    (5)原生SQL查询:

            Session.createSQLquery(String sql);

 

 8.Hibernate中的级联操作?

   1)表关系表述:

        //一对多

         <set name="集合属性名称" cascade="" inverse="false" >

               <key column="外键"></key>

              <one-to-many class="集合属性所对应实体类类型"/>

         </set> 

       //多对一

          <many-to-one name="属性名称" class="属性所对应实体类型" column="外键" />

     

   (2)级联操作:

         Cascade属性:取值为save-update,表示级联保存(对象)

                                取值为delete,表示级联删除(对象)

         Inverse属性:只出现set标签上,是否维护关系(外键)

         Fetch属性:查询的方式

         lazy属性:查询的时机

        注:1、当lazy="true"  fetch="select" 时,使用延迟策略,只查询出一端实体,多端的不会查询,只有当用到的时候才会发出

      sql语句去查询。

              2、lazy="false"  fetch = "select" 时,没有使用延迟策略,同时查询出一端和多端,同时产生1+nsql

              3、fetch = "join"时,不管lazy设置为什么,这个时候延迟已经没有什么用了,因为采用的是外连接查询,同时把一

      端和多端都查询出来了。

 

         

二、struts2

  1.struts2用于数据展示的表现层框架,底层是Filter,基于类开发,每个Action都是多例的。

  2.ServletFilter和区别?

   共同点:

         都能处理Url请求,分别通过service();doFilter();实现

   不同点:

          Servlet创建:请求第一次到达Servlet

          Filter创建:应用加载时创建

          Servlet可以通过览浏器访问 ;Filter无法通过浏览器访问。

  3. Struts2的执行流程?

      1Url请求先找到web.xml中配置的struts2的前端总控制器StrutsPerpareAndExecuteFilter ,通过<url-pattern>标签进入

              Filter

      2)找到struts.xml中的action标签明确Action及执行方法

      3)将结果返回页面或Action,根据struts.xml中的<result>标签完成页面或Action跳转

   4. struts2Action类功能及创建?

      struts2默认Action类是ActionSupport,默认方法是excute();所以我们创建Action一般要继承Action接口或Action类的实现类

  ActionSupport类。

  注:public string 方法名(); 可以不使用execute()方法

   5. struts2如何封装请求参数?

      属性驱动:

          提供跟表单属性一直的set()get()方法

      模型驱动:

          必须实现ModelDriven接口,自行实例化对象,并实现抽象方法(返回值就是我们实例化的对象)

   6.struts的配置文件struts.xml

      <struts>

            <constant> 用于设置struts2的一些特性,name属性取值 struts.devMode :开启开发者模式

                               struts.action.extension:修改默认拦截后缀

            <package> 设置包属性,比如extends属性取值struts-default,我们的包就继承了struts的核心功能;namespace属性

          设置名称空间

                      <action> 用于建立与Action类、方法的对应关系

                     <result> 根据返回值跳往指定页面或Actiontape属性指定请求转发或重定向

           <package>  

      <struts>   

  7.struts2如何获取三大域对象和ValueStack对象?

     Struts2提供ActionContext工具类,通过ActionContext.getContext(); 获取ActionContext对象

 

  8.struts2如何自定义拦截器?

    (1)自定义拦截器类继承interceptor接口的实现类MethodFilterInterceptor

    (2)struts.xml中声明拦截器并配置全局结果视图

 

  9.struts2的页面取值?

   1EL表达式:将对象放到3大域中,直接使用${ }取值

   2OGNL表达式(配合struts2标签):

       1.Struts2的数据都封装OGNL上下文中,Map数据结构,key值包括requestsessionapplicationValueStack  ...

       2.在值栈中取值即取根元素值不用加#: <s:property value="user.name"/> 

       3.3大域中取值即非根元素值需加#:<s:property value="#session.Session_data"/>

       4.OGNL表达式中%的作用:

        用于通知执行环境%{}里的是OGNL表达式:<s:property value="%{#session.Session_data}"/>

 

三、Spring

  1.Spring的AOP及具体应用?

    Aop原理:

          将重复代码提取出来,运用代理方式增强目标方法

  具体应用:Spring事物

        1)Spring配置事务有编程式和声明式事务两种,声明式事务中包括注解式事务和配置文件式事务两种

        2)配置文件式事物详解:

               第一步:在Spring配置文件中创建transactionManager

               第二步:配置事务通知,声明所需事务方法的事务隔离级别、传播行为和是否只读

              第三步:配置切点,声明方法所属包

              第四步:配置切面,将通知织入切点

  

  2.Spring的IOC和DI?

     IOC即控制反转,是一种思想,而DI即依赖注入是具体实现。我们将对象的创建及维护交给了IOC容器,有别于我们传统new

  的方式;而DI技术,应该从依赖和注入两方面讲,注入是为了初始化对象,有两种方式:构造方法和set()方法注入;依赖是

  指对象依赖关系,比如Service层对象和Dao层对象。

 

四、SpringMvc

1.SpringMvc的运行流程?

 (1)用户请求先找到web.xml中配置的Spring前端控制器DispatcherServlet

   2) 处理器映射器:完成Url与目标方法的映射,将获取到的Handler返回控制器

   3) 处理器适配器:执行处理器Handler,处理请求后返回ModelAndView到控制器

   4) 视图解析器:将view对象返回控制器(Url)

   5) DispatcherServlet将视图渲染,响应请求

 

 2.SpringMvc的注解式开发?

1)首先配置Spring注解开发:< context:component-scan base-package = "包路径" />

   该标签的作用是:扫描指定包下的类,注册被@Component,@Controller@Service,@Repository等注解标记的组

   件。

2)配置SpringMvc注解驱动< mvc:annotation-driven />

        该标签的作用是启用注解驱动,Spring会自动注册RequestMappingHandlerMapping 

   RequestMappingHandlerAdapter、ExceptionHandlerExceptionResolver对象来映射并处理请求及异

   常,也是@Controller注解使用的前提配置。

3)配置注解支持:

         <context:annotation-config/>

4)常用注解:

         @RequestMapping :用于处理请求地址的映射,value属性指定请求路径、method属性指定请求方式等6个属性

         @Resource@Autowired:都用于bean对象的注入使用,@Resourcename和type两个属性,默认按照

                                                       ByName注入,也可以使用ByType注入;@Autowired只能类型注入

         @ResponseBody:不需要返回视图,而是返回Json数据时用。

         @RequestParam 获取绑定的请求参数(get方式)

         @PathVariabl获取路径中的参数

3. SpringMvc支持的方法参数类型?

  1)HttpServlet对象,主要包括HttpServletRequest、HttpServletResponse和HttpSession对象,需要使用时声明即可。  

  2)使用@PathVariable 、@RequestParam标记的参数。  

 (3)通过bean来接收表单数据

  4)Model和ModelMap,用于封装模型数据,展示数据

 (5)Spring封装的MultipartFile,用来接收上传文件的 

  4.SpringMvc支持的返回值类型?

     ModelAndView ModelMapView、字符串(即视图名称)、void

  5.SpringMvc与struts2的区别?

 (1)springmvc的入口是servlet即前端控制器,而struts2入口是一个filter过虑器。

 (2)springmvc是基于方法开发一个url对应一个方法,建议单例,struts2是基于类开发,传递参数是通过类的属性,只能

    设计为多例。

 (3)Struts采用值栈存储响应数据,通过OGNL数据, springmvc将数据和视图封装成ModelAndView对象,由控制器渲

    染后响应页面。

6. SpringMvc中的自定义拦截器?

      SpringMvc使用HandlerInterceptor接口实现请求拦截,该接口定义了3个方法,实现了方法前拦截、处理完请求返回结果

      前拦截、方法后拦截功能。

     自定义拦截器--->配置拦截器--->配置拦截Url

7.SpringMvc中的文件上传?

  Spring提供了文件解析器CommonsMultipartResolver,在from表单上添加enctype="multipart/form-data",解析器会自

 动识别;在Controller中使用MultipartFile对象来接收文件对象。

8.SpringMvc中的自定义异常?

 1)Java的异常处理机制?

      Java的异常可以是方法中语句执行引发,也可以手动抛出,通常出现异常时,我们就用一个Java定义的异常类封装异

      常,Jvm会自动寻找异常处理程序来处理异常。


2)Java中的异常分类?

    Throwable是异常的顶层父类,由它派生出Erro类和Exception类,Erro类代表Jvm本身错误,不能被我们处理的错误;我们

    主要关注的Exception类,我们可以通过代码规避的异常。

 运行时异常:

      RuntimeException及其子类,这类异常不要求我们必须处理,一般是代码问题,比如错误的类型转换

 (ClassCastException)、数组索引越界(ArrayIndexOutOfBoundsException)、空对象异常(NullPointerException...

 非运行时异常:

  除了Error 和 RuntimeException的其它异常。这类异常强制要求的异常,在方法中要么用try-catch语句捕获它并处理或抛

  出,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。


    3)自定义异常类

         自定义异常类扩展Exception类即可,按照国际惯例,自定义异常类 包含一下一种或几种构造函数:

          · 一个无参构造函数

          · 一个带有String参数,并传递给父类的构造函数。

          · 一个带有String参数和Throwable参数,并都传递给父类构造函数

          · 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

   4)SpringMvc自定义异常解析器类?

         SpringMvc中使用HandlerExceptionResolver 接口实现异常捕获,我们需要实现resolveException();如果是系统异常则

   强制转换Exception异常返回,不是则返回自定义异常信息。

        注:别忘记在springmvc.xml配置

 

五、Mybatis

 1.Mybatis的开发流程?

       Mybatis与Hibernate一样是封装了Jdbc,是针对数据库操作的框架,在Mybatis中的主要对象是sqlsessionFactory,由它生产的SqlSession对象封装了对数据库的所有操作,开发中有两种方式,传统的Dao层开发和Mapper接口代理的方式,其中区别就是一个有实现类一个没有,但代理式开发需要注意接口方法要与mapper.xml中的配置一一对应。

 

 2.sqlMapConfig.xml主配置文件中使用较多的标签?

   1)<bean>:sqlsessionFactory对象,配置了数据源、主配置文件位置等

             注:SqlSession中封装了对数据库的操作。

      注:该标签用于Spring的配置文件

   2)<typeAliases> :别名,简写冗长的JAVA 类名

           注:mapper.xml文件中,定义很多的statement,statement需要 resultType指定输出结果的映射类型。

   3)<plugins>:配置插件

   4)<environments>:配置mybatis环境

   5)< mappers>:映射器(mapper.xml子配置文件的路径)

   6)<settings>:是指定MyBatis的一些全局配置属性,如:开启驼峰映射等

 

3.Mapper.xml子配置文件?

  1)Dao层接口与mapper.xml的关联?

          1、接口与其对应的xml文件必须放同一包

         2、Mapper.xml文件中的namespacemapper接口的类路径相同,保证唯一性

         3、Mapper接口方法名Mapper.xml中定义的每个statement的id相同

         4、Mapper接口方法的输入参数类型mapper.xml中的每个sql 的parameterType的类型相同

        5、Mapper接口方法的输出参数类型mapper.xml中的每个sql的resultType的类型相同

 

 2)实体类与表的映射及关联关系?

         Java5大框架回顾

        注:当实体类间存在关联关系时,也需要在<resultMap>标签中表述

  

 3Mapper.xml中配置了什么?

      要执行的sql语句


4. mybatis的通用mapper和分页插件?

 

   (1)通用mapper?

       优点:

          通用mapper是mybatis的一个插件,封装了对数据库操作的方法,针对一些简单的增删改查时,就不用再编写

      mappe.xml,简便开发。

          缺点:

         只能单表查询,需要多表时,就只能通过编写mapper.xml实现。

         使用:

         1.mybatis主配置文件中配置通用mapper插件

         2.Dao层接口需要实现Mapper接口

         3.修改pojo,实现与数据库表的映射,通过JPA注解:(如:@Id、@Column)

         注:JPAHiberbate注解式开发所必须的,HibernateJPA的一种实现。

       亮点方法:

         updateByPrimaryKeySelective(Obj);会忽略null,使用时直接把需要修改的属性设置到对象即可。

(2)分页插件?

     分页插件是基于mybatis的一个分页工具。

     使用:

        1.mybatis主配置文件中配置分页插件

        2.PageHelper分页插件拦截器类,

            -->PageHelper.startPage();开启分页,紧跟在这个方法后的第一Mybatis查询方法会被进行分页。

                参数:当前页和每页显示的条数

        3.PageInfo类封装了分页信息,需要用到分页信息时,用PageInfo对结果进行包装即可