讲讲我们常用的框架(SSH与SSM的对比)

1. SSH与SSM有什么区别

           SSH指的是:Struts+Spring+hibernate

           SSM指的是:Spring+SpringMVC+MyBatis

    通过上面的对比我们可以明确知道 两大集成框架 主要的区别就在 Struts和SpringMVC的区别以及Hibernate和MyBatis的区别。接下来我们先谈谈Struts 和SpringMVC的区别。    

2.Struts 和SpringMVC的区别    

      ①  Struts2 的核心是基于一个Filter即StrutsPreparedAndExcuteFilter (核心过滤器)
             SpringMvc的核心是基于一个Servlet即DispatcherServlet(前端控制器)

      ②  SpringMVC是基于方法设计,而Struts2是基于类,每次发一次请求都会实例一个Action

      ③  SpringMVC使用更加简洁,开发效率SpringMVC比Struts2高,支持JSR303,处理ajax请求更加方便

      ④  Struts2的OGNL表达式使页面的开发效率相比SpringMVC更高些

3.Hibernate与mybatis区别

开发效率方面:

①. 在hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发

②. Mybatis属于半自动化,sql需要手工完成,稍微繁琐

SQL优化方面:

①. Hibernate自动生成SQL,有些语句较为繁琐,会多消耗一些性能

②. MyBatis手动编写SQL,可以避免不需要的查询,提高系统性能

对象管理方面:

①. hibernate是完整的ORM框架,开发过程中,无需过多关注底层实现,只需要管理对象即可

②. MyBatis需要自行管理映射关系

4.Hibernate的缓存机制和mybatis的缓存机制

Hibernate缓存包括两大类:

①  Hibernate一级缓存又称为“Session的缓存”

只存在于session的生命周期中,当session关闭时,该session所管理的一级缓存也会被立即清除。该缓存由Hibernate管理,应用程序无须干预

②  Hibernate二级缓存又称为“SessionFactory的缓存”

存在于整个应用程序中,一个应用程序对应一个SessionFactory。该缓存可以进行配置和更改,并且可以动态加载和卸载,hibernate为查询结果提供了一个查询缓存,它依赖于二级缓存

 

MyBatis提供了查询缓存来缓存数据,以提高查询的性能,MyBatis的缓存分为一级缓存和二级缓存。

①  MyBatis 一级缓存又称为"SqlSession级别的缓存"

基于HashMap本地缓存,当同一个sqlSession执行两次相同的SQL语句时,第一次执行完后会将数据库中查询到的结果写到缓存,第二次查询时直接从缓冲中读取不经过数据库了。注:一级缓存默认时开启的

② MyBatis 二级缓存又称为"SqlSession级别的缓存"

mapper级别的缓存,也是基于hashmap本地缓存,不同的sqlSession两次执行相同的namespace下的sql语句,第二次查询就不会进行数据库了。

Spring

1.Spring是什么以及Spring的优点

①. Spring的核心是IOC和AOP

②. Spring是非侵入式的,基于Spring开发的应用一般不依赖于Spring的类

③. Spring是个容器,因为它包含并且管理应用对象的生命周期和配置,比如对象的创建、销毁、回调等

④. Spring提供对事务的管理

⑤. Spring对主流的框架提供了很好的集成支持,比如和hibernate SpringMVC等框架的集成

2.讲一讲你对AOP和IOC的理解

                  AOP:面向切面编程,aop的本质就是拦截器。比如在项目当中的事务和日志就是最好体现。比如:操作数据库的删改之前,都需要开启事务,增删改之后,都需要提交事务,这样我们就可以写一个拦截器,底层就是采用动态代理实现前置通知和后置通知,在前置通知中开启事务,在后置通知中提交事务,在spring.xml中配置通知即可,spring的事务管理底层就用到了AOP。

                  IOC:Invert  of  control 称控制反转,也称为DI(依赖注入)。依赖对象的创建和维护交给spring容器来管理,应用程序,本身不需要负责依赖对象的创建和维护。或者可以来理解,把原本应该我们去new对象这个操作转到spring容器中执行。

3.Spring的注入方式有哪些

①. setter注入 

如果依赖关系比较复杂,那么构造方法注入方式会导致构造方法就会很大,就可以使用setter注入

②. 构造注入

避免繁琐的setter方法的编写,所有的依赖关系均在构造方法中设定,依赖关系集中体现

③. 接口注入

注:已经被遗弃(具备侵入性)

4.如何定义bean的作用域,作用域之间的区别

①. singleton:单例模式(默认),每个容器中之后一个bean的实例。

②. prototype:原型模式,为每一个bean请求提供一个实例。

5.什么是spring的自动装配?并解释一下自动装配的各种模式

spring的自动装配:无需在Spring配置文件中描述Javabean之间的依赖关系,IOC容器会自动创建Javabean之间的关联关系。

①. 根据属性名称:autowire=”byName”

②. 根据数据类型:autowire=”byType”

③. 根据构造方法:autowire=”constructor”

6.可以在spring中注入null或者空字符串吗

可以

注入null值
<property name=”email”><null/></property>
注入空字符串:
<property name=”email” value=””></property>

7.Spring如何配置数据库驱动

①  使用c3p0数据库连接池

②  使用DriverManagerDataSource数据源来配置数据库驱动

https://blog.csdn.net/a772304419/article/details/79309839

8.springmvc怎么防止SQL注入

使用SpringMVC的拦截器实现防止SQL注入

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值