资讯动态

JavaEE期末复习题库:MyBatis、Spring、AOP、MVC核心考点精讲

发布时间:2026/10/15 22:30:16 来源:尧图企业网站定制
简介面向JavaEE期末备考的MyBatis专项复习题库以docx文档形式整理成完整习题集。内容围绕MyBatis框架展开覆盖全局配置文件、映射文件核心元素、SQL映射与参数绑定、ORM概念及应用、增删改查操作原理等考点并以第1章初识MyBatis、第2章MyBatis核心配置为模块编排。题型包括填空题、判断题、选择题和简答题并附有参考答案可帮助考生快速定位薄弱环节。第1章侧重MyBatis基本操作与工作原理第2章聚焦 、 、数据源配置等核心知识点适合期末冲刺阶段自测与查漏补缺。资源包共1个文件类型为docx文档大小41KB当前已有2646人学习下载。考生通过系统练习可加深对MyBatis配置、ORM映射和SQL安全性的理解提升实际开发中的排错意识与答题准确率。尤其适合考前集中刷题通过对错题反复梳理巩固记忆。1. 一份能当复习主线的 JavaEE 期末题库定位、边界与用法期末临近时最慌的不是题不会而是不知道考点在哪。这份 JavaEE 期末复习题库的价值在于它把 MyBatis、Spring、Spring AOP、Spring MVC 四块内容按章节拆成了填空、判断、选择、简答四种题型每道题都带答案等于考前拿到一份别人整理好的考点地图。题库里真正有含金量的不是答案本身而是那些判断题和选择题——它们专门针对「看着眼熟、实际记反」的表述出题比如映射文件根元素到底是mapper还是mappers、Autowired默认按类型还是按名称装配。适合课程考前冲刺的学生也适合刚接触 SSM 开发的从业者拿来做框架概念自测。有一点先说清楚这份题库侧重概念和配置细节不是代码实战练习想靠它学会写 Mapper 不现实但靠它把框架主线串起来、应付考试和面试里的概念题够用。2. MyBatis 基础考点namespace 与四类 SQL 元素八步工作流怎么记2.1 映射文件根元素与 SQL 元素初看容易混的mapper和mappers复习 MyBatis 第一件事是把映射文件这个「黑匣子」打开。映射文件本身的根元素是mapper它只有一个必填属性namespace用来给当前映射文件指定一个全局唯一的命名空间。题库第一道填空题考的就是这个点而判断题紧接着挖了个坑把mapper换成mappers放在句子里问是不是根元素。mappers其实是 MyBatis 全局配置文件mybatis-config.xml里用于加载映射文件的标签一个管「定义 SQL 映射」一个管「引入映射文件」只差一个字母含义完全不同。下面是一份最小可用的映射文件结构涵盖题库中的增删改查四种元素mapper namespacecom.example.mapper.UserMapper delete iddeleteById parameterTypeint DELETE FROM user WHERE id #{id} /delete update idupdateName parameterTypemap UPDATE user SET name #{name} WHERE id #{id} /update /mapper逻辑上namespace加id组成一条 SQL 的唯一标识例如com.example.mapper.UserMapper.deleteByIdSqlSession调用时靠这个全限定名定位 SQL这就是为什么namespace必须全局唯一。参数上parameterType声明入参类型可以是基本类型、map或 POJO#{id}是预编译占位符MyBatis 会把它替换成PreparedStatement的?再单独传参。delete和update执行后返回的是受影响行数这一点在判断题里也出现过——更新操作同样需要事务提交不提交不会真正落库。判断题第 2 题说「只需引入 JAR 包即可运行」判错的原因在于漏掉了三样东西全局配置文件、映射文件、数据库驱动和数据源配置。JAR 包只是让类可用MyBatis 的运行环境还得靠配置文件撑起来。2.2 工作原理八步把简答题答案压缩成一条记忆链MyBatis 工作原理是简答题的常客也是选择题喜欢打乱顺序出题的地方。题库给出的标准答案有八条直接硬背容易漏我习惯把它压成一条链读配置 → 加载映射 → 建工厂 → 开会话 → Executor 生成 SQL → MappedStatement 封装输入输出。具体展开是这样的先读取全局配置文件mybatis-config.xml拿到数据库连接等环境信息随后加载所有映射文件 Mapper.xml基于这些配置构建SqlSessionFactory由工厂创建SqlSession对象。SqlSession内部持有一个Executor接口它根据传入参数动态生成 SQL 语句执行过程中有一个MappedStatement类型的参数专门封装映射信息——入参由它定义封装SQL 执行结果也由它定义封装。记住「Executor 干活、MappedStatement 打包」这两个角色选择题里再打乱顺序也不会选错。选择题第 4 题的错误选项 C 说「通过环境等配置信息构建会话对象 SqlSession」错的点在于构建的不是SqlSession而是SqlSessionFactory。Factory造SessionSession是执行 SQL 的门面两者职责不能混。ORM 的概念也顺带理一下ORM 解决的是 Java 对象与关系型数据库表之间的数据类型不匹配问题描述对象与表的映射关系把对象持久化到数据库。MyBatis 和 Hibernate 都是 ORM 框架区别在于 MyBatis 是半自动的SQL 由开发者自己写控制力更强。2.3 参数绑定与模糊查询${}、#{}和concat()的三角关系模糊查询是 MyBatis 入门必考的 SQL 场景题库里有一组题目专门围绕字符串拼接出题这组题有个值得注意的争议点。先说结论${}是字符串直接替换相当于把用户输入原样拼进 SQL存在注入风险#{ }是预编译参数占位值由PreparedStatement参数绑定传入是防注入的关键。安全的模糊查询写法如下select idselectByName parameterTypestring resultTypecom.example.pojo.User SELECT * FROM user WHERE name LIKE CONCAT(%, #{name}, %) /select这段 SQL 的逻辑是用 MySQL 的CONCAT()把%和参数拼成%关键字%再交给LIKE匹配。关键点在于参数用的是#{name}而不是${name}预编译机制保证注入字符串只被当作普通文本处理。CONCAT()本身是拼接函数不是安全函数——它的作用是拼出模糊查询所需的格式安全性完全取决于参数绑定方式。题库里部分题目暗示concat()能防注入、部分题目的标准答案又说依赖它反而防不住注入命题口径并不一致复习时以「#{}参数绑定才是防注入核心」为准用CONCAT只是解决%拼接的格式问题顺带注意它在不同数据库间的移植性偏差。3. 核心配置与动态 SQL从选择题反推 resultMap、set与foreach的细节3.1 resultMap列名与属性不一致时的映射救星数据表列名和 POJO 属性名完全一致时MyBatis 可以自动映射一旦不一致比如数据库列是user_name对象属性是userName自动赋值就失效了。这时候需要resultMap元素手动描述映射关系。它的子元素分工明确id表示主键列result表示普通列与属性的对应关系。resultMap iduserResultMap typecom.example.pojo.User id propertyid columnid jdbcTypeINTEGER/ result propertyuserName columnuser_name jdbcTypeVARCHAR/ result propertycreateTime columncreate_time jdbcTypeTIMESTAMP/ /resultMap逻辑上id属性用于映射主键列MyBatis 用它做记录唯一性判断result逐列声明 POJO 属性和数据库列的对应关系property是 Java 对象属性名column是数据库列名jdbcType建议显式声明以避免类型解析歧义。引用方式是在select里写resultMapuserResultMap注意一个映射文件中多个resultMap的 id 不能重复。题库里有个高频陷阱resultType和resultMap能不能同时使用答案是不能。resultType走自动映射MyBatis 按列名和属性名猜对应关系resultMap走手动映射完全按你配置的规则组装结果。两者互斥混用时 MyBatis 无法确定按哪套规则封装运行期直接报错。需要多表关联、列名差异较大时用resultMap简单单表查询用resultType更省事。3.2 动态 SQL 四件套if、where、set、foreach 的配合边界动态 SQL 是 MyBatis 最实用的特性选择题和填空题都覆盖到了核心是四个元素各自管什么。if做单条件判断test属性写 OGNL 表达式where自动处理开头的WHERE关键字用来替代手动写where 11这种凑合写法set专用于更新语句动态前置SET关键字并清理最后一个多余的逗号foreach做循环遍历常用于IN查询和批量操作。update idupdateUser parameterTypecom.example.pojo.User UPDATE user set if testuserName ! nulluser_name #{userName},/if if testemail ! nullemail #{email},/if /set WHERE id #{id} /update这段逻辑是只有传入的字段非空时才拼进SET子句set会把最后一个字段名后面多余的逗号去掉避免生成SET email ? , WHERE ...这种语法错误。核心参数是test里的空值判断前端没传的字段根本不会进入 SQL。如果set里所有if都不成立动态 SQL 只剩UPDATE user WHERE id ?这种残缺语句直接抛 SQL 语法异常——这是题库判断题第 2 题的考点我在下一章展开。foreach常用于列表条件查询批量操作时参数要封装好select idselectByIds parameterTypelist resultTypecom.example.pojo.User SELECT * FROM user WHERE id IN foreach collectionlist itemid open( separator, close) #{id} /foreach /selectcollection属性是这里最讲究的单参数且是List时可以直接写list是数组时写array多个参数则必须封装成Map此时collection写的是Map的键名参数是 POJO 包装类时写对象里数组或集合的属性名。item是循环中当前元素的别名open、separator、close分别控制左括号、分隔符和右括号。容易漏的是多参数场景下不封装Map直接写list运行期会提示找不到可用参数这是常见的翻车点。3.3 两个低调但实用的元素trim 与 bindset本质上是trim的一种特化写法。trim更灵活它通过prefix属性在语句前补前缀用prefixOverrides去掉多余的字符串用suffix和suffixOverrides处理后缀。比如trim prefixSET suffixOverrides,就能实现set相同效果遇到更复杂的拼串需求时直接用trim定制更顺手。bind元素适合处理模糊查询参数在 SQL 外部先把参数处理成型select idselectByKeyword resultTypecom.example.pojo.User bind namepattern value% keyword %/ SELECT * FROM user WHERE user_name LIKE #{pattern} /selectbind的逻辑是在 SQL 执行前创建一个变量patternvalue属性里的keyword是方法入参通过字符串拼接把它加工成%关键字%的格式SQL 里直接引用#{pattern}。这样做的优势是 SQL 语句保持干净参数预处理放在外面可读性和维护性都好一些。注意bind不只是模糊查询能用任何 OGNL 表达式能表达的变量都可以绑定只是模糊查询场景用得最多。4. 刷题避坑五条高频概念辨析与易错答案4.1 填空与判断三个最容易写错记混的点坑一mappers与mapper一字之差含义完全相反。现象判断题「MyBatis 映射文件中mappers元素是根元素」打对勾的人不少因为一眼扫过去和背过的内容很像。原因全局配置文件里加载映射文件用的标签是mappers里面嵌套mapper resourcexxx.xml/而映射文件自身的根元素是mapper namespacexxx。一个负责加载一个负责定义角色不同却只差一个字母 s。解决把这两个标签放进各自的上下文里记——全局配置文件的子标签是mappers映射文件的根标签是mapper。看到namespace就想到后者看到resource就想到前者。坑二singleton 与 prototype 的生命周期归属。现象题目说「每次客户端请求 singleton 作用域的 BeanSpring 容器都会创建一个新实例」判断对错时容易犹豫。原因singleton 是 Spring 默认作用域整个容器只维护一个实例所有引用指向同一个对象容器负责它的完整生命周期prototype 才是每次获取都新建实例而且容器创建完就不管了后续生命周期交给客户端代码。解决用「容器管不管」做记忆锚点。singleton 容器管生管死prototype 容器只管生不管养。题目里后半句「Spring 容器将不再跟踪其生命周期」出现时主语一定是 prototype。坑三After不是后置通知AfterReturning才是。现象选择题里把After描述成「相当于 AfterReturningAdvice」判断时容易凭名字猜功能。原因After是最终通知相当于finally块无论方法正常返回还是抛异常都会执行AfterReturning是返回通知只在目标方法正常返回后执行。两者触发时机不同名字长得像功能差很远。解决AfterReturning里有个Returning和「有返回值」绑定After就是「事后无论如何都要收尾」。把After类比成finally一次就记牢。4.2 选择与简答两个藏在选项里的陷阱坑四resultType 与 resultMap 被包装成「可以同时使用」。现象题目问关于select元素属性说法错误的是选项写「返回时可以同时使用 resultType 和 resultMap」很多考生觉得多写一个没坏处就放过了。原因两个属性走完全不同的映射机制。resultType靠自动匹配列名和属性名resultMap靠手动配置的映射规则同时存在时 MyBatis 不知道以谁为准启动或者执行阶段会直接报错。解决记住一条铁律——二选一不共存。查询结果需要复杂映射时用resultMap简单场景一律resultType。判断题里出现「同时使用」四个字先怀疑再验证。坑五Spring AOP 默认代理不是 CGLIB。现象判断题「Spring 中的 AOP 代理默认就是使用 CGLIB 代理的方式来实现的」判错不少人觉得 CGLIB 更常用就打了对。原因经典 Spring 的默认策略是目标类实现了接口就用 JDK 动态代理只有没有实现接口时才回退到 CGLIB。Spring Boot 2.x 之后默认才切到 CGLIB但题库考的是原生 Spring 的行为。解决按「有接口走 JDK无接口走 CGLIB」记默认规则。看到题目没提 Spring Boot 版本先说原生默认是 JDK 动态代理。顺带补一个点CGLIB 生成的是目标类的子类所以目标类或方法被final修饰时无法代理这也是代理选型时需要考虑的边界。5. Spring 与 Spring MVC从依赖注入一路串到 DispatcherServlet5.1 依赖注入的两种实现方式setter 与构造方法Spring 核心是 IoC 容器对象的创建和依赖关系的维护都交给容器不再由调用者直接 new。依赖注入DI是 IoC 的具体落地手段题库简答题的标准答案是两种方式属性 setter 注入和构造方法注入。setter 注入的套路是先通过无参构造器实例化 Bean再调用对应的 setter 方法把依赖塞进去。构造注入则是调用带参数的构造方法每个参数代表一个依赖Bean 被创建出来的时候依赖就已经就位。两者的取舍在于构造注入适合依赖必须齐备的场景不容易出现「对象建出来了但依赖是 null」的半成品setter 注入更灵活适合依赖可选的场景。配合Autowired注解时默认按类型完成自动装配如果容器里存在多个同类型 Bean再按名称和Qualifier指定。判断题里有一道说法是「Spring 提供了 3 种基于 XML 的装配方式设值注入、构造注入和属性注入」判错的原因在于「属性注入」这个说法不成立基于 XML 的装配方式就是设值和构造两种。这类表述只要出现「三种」就要留意是不是把概念类别强行扩编。5.2 Bean 作用域与注解四兄弟Bean 的作用域在题库里考得细。singleton 默认单例prototype 原型Web 环境下还有 request、session、globalSession——注意 Spring 4.3 版本里没有response作用域选择题把这个混进去就是干扰项。配置方式是在bean元素上用scope属性指定bean的id是唯一标识符name可以为 Bean 指定多个别名用逗号或分号隔开class写具体实现类的全限定名。注解方面有四个兄弟需要分清Component是泛化注解表示一个组件可作用在任何层次Repository标注数据访问层DAO 层Service标注业务层Controller标注控制层。四者功能本质相同都是把类标识为 Spring 管理的 Bean区别在于语义分层。Component使用时标注在类上不是方法上——判断题第一题说「标注在相应方法上」是错的。Autowired的默认装配规则值得单独强调默认按类型byType装配而不是按名称。题库选择题把「默认按照 Bean 的名称进行装配」设为错误选项原因就在这。当同类型出现多个候选时配合Qualifier(beanName)指定具体名称。这个细节在工作里也经常遇到记错默认规则排错会绕很多弯路。5.3 Spring MVC 执行流程把十步调用链背成一句话Spring MVC 的执行流程是简答题高频题给它编一条好记的链前端控制器拦截 → 处理器映射器找 Handler → 处理器适配器执行 Handler → 返回 ModelAndView → 视图解析器解析 → 视图渲染 → 响应。完整展开是请求进服务器被前端控制器DispatcherServlet拦截它调用HandlerMapping处理器映射器映射器根据请求 URL 找到具体处理器即 Controller连同拦截器一并返回DispatcherServlet再选择合适的HandlerAdapter处理器适配器由适配器真正执行 HandlerController 执行完返回ModelAndView对象HandlerAdapter 把它交回DispatcherServlet随后前端控制器请求ViewResolver视图解析器根据逻辑视图名解析出真正的View最后DispatcherServlet渲染视图把模型数据填充到视图把结果响应给用户。判断题「HandlerAdapter 将 ModelAndView 对象返回给 ViewResolver」判错因为中间还隔着一个DispatcherServlet。ModelAndView 是先回到前端控制器再由它去请求视图解析器这个中转角色不能跳。Spring MVC 是 Spring 提供的实现了 Web MVC 设计模式的轻量级 Web 框架前端控制器就是DispatcherServlet——配置在web.xml里load-on-startup数字表示容器启动时是否立即加载该 Servlet。5.4 RequestMapping 注解族从 method 属性到组合注解RequestMapping用于映射请求 URL 到处理方法method属性限定请求方式。Spring 4.3 之后提供了组合注解简化写法GetMapping等价于RequestMapping(method RequestMethod.GET)PostMapping、PutMapping、DeleteMapping同理。判断题里说「RequestMapping 的 method 属性必须使用」是错的它是可选属性不写时所有请求方式都匹配。视图解析器配置也是常考点典型的 internalResourceViewResolver 配置里prefix设置视图文件所在目录前缀suffix设置文件扩展名后缀比如prefix/WEB-INF/views/、suffix.jsp。这样 Controller 返回逻辑视图名user/list时解析器会自动拼成/WEB-INF/views/user/list.jsp。Spring MVC 的配置文件里可以配置视图解析器DispatcherServlet的初始化参数没配时默认去固定位置找配置文件——这些细节在题库里都以填空或判断形式出现本质上是在考「配置文件的角色分界」谁拦截请求、谁找处理器、谁解析视图各自分工别混淆。6. 期末冲刺把静态题库变成动态自测环境题库是静态的但复习过程可以做成动态的。我拆完这份题库后用的是一套「三遍刷题法」比单纯翻答案效果好得多。第一遍闭卷盲刷只做填空和判断限时半小时。不会的题不翻答案先在题号前画一个三角标记全部做完再统一对答案。这一遍的目的不是正确率而是暴露盲区。你会发现很多「看答案秒懂、合上书就忘」的点比如POOLED数据源类型、refid属性这些具体名词只有写不出来的时候才知道自己没记住。第二遍做选择和简答但把顺序倒过来先不看选项自己心里给出答案再看选项验证。选择题的干扰项不是用来选的是用来做「概念辨析练习题」的——每个错误选项都是一条现成的坑位记录。把做错的题按三类归档概念混淆型比如 singleton 和 prototype、配置参数型比如collection该写 list 还是 map、流程顺序型比如 ModelAndView 先回给谁。归档之后你会发现同一类错误反复出现这就是这轮复习最该补的短板。第三遍把简答题当口述题练。MyBatis 八步工作流和 Spring MVC 十步流程对着墙面讲一遍讲不下去或者前后顺序颠倒的位置就是真正要下功夫背的地方。拿下面的表格做每章自测记录比闷头刷题更能看到进度章节题型错误数错误类型复检结果MyBatis 基础填空/判断/选择核心配置填空/判断/选择动态 SQL填空/判断/选择Spring 与 Bean填空/判断/选择Spring AOP填空/判断/选择Spring MVC填空/判断/选择从那以后我每次考前复习都强制走一遍「先盲做、再分类、后口述」这三轮错题本越做越薄。这份题库覆盖的考点足够典型框架主线也完整用对方法能省下不少时间。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑