Java5大框架回顾

一、Hibernate:

    1. Jdbc操作数据库表

     

    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>  

                    //声明数据库连接信息(数据源),声明Hibernate基本配置,比如:是否输出SQL语句、采用何种方式生成表结构...

                     <property> 

                     <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)事物的隔离机制:

        

 7.Hibernate的5中查询方式?

 (1)根据Id查询,即Session的get()和load()方法

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

 (3)HQL查询:

          Session.createQuery(String sql);

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

    (4)QBC查询:

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

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

            注:QBC查询的离线对象

                 

    (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+n条sql。

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

        

二、struts2(与spring整合链接

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

  2.Servlet和Filter和区别?

   共同点:

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

   不同点:

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

          Filter创建:应用加载时创建

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

  3. Struts2的执行流程?

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

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

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

   4. struts2的Action类功能及创建?

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

      注:public string 方法名(); 可以不使用execute()方法,但是需要注意:  访问修饰符必须是public,返回值必须是String,不能有参数。

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

      属性驱动:

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

      模型驱动:

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

   6.struts的配置文件struts.xml?

      首先命名必须是struts.xml,且必须在src目录下:

     struts2中的标签:

      <struts>

           //设置struts2的一些特性,name属性取值 struts.devMode :开启开发者模式,struts.action.extension:修改默认拦截后缀

          <constant>

           //设置包属性,比如extends属性取值struts-default,我们的包就继承了struts的核心功能;namespace属性设置名称空间

          <package>

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

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

           <package>  

       <struts>   

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

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

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

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

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

  9.struts2的页面取值?

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

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

       1.Struts2的数据都封装OGNL上下文中,Map数据结构,key值包括request、session、application、ValueStack  ...

       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对象的注入使用,@Resource有name和type两个属性,默认按照ByName注入,也可以使用ByType注入;而@Autowired只能类型注入

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

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

         @PathVariable :获取路径中的参数

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

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

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

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

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

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

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

     ModelAndView 、ModelMap、View、字符串(即视图名称)、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文件中的namespace与mapper接口的类路径相同,保证唯一性

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

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

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

 

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

        

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

  

 (3)Mapper.xml中配置了什么?

          要执行的sql语句

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

   (1)通用mapper?

       优点: 通用mapper是mybatis的一个插件,封装了对数据库操作的方法,针对一些简单的增删改查时,就不用再编写 mappe.xml,简便开发。

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

       使用:

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

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

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

          注:JPA是Hiberbate注解式开发所必须的,Hibernate是JPA的一种实现。

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

(2)分页插件?

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

     使用:

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

        2.PageHelper分页插件拦截器类,其PageHelper.startPage();开启分页,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页。参数:当前页和每页显示的条数

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

       

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值