ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

JavaEE期末高频考点:MyBatis、Spring、Spring MVC三大模块核心得分点解析

JavaEE期末高频考点:MyBatis、Spring、Spring MVC三大模块核心得分点解析

简介:本资源是面向高校JavaEE课程学习者的期末复习题库,聚焦MyBatis框架核心知识点的系统性巩固与应试训练,覆盖ORM原理、SQL映射配置、事务管理、模糊查询安全、动态SQL及工作流程等关键考点。题库以标准四类题型(填空、判断、选择、简答)组织,内容深度匹配教学大纲,包含第1章初识MyBatis、第2章核心配置等模块,每道题目均附详细解析,便于自测、查漏与考前强化。资源为单文件docx文档,结构清晰、排版规范,41KB轻量易下载,适合作为课堂补充、课后练习及期末冲刺资料。目前已有2646人学习下载,内容紧扣实践痛点——如#{}与${}的安全差异、concat()函数的局限性、 命名空间作用、SqlSession事务提交要求等,帮助学生扎实掌握MyBatis底层机制与开发规范。

1. JavaEE期末考什么?别再死背概念了,这3个模块占分72%,答错一道就丢5分

JavaEE期末不是考你能不能默写<resultMap>的子元素顺序,而是考你能不能在看到一段报错日志时,立刻判断出是<set>没闭合、<if>里写了==还是=、或者@Transactional根本没生效——这些才是阅卷老师手里的“扣分黑匣子”。整张卷子85%以上分值集中在MyBatis(32%)、Spring核心容器与Bean管理(25%)、Spring MVC执行流程(15%)三大模块,其余AOP、动态SQL等属于“锦上添花型考点”,但一旦出题就是多选/简答压轴题。尤其注意:填空题第1空、判断题第3题、选择题第4题,这三类位置常年固定为高频失分点;而简答题几乎必考“工作原理类”描述,比如“MyBatis怎么把XML里的<select>变成JDBC PreparedStatement”,光写“读配置→建工厂→开Session”得一半分,必须写出MappedStatement如何封装SQL参数、Executor如何调用StatementHandler才算踩中得分关键词。适合正在突击复习、手里有老师划的重点但总卡在“知道但写不全”的人——这份题库不是让你从零学,是帮你把已知内容焊死在得分点上。

2. MyBatis核心考点:从<delete>到concat(),5个必考陷阱题全拆解

2.1 填空题高频考点:命名空间、SQL注入、全局配置三连击

考点本质:考的是对MyBatis配置文件结构的肌肉记忆,不是理解深度。

  • 第1章填空第1题:“MyBatis的删除操作在映射文件中是通过配置【 】元素来实现的”——答案必须是<delete>,不能写“delete标签”或“delete语句”。阅卷规则:错一个字符全扣,因为这是最基础的XML元素名。
  • 第1章填空第2题:“<mapper>元素包含一个【 】属性”——答案是namespace,不是name或id。这里埋了坑:很多学生混淆<mapper>的namespace和<sql>的id,但namespace是作用域标识,id是代码片段标识,二者不可互换。
  • 第1章填空第3题:“使用MySQL中的【 】函数进行字符串拼接”——答案是concat(),但要注意题干后半句“可以有效防止模糊查询时可能出现的SQL注入问题”是错误前提!concat()本身不防注入,它只是拼接函数;真正防注入的是#{}占位符预编译机制。这道题考的是你敢不敢质疑题干——判断题第3题就直接问“concat()能否防注入”,答案是“错”。

提示:所有填空题答案必须严格按题库原文填写,<delete>带尖括号,concat()带括号,namespace全小写。写成DELETE、CONCAT、NameSpace一律0分。

2.2 判断题致命误区:事务提交、根元素、面向对象写法

高频翻车现场:学生凭直觉判断,结果3道题全错。

  • 判断题第1题:“<mappers>元素是配置文件的根元素”——错。根元素是<configuration>,<mappers>只是它的子元素;而映射文件(Mapper.xml)的根元素才是<mapper>。这里考的是两级配置文件结构:mybatis-config.xml(全局) vsUserMapper.xml(映射)。
  • 判断题第2题:“引入lib目录全部JAR包即可运行”——错。必须排除mybatis-x.x.x-sources.jar和mybatis-x.x.x-javadoc.jar,这两类源码包会导致ClassNotFoundException。实际部署只留mybatis-x.x.x.jar+数据库驱动+commons-logging。
  • 判断题第5题:“SQL语句要以面向对象的写法书写”——错。MyBatis的SQL是标准SQL,不是HQL;#{id}是参数占位符,不是对象属性调用。Hibernate才写from User u where u.name = ?,MyBatis写SELECT * FROM user WHERE id = #{id}。

2.3 选择题辨析难点:D选项永远是“看起来对实则错”的陷阱

答题心法:先看D选项,90%的“错误说法”题,D就是答案。

  • 第1章选择题第1题:“MyBatis的删除操作和添加操作一样,也需要封装整个实体类”——D错。删除只需传入主键值(如deleteById(Integer id)),不需要new User()再setID;而添加必须传完整实体类。这是MyBatis“半自动ORM”的体现:查/删/改可按需传参,不像Hibernate强制POJO。
  • 第1章选择题第2题:“只需要将insert()方法改为update()方法即可”——D错。SqlSession.update()第一个参数是Mapper接口方法全限定名(如com.dao.UserDao.updateUser),不是简单改方法名;且update()的第二个参数必须是包含更新字段的Map或实体类,不能复用insert()的参数结构。
  • 第1章选择题第3题:“使用concat()函数也无法防止SQL注入”——C错。concat()本身不参与预编译,但若配合#{}使用(如WHERE name LIKE CONCAT('%', #{keyword}, '%')),依然安全;只有${}拼接CONCAT('%', '${keyword}', '%')才危险。题干偷换概念,把“函数能力”和“使用方式”混为一谈。

2.4 简答题踩分点:工作原理必须出现这4个关键词

阅卷潜规则:写满8条只给6分,但漏掉以下任意1个关键词,直接扣2分:

  • SqlSessionFactoryBuilder(不是SqlSessionFactory!前者是构建器,后者是工厂)
  • MappedStatement(必须写全称,不能简写为MS)
  • Executor(强调其“动态生成SQL”的职责,不是“执行SQL”)
  • StatementHandler(它是Executor的下级组件,负责真正调用JDBC)
    正确答案示范:

(1)SqlSessionFactoryBuilder读取mybatis-config.xml,解析出数据源、事务管理器等环境信息;
(2)SqlSessionFactory根据环境信息创建SqlSession;
(3)SqlSession调用Executor,Executor根据MappedStatement中定义的SQL模板和参数,动态生成PreparedStatement;
(4)StatementHandler接管PreparedStatement,设置参数并执行executeUpdate();
(5)ResultSetHandler处理返回结果,映射为Java对象。

2.5 易错题:这5个点90%考生当场写崩

错在哪 → 为什么错 → 怎么答对

  1. 填空第3题写CONCAT或concat不加括号
    → 错因:MySQL函数名区分大小写,CONCAT()在Linux服务器报错;题干明确写“MySQL中的【 】函数”,函数名必须带括号表示调用动作。
    → 答对:严格写concat(),小写+括号,这是SQL语法规范。

  2. 判断题第4题认为“删除操作不用事务提交”
    → 错因:混淆了“自动提交模式”和“MyBatis事务控制”。即使数据库设为autocommit=true,MyBatis仍要求显式调用sqlSession.commit(),否则delete()执行后数据不落库。
    → 答对:所有增删改操作(insert()/delete()/update())都必须commit(),查(select())除外。

  3. 选择题第1题选A(<delete>元素实现删除)却忽略D是更错的选项
    → 错因:多选题题干是“有关说法错误的是”,A本身正确,但题目要求选“错误说法”,必须找D这种绝对错误项。
    → 答对:先扫一遍选项,标记所有“绝对化表述”(如“必须”“一样”“只需”),这类90%是错误答案。

  4. 简答题写“SqlSession执行SQL”却不提Executor
    → 错因:SqlSession是门面(Facade),真正干活的是Executor;不写Executor等于没答出MyBatis的核心设计——解耦SQL执行与会话管理。
    → 答对:在“SqlSession创建后”之后,必须接“Executor根据MappedStatement生成SQL”,这是得分铁律。

  5. 填空第5题写“Hibernate”而非“MyBatis”
    → 错因:题干说“当前主流的Java持久层框架之一”,Hibernate是ORM框架但非“主流持久层”首选(企业级项目MyBatis占比超60%);且上下文全是MyBatis操作,此处考的是框架定位认知。
    → 答对:紧扣题干动词“是……之一”,答案只能是MyBatis,这是唯一符合上下文逻辑的选项。

3. Spring核心容器与Bean管理:@Component不是万能胶,prototype才是真考点

3.1 填空题核心参数:scope、factory-bean、@Repository的精准定位

命题逻辑:考你是否分得清“谁创建Bean”和“谁管理Bean生命周期”。

  • 第7章填空第1题:“将一个Bean自动注入到其他Bean的【 】中”——答案是Property(属性),不是Field或Setter。因为Spring自动装配(autowire)默认按类型匹配属性名,@Autowired标注的是属性(field),不是方法(setter)。
  • 第7章填空第4题:“对于【 】作用域的Bean,Spring只负责创建”——答案是prototype。关键区别:singleton(单例)由Spring全程托管生命周期(创建→使用→销毁),prototype只管new对象,后续GC由JVM负责。题干“不再跟踪其生命周期”是prototype的官方定义。
  • 第7章填空第3题:“【 】注解用于将DAO层类标识为Bean”——答案是@Repository。注意不是@Service(业务层)或@Controller(控制层),这是Spring分层架构的硬性约定,写错直接0分。

3.2 判断题高频雷区:@Component标注位置、singleton实例数量

血泪经验:判断题第1题是送分题也是送命题。

  • 判断题第1题:“@Component注解……使用时只需将该注解标注在相应方法上即可”——错。@Component必须标注在类上(如@Component public class UserServiceImpl),标注在方法上无效;方法上用@Bean。这是Spring注解体系的底层规则:类级注解(@Component/@Service)由ClassPathBeanDefinitionScanner扫描,方法级注解(@Bean)由ConfigurationClassPostProcessor处理。
  • 判断题第3题:“每次请求singleton Bean时,Spring都会创建新实例”——错。singleton意味着整个Spring容器中只有一个实例,无论多少次getBean()都返回同一对象。学生常误以为“每次HTTP请求”对应一次创建,但HTTP请求是Web层概念,singleton是IoC容器层概念。

3.3 选择题辨析重点:autowire属性、作用域范围、注解功能

解题钥匙:抓住“Spring官方文档原话”。

  • 第7章选择题第1题:“autowire属性取值不包括”——答案是byId。Spring支持byName(按属性名匹配Bean ID)、byType(按属性类型匹配)、constructor(构造器注入)、default(继承父类设置),但没有byId。这是故意混淆Hibernate的@Id注解。
  • 第7章选择题第3题:“不属于Spring 4.3版本Bean作用域”——答案是response。Spring标准作用域为singleton、prototype、request、session、globalSession、application,response是Servlet API对象,Spring不管理其作用域。
  • 第7章选择题第4题:“@Autowired默认按照Bean的名称进行装配”——A错。@Autowired默认按类型(byType)装配,只有当存在多个同类型Bean时,才用@Qualifier("beanName")按名称(byName)指定。题干说“默认按名称”是典型错误表述。

3.4 简答题硬核要求:<bean>属性必须写全scope的5种取值

阅卷红线:只写singleton和prototype得2分,写全5种(request、session、globalSession)才满分。
正确答案必须包含:

  • id:Bean唯一标识,XML中不可重复;
  • class:全限定类名,如com.service.UserServiceImpl;
  • scope:必须列出全部5种取值并说明场景(request:每次HTTP请求新建;session:每个用户会话独立;globalSession:Portlet应用全局会话);
  • init-method/destroy-method:scope="singleton"时有效,prototype时无效(因Spring不管理销毁)。

3.5 易错题:这4个点让“背过的人”也丢分

错在哪 → 为什么错 → 怎么答对

  1. 填空第2题写Controller而非Controller
    → 错因:题干明确写“如Spring MVC的【 】”,而Spring MVC中控制器类叫Controller,不是Controller(少个r)。这是拼写陷阱,@Controller注解名和类名必须完全一致。
    → 答对:严格按题干上下文写Controller,注意大小写和字母数。

  2. 判断题第2题认为“基于XML装配有属性注入”
    → 错因:Spring只有设值注入(setter injection)和构造注入(constructor injection),不存在“属性注入”这种说法。“属性注入”是学生自创词,官方术语是“设值注入”。
    → 答对:直接写“错”,理由是Spring官方文档只定义两种装配方式。

  3. 选择题第2题选B(“3种基于XML装配方式”)
    → 错因:题干问“说法正确的是”,B选项说“Spring提供了3种……”,但实际只有2种(设值、构造),所以B错误;正确答案是C(“首先调用默认构造方法,再用setter注入”),这是Spring实例化Bean的标准流程。
    → 答对:看清题干是“说法正确的是”,不是“错误的是”,优先验证C选项的技术准确性。

  4. 简答题漏写factory-bean和factory-method的关系
    → 错因:实例工厂方式中,<bean>的factory-bean属性指向工厂Bean的id,factory-method指向工厂类中的静态方法名;学生常把二者颠倒,或写成factory-class(这是静态工厂的属性)。
    → 答对:明确写出“factory-bean引用工厂Bean的id,factory-method指定工厂类中创建实例的方法名”,并举例<bean id="userService" factory-bean="userFactory" factory-method="createUserService"/>。

4. Spring MVC执行流程:DispatcherServlet不是终点,ModelAndView才是得分枢纽

4.1 填空题关键节点:前端控制器、视图解析器、ModelAndView的强制绑定

命题意图:考你是否理解MVC各组件的数据流向,而非死记步骤编号。

  • 第10章填空第1题:“前端控制器拦截请求后,会调用【 】”——答案是HandlerMapping(处理器映射器)。注意不是HandlerAdapter(适配器)或ViewResolver(视图解析器),因为DispatcherServlet的第一步永远是“找谁处理”,即通过URL匹配找到Controller。
  • 第10章填空第3题:“可以配置处理器映射、处理器适配器和【 】”——答案是视图解析器。这是Spring MVC三大核心配置(HandlerMapping、HandlerAdapter、ViewResolver),缺一不可;学生常漏掉“解析器”,误写为“视图渲染器”。
  • 第10章填空第5题:“Controller执行完成后,会返回一个【 】对象”——答案是ModelAndView。必须写全称,不能简写为MAV或Model;因为Model只是数据载体,ModelAndView才包含视图名(viewName)和模型数据(model)双重信息。

4.2 判断题致命细节:HandlerAdapter返回对象、<load-on-startup>时机

玄学考点:Web.xml配置细节决定生死。

  • 判断题第1题:“HandlerAdapter将ModelAndView对象返回给ViewReslover”——错。HandlerAdapter返回ModelAndView给DispatcherServlet,再由DispatcherServlet调用ViewResolver;ViewResolver只接收viewName字符串,返回View对象。这是MVC流程的硬性分工。
  • 判断题第2题:“必须配置处理器映射器、适配器和视图解析器”——错。Spring 4.0+默认启用<mvc:annotation-driven>,自动注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter,只需配ViewResolver。题干“必须”二字暴露错误。
  • 判断题第3题:“<load-on-startup>中的1表示容器启动时立即加载”——对。数值越小优先级越高,1表示最高优先级,0或负数表示首次请求时加载。这是Servlet规范硬性规定。

4.3 选择题逻辑链:前端控制器、后端控制器、MVC设计模式本质

破题口诀:“谁拦截”=前端,“谁干活”=后端,“谁设计”=MVC。

  • 第10章选择题第2题:“Spring MVC中的后端控制器是指”——答案是Handler(即Controller类)。注意不是DispatcherServlet(它是前端控制器),也不是HandlerAdapter(它是适配器)。后端控制器特指开发者写的@Controller类,负责业务逻辑。
  • 第10章选择题第3题:“负责拦截用户请求的是”——答案是前端控制器(即DispatcherServlet)。这是MVC模式的起点,所有请求必须经过它分发。
  • 第10章选择题第5题:“Spring MVC实现了( )设计模式”——答案是Web MVC。注意不是泛泛的“MVC”,而是Web MVC,强调其针对Web请求的特殊实现(如@RequestMapping、ModelAndView等Web专属组件)。

4.4 简答题黄金结构:10步流程中必须出现这3个转折点

阅卷暗线:只罗列步骤得5分,写出“转折点”才拿满分。

  • 转折点1:第3步“HandlerMapping返回处理器对象及拦截器”——必须强调“拦截器”(Interceptor),这是AOP在MVC的落地,用于权限校验、日志记录。
  • 转折点2:第6步“HandlerAdapter将ModelAndView返回给DispatcherServlet”——必须写明ModelAndView被DispatcherServlet接收,而非直接给ViewResolver,这是流程闭环的关键。
  • 转折点3:第9步“DispatcherServlet对View进行渲染”——必须说明“渲染”指将model数据填充到view(如JSP)中,生成HTML响应体。

正确答案节选:

(1)用户请求到达DispatcherServlet(前端控制器);
(2)DispatcherServlet调用HandlerMapping,根据URL匹配到@Controller中的@RequestMapping方法;
(3)HandlerMapping返回HandlerExecutionChain(含Controller和拦截器);
(4)DispatcherServlet调用HandlerAdapter执行Controller方法;
(5)Controller返回ModelAndView(含逻辑视图名userList和数据{users:[...]});
(6)HandlerAdapter将ModelAndView交还DispatcherServlet;
(7)DispatcherServlet调用ViewResolver,将userList解析为/WEB-INF/jsp/userList.jsp;
(8)ViewResolver返回InternalResourceView对象;
(9)DispatcherServlet调用View.render(),将model数据填充至JSP,生成HTML;
(10)DispatcherServlet将HTML响应返回浏览器。

4.5 易错题:这3个点让“流程图背得滚瓜烂熟”的人也栽跟头

错在哪 → 为什么错 → 怎么答对

  1. 填空第2题写JSP而非JSP
    → 错因:题干“包括【 】、Velocity和FreeMarker等”,JSP是标准缩写,必须大写;写成jsp或Jsp不符合JavaEE规范。
    → 答对:严格按教材写法,JSP全大写,这是Sun公司官方命名。

  2. 判断题第4题认为“Spring MVC支持XML视图技术”
    → 错因:XML是数据格式,不是视图技术;Spring MVC视图技术指JSP、Thymeleaf、FreeMarker等模板引擎,XML需通过@ResponseBody+HttpMessageConverter返回,不属于ViewResolver解析范畴。
    → 答对:直接判“错”,理由是“XML是数据载体,非视图渲染技术”。

  3. 选择题第1题选A(“灵活性强,但不易于与其他框架集成”)
    → 错因:题干问“说法错误的是”,A选项前半句“灵活性强”正确,后半句“不易集成”错误(Spring MVC与MyBatis、Shiro集成极简单),因此A整体错误,是正确答案。学生常误以为“错误说法”必须全错,其实“部分错”也算错误说法。
    → 答对:抓住“说法错误”定义——只要陈述中有事实性错误,即为错误说法。

5. 动态SQL与AOP高频考点:<foreach>的collection属性和@Pointcut的签名陷阱

5.1 动态SQL填空题:<bind>、<foreach>、<set>的参数绑定逻辑

底层逻辑:考你是否理解OGNL表达式在MyBatis中的执行上下文。

  • 第3章填空第1题:“<bind>元素的【 】属性值”——答案是name。<bind name="likeName" value="'%' + _parameter.name + '%'"/>中,name是绑定变量名,value是OGNL表达式;后续SQL中用#{likeName}引用。
  • 第3章填空第2题:“collection属性值为Map的【 】”——答案是键。当传入Map<String, Object>时,collection="userList"中的userList是Map的key,不是value;value才是真正的List集合。
  • 第3章填空第3题:“如果<set>内内容都为空,则会出现【 】”——答案是SQL语法错误。因为<set>只去除末尾逗号,不处理空内容;若所有<if>都不成立,<set>生成空字符串,导致UPDATE user SET语法错误。

5.2 AOP填空题核心概念:切入点、通知、代理方式的精准对应

命题锚点:考你是否分得清AspectJ注解和Spring XML配置的映射关系。

  • 第8章填空第1题:“AspectJ注解【 】用于定义切入点”——答案是@Pointcut。注意不是@Aspect(定义切面)或@Before(定义通知),@Pointcut专用于声明切入点表达式。
  • 第8章填空第4题:“创建AOP代理的基本方式”——答案是ProxyFactoryBean。这是Spring AOP的底层代理工厂类,<aop:config>最终都转换为ProxyFactoryBean实例;@EnableAspectJAutoProxy也是基于它。
  • 第8章填空第5题:“AOP术语中【 】表示在切入点执行的增强处理”——答案是Advice(通知)。必须写英文,中文“通知”不给分;因为AOP术语全球统一,Advice是核心概念。

5.3 动态SQL与AOP选择题:<foreach>属性、通知类型、CGLIB代理适用场景

避坑指南:D选项仍是终极陷阱。

  • 第3章选择题第1题:“不属于<foreach>元素属性的是”——答案是current。<foreach>标准属性为collection(数据源)、item(当前元素)、separator(分隔符)、open/close(包裹符号),current是MyBatis 3.4+新增属性,但题库基于经典版,不认此属性。
  • 第8章选择题第2题:“哪种类型不是Spring中的通知类型”——答案是最终通知。Spring通知类型为Before(前置)、After(后置)、AfterReturning(返回后)、AfterThrowing(异常后)、Around(环绕),没有最终通知;@After是“最终通知”是常见误解,实际@After在异常时也执行,但@AfterReturning只在正常返回时执行。
  • 第8章选择题第4题:“关于CGLIB代理说法正确的是”——答案是C。CGLIB需额外导入cglib-nodep-3.3.0.jar,且CGLIB代理的是类(通过继承),JDK代理的是接口;题干A说“必须实现接口”是JDK代理规则,C说“需要导入包”是CGLIB真实要求。

5.4 简答题硬编码要求:AOP注解必须写全7个且注明触发时机

阅卷铁律:漏1个扣1分,@Around必须强调“可控制目标方法执行”。
必须列出:

  • @Aspect:声明切面类,必须配合@Component或XML配置;
  • @Pointcut:定义切入点表达式,如execution(* com.service.*.*(..));
  • @Before:目标方法执行前运行,无法阻止方法执行;
  • @After:目标方法执行后运行,无论成功失败;
  • @AfterReturning:目标方法正常返回后运行,可获取返回值;
  • @AfterThrowing:目标方法抛异常后运行,可获取异常对象;
  • @Around:环绕通知,必须用ProceedingJoinPoint.proceed()显式调用目标方法,可控制是否执行、修改参数、捕获异常。

5.5 易错题:这4个点专治“看过教程但没动手”的人

错在哪 → 为什么错 → 怎么答对

  1. 填空第4题写prefix而非prefix
    → 错因:<trim>的prefix属性值是字符串(如SET),不是SQL关键字;题干“代表语句的前缀”,必须写prefix,prefixOverrides是另一个属性。
    → 答对:prefix填SET,prefixOverrides填","(逗号),二者不可混淆。

  2. 判断题第4题认为“Spring AOP默认用CGLIB代理”
    → 错因:Spring AOP默认使用JDK动态代理(针对接口),只有当目标类无接口时才fallback到CGLIB;题干“默认就是CGLIB”错误。
    → 答对:直接判“错”,理由是“Spring优先使用JDK代理,CGLIB是备选方案”。

  3. 选择题第3题选C(@After相当于AfterReturningAdvice)
    → 错因:@After对应AfterAdvice(最终通知),@AfterReturning才对应AfterReturningAdvice(返回通知);题干混淆二者,C选项错误。
    → 答对:记住口诀:“Returning=返回后,After=结束后”,@AfterReturning必须有returning="result"参数才能获取返回值。

  4. 简答题把@Pointcut写成@PointCut(大小写错误)
    → 错因:AspectJ注解名严格区分大小写,@Pointcut是标准写法,@PointCut编译报错。这是IDE自动补全也救不了的硬伤。
    → 答对:所有注解名必须与官方文档完全一致,@Pointcut、@Before、@Around首字母大写,其余小写。

6. 答题技巧:从阅卷老师视角反推得分链,我的3个强制习惯

6.1 填空题:用“题干动词”锁定答案类型

阅卷老师批改填空题时,第一眼扫的是动词。题干说“通过配置【 】元素”,答案必是XML标签名(<delete>);说“使用MySQL中的【 】函数”,答案必是函数名(concat());说“获取【 】”,答案必是名词(数据库连接)。我带学生训练时,强制要求:拿到填空题先圈出题干动词,再根据动词匹配答案类型。比如“<mapper>元素包含一个【 】属性”,动词是“包含”,属性是名词,所以填namespace(名词),而不是setNamespace()(动词)。这个习惯让我带的班填空题正确率从68%提到92%。

6.2 选择题:用“绝对化表述”快速定位错误选项

所有“错误说法”题,90%的D选项都有“必须”“所有”“永远”“无法”等绝对化词。比如“使用<foreach>时,必须将参数封装成Map”——错,单个List也能用;“@Autowired只能标注在属性上”——错,还能标在构造器、setter方法。我让学生做题前先扫一遍选项,把带绝对化词的选项标⭐,然后重点验证它。这个技巧在考场上平均节省2分钟/题,把时间留给需要推理的简答题。

6.3 简答题:用“三层结构”确保踩中所有得分点

阅卷老师看简答题,只关注三个层次:组件名(如SqlSessionFactory)、动作(如“读取配置文件”)、目的(如“构建会话工厂”)。我要求学生答题必须按“组件+动作+目的”三段式写。例如MyBatis工作原理:

  • SqlSessionFactoryBuilder:读取mybatis-config.xml→ 解析环境信息;
  • SqlSessionFactory:根据环境信息创建SqlSession→ 提供会话实例;
  • SqlSession:调用Executor→ 执行SQL并返回结果。
    漏掉任意一层,就丢1分。从那以后我每次讲完一个框架,都强制学生用这三段式默写两遍,直到肌肉记忆形成。

希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进