Java中Spring、SpringMVC、MyBatis、Hibernate等相关问答

1、Spring依赖注入通常有哪些实现方式?
Spring的实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。
属性setter方法注入是指IOC容器使用setter方法来注入被依赖的实例。通过使用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter方法的依赖注入。
构造方法注入是指IOC容器使用构造方法来注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,没个参数代表着一个依赖。
2、 请简述基于XM的装配方式中设置注入的要求
(1)Bean类必须提供一个默认的无参构造方法
(2)Bean类必须为需要注入的属性提供对应的setter方法
3、请对Spring的通知类型进行简要说明
Spring中主要包含5种通知类型,分别是环绕通知、前置通知、后置通知、异常通知和最终通知。
环绕通知表示在目标方法执行前后实施增强,可以应用于日志、事务管理等功能。
前置通知表示在目标方法执行前实施增强,可以应用于权限管理等功能。
后置通知表示在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能。
异常通知表示在方法抛出异常后实施增强,可以应用于处理异常记录日志等功能。
引介通知表示在目标类中添加一些新的方法和属性,可以应用于修改老版本程序(增强类)。
4、请简述如何使用Junit对程序中的方法进行测试
使用Junit对程序中的方法进行测试时的步骤如下:
(1)先创建一个普通测试方法,并在方法上添加单元测试的注解@Test;
(2)添加@Test注解后,在注解处会报错,将鼠标移动至@Test注解处,会弹出错误提示框,,单击提示框中的Add JUnit4 library to the build path后,Eclipse会自动将JUnit4的支持包加入到项目中;
(3)在执行程序时,只需使用鼠标右键单击测试方法,在弹出的快捷菜单中选择Run As中的JUnit Test选项来运行测试方法即可。
5、请列举PlatformTransactionManager接口提供了有哪些事务操作方法,并对这些方法分别进行简单说明。
PlatformTransactionManager接口中提供了三个事务操作方法开具体如下所示:
(1)TransactionStatus getTransaction (TransactionDefinition definition):用于获取事务状态信息。
(2) void commit (TransactionStatus status):用于提交事务。
(3) rollback(): 用于回滚事务。
6、请简述Hibernate和MyBatis这两个框架的主要区别。
Hibernate是一个全表映射的框架。通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作,开发者并不需要熟练的掌握SQL语句的编写,所以其开发效率会高于MyBatis。而Hibernate自身也存在着一些缺点、例如它在多表关联时,对SQL查询的支持较差;
更新数据时,需要发送所有字段; 不支持存储过程;
不能通过优化SQL来优化性能等。这些问题导致其只适合在场景不太复杂且对性能要求不高的项目中使用。
MyBatis是一第个半自动映射的框架。这里所谓的“半自动”是相对于Hibernate全表映射而言的。
与Hbernate相比,虽然使用MyBatis手动编写SQL要比使用Hibernate的工作量大,但MyBatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。对于一些复杂的和需要优化性能的项目来说,显然使用MyBatis更加合适。
7、请简述元素的作用及使用
<sql>元素的作用就是定义可重用的SQL代码片段,
使用时,先通过元素定义重用的代码片段,然后在需要使用的地方使用元素的refid属性引用了自定义的代码片段。

<sql id=”studentColumns”>id,name,age</sql> 
<select id=”selectStudentById” resultType=”student”>
 		Select
 		<include refid=”studentColumns”/>
 		from student where id=#{id}
<select>

8、请简述MyBatis动态SQL中的主要元素及说明。
<if>:判断语句,用于丹田减分制判断;
<choose><when><otherwise>):相当于Java中的switch…case…default语句,用于多条件分支判断;
<where><trim><set>:辅助元素,用于处理一些SQL拼装、特殊字符问题;
<foreach>:循环语句,常用语in语句等列举条件中;
<bind>:从OGNL表达式中创建一个变量,并将其绑定到上下文,常用于模糊查询的SQL中。
9、请简要说明MyBatis在映射文件中加载关联关系对象的方式。
MyBatis在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果。
嵌套查询是指通过执行另外一条SQL映射语句来返回预期的复杂类型; 嵌套结果是指使用嵌套结果映射来处理重复的联合结果的子集。
10、请简述springMVC的特点
1.用于MVC控制,进行M、V、C划分;
2.是Spring框架的一部分,可以方便的利用Spring所提供的其他功能;
3.灵活性强,易于与其他框架集成;
4.提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象;
5.可自动绑定用户输入,并能正确的转换数据类型;
6.内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入界面。
7.支持国际化。可以根据用户区域显示多国语言。
11、请简述ModelAndView、String和void三种返回类型的作用
ModelAndView类型中可以添加Model数据,并指定视图;
String类型的返回值可以跳转视图,但不能携带数据;
Void类型主要在异步请求时使用,它只返回数据,而不会跳转视图。
12、为什么需要自定义数据绑定
一般情况下,使用基本数据类型和POJO类型的参数数据已经能够满足需求,然而有些特殊类型的参数是无法在后台进行直接跳转的,例如日期数据就需要开发者自定义转换器(Converter)或格式化(Formatter)来进行数据绑定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章