SSM框架测试题整理(下)

仅供个人学习使用

目录

29. 简述Mybatis的插件运行原理,以及如何编写一个插件?

 30. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

31. Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别? 

 32. Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 

33. Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?

34. MyBatis里面的动态Sql是怎么设定的?用什么语法?

35. Mybatis都有哪些Executor执行器?它们之间的区别是什么? 

36. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

 37. 简单介绍下你对mybatis的理解?

38. 介绍一下Spring的事物管理?

39. SSM优缺点、使用场景?

40. 如果你也用过struts2.简单介绍下springMVC和struts2的区别有哪些?

41.  怎么样把数据放入Session里面? 

42. MyBatis(IBatis)的好处是什么?

43. Bean 工厂和 Application contexts 有什么区别?

44. 解释Spring支持的几种bean的作用域?

45. 什么是bean的自动装配?

46. 什么是基于Java的Spring注解配置?给一些注解的例子?

47. 使用Spring通过什么方式访问Hibernate?

48. 如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

49. 在Spring AOP 中,关注点和横切关注的区别是什么?

50. AOP作用是什么,底层如何实现在哪些地方会用到,分别简述切面,切入点和通知? 

51. Spring中AutoWired和,Resource之间区别是什么?


28. 谈谈你对SpringMVC的理解?

SpringMVC是Spring框架的一个模块,它提供了一种简化的方式来构建Web应用程序。SpringMVC遵循MVC(Model-View-Controller)设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种分离关注点的方法有助于管理复杂的应用程序,提高了代码的可维护性和可测试性。在SpringMVC中,用户请求首先被前端控制器(DispatcherServlet)拦截,然后映射到相应的Controller处理,Controller处理完业务逻辑后,返回一个包含视图名称的ModelAndView对象,最后由视图解析器(ViewResolver)解析视图名称并渲染视图。

29. 简述Mybatis的插件运行原理,以及如何编写一个插件?

Mybatis插件是一种在Mybatis执行操作过程中,介入并改变其行为的机制。插件可以拦截Mybatis的四个生命周期方法:beforePrepare(准备语句之前)、prepare(准备语句之后)、beforeExecute(执行语句之前)和afterExecute(执行语句之后)。编写Mybatis插件需要实现Interceptor接口,并重写这些方法。然后,在Mybatis配置文件中注册插件,Mybatis会在初始化时加载插件,并在执行SQL时调用插件的拦截方法。

30. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

Mybatis支持延迟加载,通常称为“懒加载”。懒加载的实现原理是,当应用程序请求某个对象的关联对象时,Mybatis会为这个关联对象生成一个代理对象。当代理对象被访问时,Mybatis才会实际执行查询并填充数据。这种机制可以减少数据库查询的次数,提高应用程序的性能。

31. Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别? 

Mybatis可以执行一对一和一对多的关联查询。实现方式包括:

  • 嵌套查询:在查询一个对象的同时,嵌套查询其关联对象,并将结果映射到不同的对象中。
  • 嵌套结果映射:使用<association><collection>标签在Mybatis映射文件中定义嵌套结果映射。
  • 延迟加载:对于一对多的关系,Mybatis可以使用延迟加载,即当实际访问集合属性时才执行查询。 它们之间的区别主要在于查询的时机和性能。嵌套查询通常在单次查询中获取所有数据,而延迟加载则在访问时才查询,可能影响性能。

32. Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 

Mybatis通过结果映射将SQL执行结果封装为目标对象。映射形式包括:

  • 结果映射(ResultMap):在映射文件中定义一个结果映射,指定列名和对象属性之间的映射关系。
  • 简单映射:对于简单的结果集,Mybatis可以直接将列名映射到对象属性。
  • 关联映射(Association):用于一对一关系,将一个结果集的列映射到一个对象的属性,并嵌套另一个结果映射。
  • 集合映射(Collection):用于一对多关系,将一个结果集的列映射到一个集合属性,并嵌套另一个结果映射。

33. Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?

在Mybatis映射文件中,<include>标签用于复用其他SQL语句。被引用的标签(B)必须在引用它的标签(A)之前定义,因为Mybatis在解析映射文件时是顺序的,如果引用的标签在定义之前,Mybatis无法找到对应的SQL语句。

34. MyBatis里面的动态Sql是怎么设定的?用什么语法?

Mybatis中的动态SQL允许在XML映射文件中编写动态构建的SQL语句。它使用一系列的XML标签来构建条件语句,如<if><choose><when><otherwise><trim><where><set>等。这些标签可以根据传递给Mybatis方法的参数动态地构建SQL语句,使得SQL语句可以根据运行时的数据进行调整。例如,使用<if>标签可以条件性地包含SQL片段,而<choose><when><otherwise>则可以实现类似于Java中的if-else逻辑。

35. Mybatis都有哪些Executor执行器?它们之间的区别是什么? 

Mybatis提供了两种类型的Executor执行器:

  • SimpleExecutor:每次执行操作都会创建一个新的Statement对象,用完立刻关闭,不关心传输结果的关闭。适合查询操作,不适合批量操作。
  • ReuseExecutor:会复用Statement对象,可以提高性能,但需要注意资源释放的问题。适合执行批量操作。
  • BatchExecutor:专门用于批量操作的执行器,会缓存批量操作,减少数据库交互次数,提高性能。

36. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

Mybatis被称为半自动ORM映射工具是因为它需要手动编写SQL语句,而全自动ORM工具(如Hibernate)会根据实体类和映射关系自动生成SQL。Mybatis提供了更多的灵活性和控制,允许开发者优化SQL语句,而全自动ORM工具则提供了便利性,减少了编码工作量。

37. 简单介绍下你对mybatis的理解?

Mybatis是一个持久层框架,它简化了数据库交互操作。Mybatis使用XML或注解方式定义SQL映射,将接口方法与SQL语句关联起来,通过代理机制自动填充SQL参数并返回结果集到Java对象。Mybatis支持延迟加载、缓存、事务管理等特性,是一个灵活且高效的数据访问层解决方案。

38. 介绍一下Spring的事物管理?

Spring提供了声明式事务管理,允许开发者通过配置和注解来管理事务。Spring事务管理器(PlatformTransactionManager)负责包装数据源,并提供事务控制。Spring支持编程式事务管理和声明式事务管理两种方式,后者通过@Transactional注解简化了事务管理代码。Spring事务管理器支持多种事务传播行为和隔离级别。 

39. SSM优缺点、使用场景?

SSM(Spring + SpringMVC + Mybatis)是一种常见的Java Web应用架构:

  • 优点:模块化设计,提高了代码的可维护性;灵活的事务管理;支持多种数据访问技术;易于测试和扩展。
  • 缺点:学习曲线较陡峭;可能存在过度配置的问题。
  • 使用场景:适用于需要复杂业务逻辑处理、高并发处理和可扩展性的大型企业级应用。

40. 如果你也用过struts2.简单介绍下springMVC和struts2的区别有哪些?

  • 架构差异:SpringMVC更轻量级,基于注解的配置更简洁;Struts2基于XML配置,较为繁琐。
  • 拦截器:SpringMVC使用Interceptor,而Struts2使用Interceptor。
  • 数据绑定:SpringMVC使用Spring的绑定机制,更灵活;Struts2使用OGNL表达式。
  • 结果视图:SpringMVC支持多种视图技术,Struts2主要使用JSP。
  • 性能:SpringMVC通常性能更优,因为它避免了不必要的拦截器调用。

41.  怎么样把数据放入Session里面? 

在Spring MVC中,可以通过在Controller方法中注入HttpSession对象,然后使用setAttribute方法将数据放入Session中:

@RequestMapping("/login")
public String login(HttpSession session, User user) {
    session.setAttribute("user", user);
    return "loginSuccess";
}

42. MyBatis(IBatis)的好处是什么?

  • 灵活性:MyBatis 允许开发者编写原生 SQL,提供了很大的灵活性。
  • 性能:由于可以优化 SQL,MyBatis 通常能提供比全自动 ORM 框架更好的性能。
  • 简单性:与全自动 ORM 框架相比,MyBatis 的学习曲线较平缓,易于上手。
  • 可维护性:SQL 与 Java 代码分离,提高了代码的可维护性。
  • 缓存机制:提供了一级和二级缓存机制,可以显著提高查询性能。

43. Bean 工厂和 Application contexts 有什么区别?

  • BeanFactory:是 Spring 框架的基础设施,提供基本的依赖注入功能。
  • ApplicationContext:扩展了 BeanFactory,提供了更多的高级功能,如事件传播、国际化消息支持、资源访问等。
  • 应用范围:BeanFactory 通常用于轻量级的应用,而 ApplicationContext 适用于需要更多企业级功能的应用。
  • 启动速度:BeanFactory 启动速度比 ApplicationContext 快。
  • AOP 支持:ApplicationContext 提供了更好的 AOP 支持。

44. 解释Spring支持的几种bean的作用域?

  • singleton:默认作用域,每个 Spring IoC 容器中相同 Bean 定义只创建一个 Bean 实例。
  • prototype:每次请求都会创建一个新的 Bean 实例。
  • request:每个 HTTP 请求都会创建一个新的 Bean,仅适用于 WebApplicationContext 环境。
  • session:在一个 HTTP Session 中,一个 Bean 定义对应一个 Bean 实例。
  • application:每个 ServletContext 会创建一个 Bean 实例,仅适用于 WebApplicationContext 环境。
  • websocket:对于每个 WebSocket 会话,一个 Bean 定义对应一个 Bean 实例。

45. 什么是bean的自动装配?

Bean 的自动装配是指 Spring IoC 容器自动将 Bean 的依赖关系注入到其他 Bean 中的过程。Spring 通过分析 Bean 的属性,找到匹配的 Bean 定义,并自动进行赋值。自动装配可以通过 XML 配置或注解来实现。

46. 什么是基于Java的Spring注解配置?给一些注解的例子?

基于 Java 的 Spring 注解配置是一种不使用 XML 文件,而是通过在代码中添加注解来配置 Spring 容器的方法。常见的注解包括:

  • @Component:声明一个 Spring 组件。
  • @Service:声明一个服务层组件。
  • @Repository:声明一个数据访问组件。
  • @Controller:声明一个控制层组件。
  • @Autowired:自动装配依赖。
  • @Qualifier:当有多个同类型的 Bean 时,用于指定具体要装配哪一个。
  • @Configuration:定义配置类。

47. 使用Spring通过什么方式访问Hibernate?

Spring 通过集成 Hibernate 的 SessionFactory 来访问 Hibernate。Spring 管理 SessionFactory 的生命周期,并提供事务管理支持。可以通过 Spring 的 LocalSessionFactoryBean 来配置 SessionFactory

48. 如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

HibernateDaoSupport 是 Spring 提供的一个支持类,它提供了基础的 Hibernate DAO 功能,包括 SessionFactory 的注入和事务管理。通过继承 HibernateDaoSupport,可以简化 Hibernate 操作的配置和使用。

49. 在Spring AOP 中,关注点和横切关注的区别是什么?

  • 关注点(Concern):在软件工程中,关注点是指在特定场景下需要考虑的特定功能或行为。
  • 横切关注(Cross-cutting concern):横切关注是指那些影响多个模块或组件的关注点,它们通常会跨越整个应用的多个点,在 Spring AOP 中通常通过切面(Aspect)来实现。

50. AOP作用是什么,底层如何实现在哪些地方会用到,分别简述切面,切入点和通知? 

AOP(面向切面编程)的作用是将横切关注点(如日志、事务管理等)与业务逻辑分离,提高代码的模块化和可重用性。底层通常通过动态代理或使用字节码操作库(如 ASM、CGLIB)实现。

  • 切面(Aspect):包含横切关注点的逻辑。
  • 切入点(JoinPoint):指代业务逻辑中的特定点,如方法的执行。
  • 通知(Advice):切面在切入点上的具体行为,如方法执行前后的逻辑。

51. Spring中AutoWired和,Resource之间区别是什么?

  • @Autowired:自动装配 Bean,可以通过类型来装配,也可以通过名称来装配。
  • @Resource:JSR-250 注解,用于注入 Bean,只能通过名称来装配,如果没有指定名称,则默认按照类型来装配。@Autowired 是 Spring 特有的,而 @Resource 是 Java 标准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值