版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课后习题答案项目一1.MyBatis对比传统JDBC的优、劣势及适用场景?答:(1)优势代码精简:省去JDBC重复的加载驱动、创建连接、创建Statement、手动设置参数、结果集封装、关闭资源等样板代码,开发效率更高。解耦SQL与代码:SQL语句独立写在XML/注解中,和Java代码分离,便于SQL维护、优化与版本管理。自动结果映射:支持实体类与数据库字段自动映射,无需手动遍历ResultSet封装数据。参数自动处理:内置参数绑定机制,避免JDBC拼接SQL产生的SQL注入问题。灵活可控:保留原生SQL特性,支持动态SQL、复杂查询、存储过程,适配各类业务场景。配置灵活:支持日志、分页、缓存、插件扩展等功能,生态完善。(2)劣势学习成本:相比原生JDBC,需要学习XML/注解映射规则、框架配置、API使用。轻度冗余:简单单表操作,需额外编写映射文件/注解,比纯JDBC略显繁琐。弱对象化:不同于全自动ORM框架,仍需手写SQL,无法做到完全面向对象操作数据库。性能微小损耗:框架封装、反射、代理等机制,相比原生JDBC存在极少量性能开销。(3)适用场景传统企业级项目、互联网业务系统:业务SQL复杂、多表联查、动态查询多,需要灵活手写SQL。对SQL可控性要求高:需要DBA优化SQL、精细化调优、手写复杂SQL的场景。遗留系统改造:已有大量原生SQL,不想完全重构,希望平滑迁移。中等规模项目:兼顾开发效率与SQL灵活性,不追求全自动化ORM。不适用场景:极简单表CRUD、快速原型、纯面向对象且完全不想编写SQL的场景。2.SqlSessionFactory、SqlSession的作用、生命周期,以及SqlSession非线程安全原因?答:(1)SqlSessionFactory作用:MyBatis核心工厂对象,负责创建SqlSession实例;内部封装了全局配置信息(环境、映射文件、插件、缓存等)。生命周期:全局单例,应用整个生命周期。项目启动时创建,整个运行期间只实例化一次,应用销毁时才释放。(2)SqlSession作用:MyBatis核心会话对象,是程序和数据库的交互入口,负责执行CRUD、事务提交/回滚、获取Mapper代理对象。生命周期:单次请求/单次方法。一次数据库操作使用一个SqlSession,操作完成立即关闭,不能长期持有。(3)SqlSession非线程安全原因SqlSession内部包含数据操作状态、事务状态、执行器(Executor)、缓存、会话级变量等成员变量。多线程并发访问时,多个线程会共用同一份成员变量,造成数据覆盖、事务混乱、查询结果错乱,因此不能多线程共享,每次请求必须新建独立SqlSession。3.映射器接口与SQL映射文件关联方式;无映射文件时的工作原理?答:(1)映射器接口与SQL映射文件的关联方式依靠四大绑定规则实现接口与XML映射文件自动绑定:Mapper接口的全限定类名=XML映射文件的namespace命名空间。接口中的方法名=XML中<select>/<insert>/<update>/<delete>标签的id属性。接口方法入参类型对应SQL语句的参数类型。接口方法返回值类型对应SQL查询结果的封装类型。满足以上规则,MyBatis会自动将接口方法与对应SQL绑定,调用接口方法即执行对应SQL。(2)仅使用映射器接口、无XML映射文件时的工作原理依靠MyBatis注解实现,属于注解式开发:在Mapper接口的方法上直接添加注解:@Select、@Insert、@Update、@Delete,将SQL语句直接写在注解内。MyBatis启动时扫描Mapper接口,解析方法上的注解,直接生成SQL语句与映射关系。调用接口方法时,框架读取注解中的SQL,完成参数绑定、执行SQL、结果封装,整个流程不再依赖XML映射文件。项目二1.<resultMap>中<id>和<result>的区别;单个Mapper.xml定义多个<resultMap>?答:(1)<id>与<result>区别<id>:用于映射数据表主键字段。MyBatis会把该字段值作为实体对象的唯一标识,在缓存、关联查询、数据去重、对象比对时优先使用,能提升框架运行效率与数据准确性。<result>:用于映射数据表普通非主键字段,仅完成数据库列与实体类属性的基础映射,无额外特殊逻辑。(2)单个Mapper.xml定义多个<resultMap>在同一个映射文件中直接编写多个<resultMap>标签,为每个标签设置唯一的id属性作为标识,即可区分使用。还可通过extends属性实现映射配置继承,复用已有规则。示例:xml<resultMapid="rm1"type="com.entity.User"><idcolumn="uid"property="id"/><resultcolumn="uname"property="name"/></resultMap><resultMapid="rm2"type="com.entity.Role"><idcolumn="rid"property="roleId"/><resultcolumn="rname"property="roleName"/></resultMap>2.什么是MyBatis关联映射?答:关联映射是MyBatis针对数据库表与表之间的主外键关联关系(一对一、一对多、多对多)提供的映射功能。多表联查时,可自动将关联表的查询数据,封装到对应的关联实体类中。其中一对一关联使用<association>标签,一对多/多对多关联使用<collection>标签,简化了多表查询结果的手动封装工作。3.MyBatis一级缓存与二级缓存的主要区别?答:(1)作用范围一级缓存:SqlSession会话级别,仅当前数据库会话有效;二级缓存:Mapper映射器级别,跨SqlSession会话共享。(2)默认状态一级缓存:默认开启,无需手动配置;二级缓存:默认关闭,需要手动配置才能启用。(3)生命周期一级缓存:会话关闭、事务提交/回滚、手动清空缓存时,数据立即失效;二级缓存:服务运行期间持续生效,对应Mapper执行增删改操作、重启服务或手动清空时才失效。(4)共享特性一级缓存:线程私有,不同会话无法互相访问;二级缓存:全局共享,所有使用该Mapper的会话都可命中缓存。项目三1.动态SQL与静态SQL的主要区别?答:静态SQL:语句内容在编译阶段就已固定,结构、查询条件、参数数量无法在运行时改变,执行逻辑单一,适用于查询条件固定的场景。动态SQL:MyBatis提供的语法标签,可在程序运行阶段根据传入参数动态拼接、增减SQL片段,灵活组合查询条件、排序、批量操作等。核心差异:静态SQL结构写死;动态SQL可随业务参数动态变化,适配多条件组合查询等复杂业务。2.<foreach>元素用途及示例?答:(1)主要用途<foreach>用于遍历数组、List集合,常实现批量查询、批量新增、批量删除,典型场景:in多值查询、批量操作数据。(2)常用属性collection:指定遍历的集合/数组item:遍历后单个元素别名open:遍历开始拼接的字符close:遍历结束拼接的字符separator:元素之间的分隔符(3)使用示例(根据多个ID批量查询用户)Mapper.xml代码:<!--批量根据id查询用户--><selectid="listUserByIds"resultType="com.entity.User">SELECTid,name,ageFROMuserWHEREidIN<foreachcollection="ids"item="id"open="("close=")"separator=",">#{id}</foreach></select>接口方法:List<User>listUserByIds(List<Integer>ids);项目四答案:一、单选题答案1.D;2.D;3.A。二、填空题1.耦合度2.IOC容器3.横切关注点三、综合题1.IOC(控制反转)通过将对象的创建和依赖关系的管理交给外部容器,使得对象只关注自身业务逻辑,不直接负责依赖对象的创建。这样降低了对象之间的耦合度,同时让每个对象更专注于自身核心功能,提高了内聚性。2.AOP中的“通知”是在特定连接点执行的额外代码逻辑,包括前置通知、后置通知、环绕通知等。作用是将横切关注点(如日志、安全、事务)从业务逻辑中分离出来,增强功能且提高代码复用性。3.AOP在日志记录中可用于记录方法调用、异常信息和性能数据等。优势在于代码简洁,不与业务逻辑混杂;可维护性高,修改日志方式无需改动业务代码;可复用性强,可在多处复用相同的日志记录逻辑。项目五一、单选题答案1.A;2.A;3.A。二、填空题答案1.@Component2.@Pointcut3.控制反转,即将对象的创建和管理交给容器,而不是由开发者直接创建对象。项目六一、单选题答案1.B;2.D。二、判断题答案1.×;2.×;3.×。三、综合题1.请简述Spring与MyBatis的整合步骤。首先添加Spring和MyBatis的依赖以及数据库驱动依赖。配置数据源,可以选择DriverManagerDataSource等。配置SqlSessionFactoryBean,关联数据源并指定MyBatis的XML映射文件位置(如果有)。可以选择使用MapperFactoryBean逐个创建Mapper接口实例,或者使用MapperScannerConfigurer自动扫描包路径下的所有Mapper接口并注册为Spring的Bean。如果需要事务管理,可以通过XML配置方式配置事务管理器并开启事务注解驱动,或者在方法上使用@Transactional注解进行声明式事务管理。2.请解释注入式映射器的两种方式的区别和适用场景。MapperFactoryBean:逐个创建特定的Mapper接口实例,适用于需要精细控制单个Mapper接口创建的情况,配置相对简单明了,但如果有多个Mapper接口,需要逐个配置。MapperScannerConfigurer:自动扫描指定包路径下的所有Mapper接口并注册为Spring的Bean,适用于有多个Mapper接口且不需要逐个精细配置的情况,配置一次可以扫描多个接口,但可能在一些复杂场景下不够灵活。3.请说明在Spring与MyBatis的整合中,声明式事务管理的重要性及实现方式。重要性:确保数据的一致性和完整性,避免数据不一致的问题,使得开发人员无需在每个数据库操作方法中手动管理事务的开启、提交和回滚,提高开发效率和代码的可维护性。实现方式:XML配置方式:配置事务管理器,如DataSourceTransactionManager,开启事务注解驱动<tx:annotation-driven/>。注解添加方式:在需要事务管理的方法上添加@Transactional注解。项目七一、单选题答案1.A;2.C;3.B。二、判断题答案1.×;2.×。解释:Spring可以通过properties文件、JNDI数据源、XML配置等多种方式配置数据源。解释:singleton表示在整个Spring容器中只有一个实例被创建。三、填空题答案1.@Scope;3.properties。项目八(1)SpringMVC具有非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API。(2)SpringMVC十分国际化,可以根据用户区域显示多国语言。(3)SpringMVC支持多种视图技术,如JSP、Velocity和FreeMarker等。(4)SpringMVC使用简单,灵活性强,易扩展。2.(1)客户端发送HTTP请求到DispatcherServlet(前端控制器)。(2)DispatcherServlet通过HandlerMapping找到对应的Controller及方法。(3)DispatcherServlet调用HandlerAdapter执行Controller方法。(4)Controller处理业务,返回ModelAndView(或数据+视图名)。(5)DispatcherServlet使用ViewResolver解析出具体视图。(6)视图渲染模型数据并生成响应。(7)响应返回给客户端。项目九@Controller用于标识一个类为SpringMVC控制器,负责处理HTTP请求。(1)引入SpringMVC依赖。(2)在类上添加@Controller注解。(3)配置组件扫描(ComponentScan)(4)返回视图名称或通过Model传递数据@RequestMapping用来映射HTTP请求到处理方法,常见属性如下:(1)value/path:指定请求的URL路径(最常用)(2)method :指定HTTP请求方法(GET、POST、PUT、DELETE等)(3)params :限定请求中必须包含(或不包含)某些参数(4)headers:限定请求头条件(5)consumes:限定请求的Content-Type(如application/json)(6)produces:限定响应的Content-Type(如application/json)项目十@RequestParam用于将HTTP请求参数绑定到控制器方法的形参上,其常用属性及作用如下:value/name:指定请求参数的名称(如?id=1中的id),当形参名与参数名不一致时必须显式指定。required:设置参数是否为必传项,默认值为true(未传则抛出异常),设为false时可允许参数缺失。defaultValue:指定参数的默认值,当请求中未包含该参数或参数为空时生效,避免空值异常。@RequestBody用于将HTTP请求体(Body)中的数据绑定到控制器方法的参数上,核心作用包括:接收前端通过POST、PUT等方法提交的JSON、XML等格式的数据;底层通过HttpMessageConverter(如Jackson)将请求体内容反序列化为Java对象;主要用于前后端分离的RESTfulAPI开发,解决复杂数据(如对象、数组)的接收问题。String、ModelAndView和void三种方法返回值的区别如下:返回值类型说明是否经过视图解析器String返回逻辑视图名(如"user"),由视图解析器拼接前缀后缀定位物理视图。是ModelAndView同时封装视图名和模型数据,既指定跳转页面又传递业务数据。是void不返回视图,通常通过HttpServletResponse直接输出响应(如JSON、文件流)。否@ResponseBody用于将控制器方法的返回值直接写入HTTP响应体,而非解析为视图,核心作用包括:跳过SpringMVC的视图解析流程(ViewResolver);将返回值通过HttpMessageConverter转换为JSON、XML等格式(默认JSON);常用于Ajax请求和RESTfulAPI,实现前后端数据交互(如返回对象、集合等数据)。项目十一(1)使用SimpleMappingExceptionResolver简单异常处理器:该类是SpringMVC提供的HandlerExceptionResolver接口实现类,可在SpringMVC配置文件中配置异常与页面的映射关系,将不同异常跳转到指定页面,还能设置默认异常处理页面和异常信息变量名,实现异常统一处理。(2)实现HandlerExceptionResolver接口自定义异常处理器:自定义类实现该接口,重写resolveException()方法拦截控制器抛出的异常,根据异常类型分类处理并返回ModelAndView对象跳转页面,将处理器注册到Spring容器后即可全局处理异常。(3)使用@ControllerAdvice+@ExceptionHandler注解组合:@ControllerAdvice标记全局异常处理类,@ExceptionHandler指定要捕获的异常类型,在方法中编写异常处理逻辑,实现对所有控制器的指定异常进行统一处理。啊啊啊(1)单个拦截器的执行流程:①程序接收请求后,首先执行拦截器的preHandle()方法:若返回false,请求中断,后续流程不再执行;若返回true,请求放行,继续执行控制器(Handler)方法。②控制器方法正常执行时:执行完控制器后,执行拦截器的postHandle()方法,再由DispatcherServlet渲染视图并返回响应,最后执行afterCompletion()方法。③控制器方法出现异常时:跳过postHandle()方法,直接由DispatcherServlet渲染异常页面,最后执行afterCompletion()方法。(2)多个拦截器的执行流程①preHandle()方法:按照配置文件中拦截器的注册顺序正序执行;②执行目标控制器(Handler)方法;③postHandle()方法:按照配置顺序逆序执行;④视图渲染完成后,afterCompletion()方法:按照配置顺序逆序执行;⑤若控制器方法执行时出现异常:所有拦截器直接跳过postHandle(),仅逆序执行afterCompletion()方法。(1)form表单的method属性必须为post:文件上传数据量大,get方式有长度限制,无法完成文件上传。(2)form表单的enctype属性必须设置为multipart/form-data:表示以二进制流的方式提交表单数据,支持文件传输。(3)表单中必须包含文件上传控件:即使用<inputtype="file"/>标签,用于选择本地需要上传的文件。核心方法是对中文文件名进行统一的URL编码处理,具体步骤:(1)使用URLEncoder.encode()工具类,按照UTF-8编码格式对中文文件名进行编码;(2)在响应头Content-Disposition中拼接编码后的文件名,格式为attachment;filename=编码后的文件名;(3)提前设置响应编码与内容类型,确保浏览器正确解析。项目十二SSM框架整合的核心是由Spring作为核心容器,将SpringMVC和MyBatis分别与Spring进行整合,具体思路如下:(1)搭建项目基础结构,创建数据库、引入Maven依赖、编写实体类、搭建Dao/Service/Controller三层架构模块。(2)整合Spring与MyBatis:在Spring配置文件中配置数据源,将SqlSessionFactory对象和Mapper接口代理对象交由Spring管理。(3)整合Spring与SpringMVC:项目启动时,通过配置分别加载Spring和SpringMVC的配置文件,完成Web层与业务层的整合。(4)整体整合完成后,客户端发送请求,SpringMVC接收请求、Service
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规章制度安全培训试题
- AI在乐器维修与制作中的应用
- 医院临床危急值报告制度
- 7.《鹿角和鹿腿》课件(共24张)
- 快消行业+SaaS软件+有哪些?5大厂商横评与选型指南
- 2026年中国GEO生成式引擎优化服务商综合排名白皮书
- 围术期脏器保护与长期转归研究进展2026
- 2026福州国企面试题库及答案
- 2026宝职院单招面试题库及答案
- 2026年中医温热疗法预防烧伤护理指南试题
- 2026高考数学新高考I卷真题
- 2026云南黄金矿业集团股份有限公司第一次招聘工作人员13人笔试参考题库及答案详解
- 2026广东广州市海珠区凤阳街道第二批招聘雇员3人笔试模拟试题及答案详解
- 2026福建厦漳泉城际铁路有限责任公司社会招聘34人考试备考试题及答案解析
- (2026年)如何做好艾滋病患者的全程管理课件
- AI在生物质能源与材料中的应用
- 眉山市东坡区招聘社区网格员真题附答案详解
- 前列腺问题常见表现阐释及护理建议
- 2026春小学美术冀美版(2024)三年级下册教案(附目录)
- 2026年小学生科学实验技能竞赛试题试卷考试及答案
- 2026年生物制药研发技术职称考试题库
评论
0/150
提交评论