《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》_课后习题

第五章

【思考题】

1、请简述Spring中事务管理的两种方式。

2、请简述如何使用Annotation方式进行声明式事务管理。

【答案】

1、Spring中的事务管理分为两种方式:一种是传统的编程式事务管理,另一种是声明式事务管理。其中,编程式事务管理是通过编写代码实现的事务管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚。声明式事务管理是通过AOP技术实现的事务管理,其主要思想是将事务管理作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”代码植入到业务目标类中。

声明式事务管理最大的优点在于开发者无需通过编程的方式来管理事务,只需在配置文件中进行相关的事务规则声明,就可以将事务规则应用到业务逻辑中。这使得开发人员可以更加专注于核心业务逻辑代码的编写,在一定程度上减少了工作量,提高了开发效率。

2、Spring的声明式事务管理通过Annotation(注解)方式来实现时,开发者只需做两件事情:

1)在Spring容器中注册事务注解驱动,其代码如下:

2)在需要使用事务的Spring Bean类或者Bean类的方法上添加注解@Transactional。如果将注解添加在Bean类上,则表示事务的设置对整个Bean类的所有方法都起作用;如果将注解添加在Bean类中的某个方法上,则表示事务的设置只对该方法有效。

第六章

【思考题】

1、请简述MyBatis框架与Hibernate框架的区别。 2、请简述MyBatis的工作执行流程。

【答案】

1、Hibernate和MyBatis。这两个框架的主要区别如下:

(1)Hibernate:是一个全表映射的框架。通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作。开发者并不需要熟练的掌握SQL语句的编写,Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口来执行,所以其开发效率会高于MyBatis。然而Hibernate自身也存在着一些缺点,例如它在多表关联时,对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化SQL来优化性能等。这些问题导致其只适合在场景不太复杂且对性能要求不高的项目中使用。

(2)MyBatis:是一个半自动映射的框架。这里所谓的“半自动”是相对于Hibernate全表映射而言的,MyBatis需要手动匹配提供POJO、SQL和映射关系,而Hibernate只需提供POJO和映射关系即可。与Hibernate相比,虽然使用MyBatis手动编写SQL要比使用Hibernate的工作量大,但MyBatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。对于一些复杂的和需要优化性能的项目来说,显然使用MyBatis更加合适。

2、MyBatis框架的工作执行流程如下:

(1)读取MyBatis配置文件mybatis-config.xml。 (2)加载映射文件Mapper.xml。 (3)构建会话工厂。

(4)创建SqlSession对象。

(5)使用Executor接口来操作数据库。

(6)使用MappedStatement类型的参数对映射信息进行封装。 (7)输入参数映射。 (8)输出结果映射。

第七章

【思考题】

1、请简述MyBatis核心对象SqlSessionFactory的获取方式。 2、请简述MyBatis映射文件中的主要元素及其作用。

【答案】

1、SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例,通过XML配置文件构建出的SqlSessionFactory实例,其实现代码如下:

// 读取配置文件

InputStream inputStream = Resources.getResourceAsStream(\配置文件位置\// 根据配置文件构建SqlSessionFactory SqlSessionFactory sqlSessionFactory =

new SqlSessionFactoryBuilder().build(inputStream);

2、在映射文件中,元素是映射文件的根元素,其他元素都是它的子元素。这些子元素及其作用如下所示:

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4