avatar

ssm知识整理

resultType和resultMap的区别是什么?

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key–>value关系),但是resultType跟resultMap不能同时存在。

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

MyBatis传参的几种方式?

1、 按照序列入参
2、 第二种:基本数据类型(parameterType=”xxx”)(接口方法声明参数中可使用注解@param(“xx”),一个参数时可以不用加@param,多个参数是就要用@param了。)
3、 JAVA实体类
4、 Map

mapper元素的namespace属性的作用是什么?

在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。
当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句

谈谈你对association和collection元素的理解

Association映射到javabean的某个复杂数据类型,比如javabean类,即javabean内部嵌套一个复杂数据类型属性这种情况属于复杂类型的关联,但association仅处理一对一的关联关系
Collection和association的作用差不多,只是映射的属性是个集合列表,是javabean内部嵌套的一个复杂数据类型(集合)属性

实现动态SQL的主要元素有哪些?

If:简单的条件查询
Choose:相当于java中的switch语句通常和when和otherwise搭配
Where:简化SQL语句中的where条件判断
Set:解决动态更新语句
Trim:可以去除灵活的关键字
Foreach:迭代一个集合通常与in连用

什么是数据持久化?

是程序数据在瞬时状态和持久状态间转换的过程

简述SqlSessionFactoryBuild

负责构建SqlSessionFactory,并提供多个build方法的重载

SqlSessionFactoryBuilder SqlSessionFactory、SqlSession的生命周期和作用域

SqlSessionFactorBuildr用过即丢,最佳范围存在方法体内,也就是局部变量而已。
SqlSessionFactory对象一旦创建,就会在整个应用运行期间始终存在它的生命周期和应用同存在
SqlSession对应一次数据库会话

Spring两大核心技术?

SpringIOC(控制反转/依赖注入)
SpringAOP(面向切面编程)

如何理解SpringIOC?

SpringIOC即控制反转/依赖注入,是面向对象编程中的一种设计理念,用来降低程序之间的耦合度

如何理解SpringAOP ?

SpringAop即面向切面编程,是面向对象编程的扩展,一般适用于具有横切逻辑的场合,如控制事物,事物管理、性能检测,SpringAOP简单来说就是在不改变原有代码的情况下增加新功能

Spring有哪些优点?

低侵入式设计
独立于各种应用服务器
依赖注入特性将组件关系透明化,降低耦合度
通用任务集中处理
与第三方框架的良好整和

如何通过属性文件配置数据源?

使用Spring提供的PropertyPlaceholderConfigurer类加载属性文件,在Spring配置文件中采用${ ……}的方式引用属性文件中的键值对

如何加载JNDI数据源?

Spring提供引用JNDI资源的JndiObjectFactoryBean类来调用

简述Bean的作用域有几种?

1、singleton,单例模式,bean的实例只有一个
2、protopyte,每次容器获取bean时,都会创建一个新的实例
3、request,用于web应用环境,针对每次的http请求都会创建一个实例
4、session,同一个会话共享一个实例,不同的会话使用不同的实例
5、global,仅在Porplet的web环境中使用,同一个全局会话共享一个实例。对于非Porplet环境等同于session

简述自动装配都有几种类型?

ByName byType constructor

列举获取映射接口实例,实现数据操作的几中方式:

1、使用MapperFactoryBean注入映射器
2、使用MapperScannerConfigurer注入映射器

简述声明事务配置的步骤:

配置步骤
导入tx和aop命名空间
定义事务管理器Bean,并为其注入数据源Bean
通过tx:advice配置事务增强,绑定事务管理器并针对不同方法定义事务规则
配置切面,将事务增强与方法切入点组

什么是SpringMVC设计模式

数据访问接口:Dao层
处理业务逻辑层:Service层
数据实体层:Pojo
负责访问前端请求和处理:Servlet
负责前段页面展示:jsp
M:Model即数据模型—java
V:view即视图—jsp
C:controllor即控制器—Servlet

简述SpringMVC的请求流程:

当用户发送URL请求时,web.xml中的DispatcherServlet会截获请求,根据HandlerMappering找到对应的Controller来处理请求,Controller处理完成后,返回ModelAndView对象,该对象告诉DispatcherServlet需要通过哪个视图来进行数据模型展示,最后Dispatcher Servlet根据视图解析器把Controller返回的逻辑视图转换成view返回给用户界面

什么是单例模式?

系统运行期间,只有一个实例
具体来说有一下三个关键点:
1、一个类只有一个实例
2、它必须自行创建这个实例
3、它必须自行向整个系统提供这个实例

SpringMVC如何处理多文件上传?

1、表单页面加上file标签
2、单独入参,控制器处理

SpringMVC中服务器端的数据如何实现验证的?

1、利用Spring自带的验证框架
2、利用JSR303实现(java为bean数据合法性检验所提供得标准框架,SpringMVC支持JSR303标准得校验框架 JSR303通过在bean属性上标注类似于0)

简述REST风格

表述性状态转移,是一种软件架构风格,即使用URL表示资源时,每个资源都用一个独一无二的URL来表示,并使用HTTP方法白送和i操作,即准确的描述服务器对资源的处理动作(GET、POST、PUT、DELETE),并实现资源得增删改查

@PathVariable得用法:

接受REST风格URL中得参数

@ResponseBody注解的用法?

该注解的作用是将标注该注解的处理方法的返回结果直接写入HTTP ResponseBody中,一般情况下该注解都会在异常处理数据时使用,被其标注的处理方法返回的数据将会输出到响应流中,客户端获取并显示数据

SpringMVC中输出json数据时,对于日期格式应该如何处理?

1、注解方式:@JSONField(format= “yyyy-MM-dd”)
2、配置FastJson的消息转换器-FastJsonHttpMessageConverter
设置features属性:指定输出时的日期转换器为WriteDateUseDateFormat

ContentNegotiatingViewResolver 视图解析器的应用理解?

可以根据请求所要求的MIME类型决定由哪个视图解析器负责处理,它允许以同样的内容数据来呈现不同的View

简述SSM框架整合的步骤?

1、建项目导jar包
2、配置web.xml中的SpringMVC的核心控制器DispatcherServlet
3、配置applicationContext-Mybatis.xml Spring配置文件 database.properties log4j.propertise mybatis-config.xml Springmvc-servlet.xml
4、事务管理配置SqlSessionFactoryBean MapperScannerConfiguer
5、对象数据模型pojo
6、数据访问接口Dao
7、系统服务接口 sevices
8、前端控制层controller
9、Tools工具类
10、前端页面jsp和静态资源statics

面向过程编程,面向对象编程和面向切面编程理解

面向过程(ProcedureOriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。
面向对象编程(ObjectOriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向切面编程(AspectOriented Programming(AOP)),是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

怎么理解SpringAOP?

SpringAOP是一种通过预编译和运行期间动态实现代理的方式实现了不修改代码的情况下给程序动态添加新功能的技术。

SpringAOP增强处理类型有哪些?

前置增强 (org.springframework.aop.BeforeAdvice) 表示在目标方法执行前来实施增强
后置增强 (org.springframework.aop.AfterReturningAdvice) 表示在目标方法执行后来实施增强
环绕增强 (org.aopalliance.intercept.MethodInterceptor) 表示在目标方法执行前后同时实施增强
异常抛出增强 (org.springframework.aop.ThrowsAdvice) 表示在目标方法抛出异常后来实施增强
引介增强 (org.springframework.aop.introductioninterceptor) 表示在目标类中添加一些新的方法和属性

IoC 主要的实现形式有两种 :

依赖查找:容器提供回调接口和上下文环境给组件。 EJB 和 Apache Avalon 都是使用这种方式。
依赖注入:组件不做定位查询,只是提供普通的 Java 方法让容器去决定依赖关系。容器全权负责组件的装配,它会把符合依赖关系的对象通过 JavaBean 属性或者构造子传递给需要的对象。通过 JavaBean 属性注射依赖关系的做法称为设值方法注入( Setter Injection );将依赖关系作为构造子参数传入的做法称为构造子注入( Constructor Injection )。

AOP在Spring中的实现

基于AOP,业界存在各种各样的AOP实现,比如,JBoss AOP、Spring AOP、ASP ectJ、 Aspect Werkz等。各自实现的功能也不一样。AOP实现的强弱在很大程度上取决于连接点模型。目前,Spring只支持方法级的连接点。这和一些其他AOP框架不一样,如AspectJ和JBoss,它们还提供了属性接入点,这样可以防止你创建特别细致的通知,如对更新对象属性值进行拦截。然而,由于 Spring关注于提供一个实现J2EE 服务的框架,所以方法拦截可以满足大部分要求,而且Spring的观点是属性拦截破坏了封装,让Advice触发在属性值改变而不是方法调用上无疑是破坏了这个概念。

1、添加jar包
2、编写前置增强、后置增强等
3、编写spring配置文件applicantionContent.xml
4、编写代码,获取增强处理的对象

Spring的AOP框架的关键点如下:

(1)Spring实现了AOP联盟接口。在SpringAOP中,存在如下几种通知(Advice)类型
Before通知:在目标方法被调用前调用,涉及接口org.springFramework .aop.MethodBeforeAdvice;
After通知:在目标方法被调用后调用,涉及接口为org.springframework.aop.AfterReturningAdvice;
Throws通知:目标方法抛出异常时调用,涉及接口org.springframework.aop.MethodBeforeAdvice;
Around通知:拦截对目标对象方法调用,涉及接口为org.aopalliance.intercept.MethodInterceptor。
(2)用Java编写Spring通知,并在Spring的配置文件中,定义在什么地方应用通知的切入点。
(3)Spring的运行时通知对象。代理Bean只有在第一次被应用系统需要的时候才被创建。如果你使用的是ApplicationContext,代理对象在BeanFactory载入所有Bean的时候被创建。Spring有两种代理创建方式。如果目标对象实现了一个或多个接口暴露的方法,Spring将使用JDK 的 java.lang.reflect.Proxy类创建代理。这个类让Spring动态产生一个新的类,它实现所需的接口,织入了通知,并且代理对目标对象的所有请求。如果目标对象没有实现任何接口,Spring使用CGLIB库生成目标对象的子类。在创建这个子类的时候,Spring将通知织入,并且将对目标对象的调用委托给这个子类。此时,需要将Spring发行包lib/cglib目录下的JAR文件发布到应用系统中。

文章作者: guardianss
文章链接: https://guardianss.github.io/ssm%E7%9F%A5%E8%AF%86%E6%95%B4%E7%90%86.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Guardian
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论