全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 13 道配套习题

生态工具与扩展专题

专题说明

本专题全面讲解MyBatis生态工具与扩展,涵盖MyBatis Generator代码生成与定制、Redis第三方缓存集成、MyBatis-Plus核心特性与条件构造器、PageHelper分页插件原理与使用等生态核心工具。

学习目标

  1. 掌握MyBatis Generator的配置、使用与插件定制
  2. 理解MyBatis两级缓存机制及Redis分布式缓存集成
  3. 掌握MyBatis-Plus的IService/BaseMapper关系与Wrapper条件构造器
  4. 深入理解PageHelper分页原理、ThreadLocal线程安全与PageInfo封装
  5. 学会自定义Cache接口实现

学习内容

  • MyBatis Generator:generatorConfig.xml配置、三个generator标签、PluginAdapter定制
  • 第三方缓存集成:Cache接口、RedisCache配置、序列化要求
  • MyBatis-Plus:BaseMapper、IService、ServiceImpl、Wrapper条件构造器、分页插件
  • PageHelper:startPage使用、ThreadLocal线程安全、拦截器SQL改写、PageInfo封装

学习建议

生态工具是提升开发效率的关键。MyBatis Generator可大幅减少CRUD代码编写,MyBatis-Plus是当前最流行的MyBatis增强工具,PageHelper是经典的分页解决方案。建议结合实际项目理解各工具的适用场景和限制。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(13 题)

1
单选题

使用 MyBatis Generator (MBG) 生成代码时,关于生成的 Mapper 接口与 XML 映射文件,以下说法正确的是?

A

Mapper 接口中的方法名完全由开发者手动定义,MBG 只生成 XML

B

MBG 会为每个表生成一个 Mapper 接口和一个对应的 XML 文件,接口方法名由 MBG 根据 CRUD 操作自动定义

C

MBG 生成的 XML 文件中,SQL 语句的 id 属性与方法名无关

D

MBG 只生成 XML 映射文件,不生成 Mapper 接口

2
多选题

在 MyBatis Generator 的配置文件 generatorConfig.xml 中,关于 <table> 标签的配置属性,以下哪些是正确的?

A

tableName 属性用于指定要生成代码的数据库表名,支持通配符 %

B

domainObjectName 属性用于指定生成的实体类名称

C

enableInsertenableSelectByPrimaryKey 等属性用于控制是否生成对应的 CRUD 方法

D

schema 属性用于指定表所在的数据库 schema,在多数据库场景下很有用

3
填空题

在 MyBatis Generator 的配置文件中,<javaModelGenerator> 标签的 targetProject 属性用于指定实体类生成的项目路径,而 targetPackage 属性用于指定实体类生成的 1<sqlMapGenerator> 标签用于配置 XML 2 文件的生成;<javaClientGenerator> 标签的 type 属性通常设置为 3 表示生成 Mapper 接口。

4
单选题

关于 MyBatis 的缓存机制,以下说法正确的是?

A

MyBatis 一级缓存是 SqlSessionFactory 级别的,多个 SqlSession 共享

B

MyBatis 二级缓存是 SqlSession 级别的,默认开启

C

MyBatis 二级缓存需要实体类实现 Serializable 接口,因为缓存数据可能需要序列化存储

D

MyBatis 默认集成 Redis 作为二级缓存,无需额外配置

5
多选题

在 MyBatis 中集成 Redis 作为二级缓存时,以下哪些配置或操作是正确的?

A

需要在 Mapper XML 文件中添加 <cache type="org.mybatis.caches.redis.RedisCache"/> 来指定缓存实现

B

需要在 redis.properties 或类似配置文件中指定 Redis 服务器地址和端口

C

Redis 缓存实现需要引入 mybatis-redis 依赖包

D

使用 Redis 缓存后,MyBatis 的一级缓存会自动失效

6
判断题

MyBatis 允许自定义缓存实现,只需要实现 org.apache.ibatis.cache.Cache 接口并在 <cache> 标签中指定该实现类的全限定名即可。

A

B

7
单选题

在定制 MyBatis Generator 代码生成器时,如果需要修改生成的实体类字段(例如添加 Lombok 注解),应该实现以下哪个接口?

A

org.mybatis.generator.api.PluginAdapter

B

org.mybatis.generator.api.IntrospectedTable

C

org.mybatis.generator.codegen.AbstractGenerator

D

org.mybatis.generator.config.PropertyRegistry

8
多选题

在继承 PluginAdapter 定制 MyBatis Generator 代码生成时,以下哪些方法及其作用是正确的?

A

modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) 可用于为实体类添加类级别注解(如 @Data

B

modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) 可用于修改实体类字段的生成逻辑(如添加 @Column 注解)

C

clientGenerated(Interface interfaze, IntrospectedTable introspectedTable) 可用于修改 Mapper 接口的生成内容

D

validate(List<String> warnings, ProgressCallback progressCallback) 可用于验证插件配置是否正确

9
单选题

关于 MyBatis-Plus 的 IService<T> 接口与 BaseMapper<T> 的关系,以下说法正确的是?

A

IService<T>BaseMapper<T> 的父接口,提供了更多 Service 层的通用方法

B

ServiceImpl<M extends BaseMapper<T>, T> 实现了 IService<T> 并内部委托给 BaseMapper<T> 执行数据库操作

C

IService<T> 只能通过 XML 映射文件来实现自定义查询

D

使用 IService 后就不能再使用 BaseMapper 的任何方法了

10
填空题

在 MyBatis-Plus 中,____1____ 是用于构建复杂查询条件的核心类,它提供了 eq()like()in() 等方法来构建 WHERE 条件;而 ____2____ 是它的子类,专门用于处理 UPDATE 语句中 SET 部分的构建;MyBatis-Plus 的分页插件需要通过 ____3____ 类进行配置,并在 Spring Boot 中注册为 Bean。

11
单选题

关于 PageHelper 分页插件的使用,以下说法正确的是?

A

PageHelper 需要在每次查询前调用 PageHelper.startPage(pageNum, pageSize),该方法会自动作用于下一次查询

B

PageHelper 通过修改 Mapper 接口的返回类型来实现分页,要求返回 PageInfo<T> 类型

C

PageHelper 的分页原理是在 SQL 语句执行后手动截取结果集,而不是修改 SQL

D

PageHelper 只支持 MySQL 数据库的分页

12
多选题

使用 PageHelper 分页查询后,通过 PageInfo<T> 可以获取哪些分页信息?

A

pageNum(当前页码)、pageSize(每页数量)、total(总记录数)

B

pages(总页数)、hasNextPage(是否有下一页)、hasPreviousPage(是否有上一页)

C

firstPage(首页页码)、lastPage(末页页码)、navigatePages(导航页码数)

D

list(当前页数据列表)、prePage(上一页页码)、nextPage(下一页页码)

13
判断题

PageHelper 使用 ThreadLocal 存储分页参数,因此在多线程环境下是线程安全的,多个线程同时调用 PageHelper.startPage() 不会相互影响。

A

B

← 上一个专题 生产环境最佳实践专题
下一个专题 → 缓存机制专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库