-
MyBatis 面试路线最全整理(附面试题精选及答案)
MyBatis 面试路线最全整理,附 MyBatis 高频必考面试题及答案。 搞定 MyBatis 面试,看这一篇就够了,不用四处找资料,节约大量时间。 1 MyBatis 面试题及答案 MyBatis 基础 什么是 Mybatis Mybaits 的优点、缺点分别是什么 MyBatis 的 SQL 执行日志如何开启 MyBatis 的源码中有哪些核心类 MyBatis 的接口绑定是什么,有…... -
MyBatis 学习进阶路线及资料(附大厂面试题合集)
Mybatis 是当下较为流行的 SSM 框架,在工作中经常会用到,在面试时也时常被提及。 想要深入学习掌握 Mybatis ,就要先知道 MyBatis 的知识体系。 我最新总结的这份 MyBatis 学习进阶路线及资料,包含了 MyBatis 的所有核心知识点,大家可以用来参考学习、构建知识体系、复盘技术栈。 MyBatis 学习进阶路线 把图谱放大,就能看清楚了。 《MyBatis 学习进阶…... -
Mybatis 都有哪些 Executor 执行器,它们之间的区别是什么
参考答案 Mybatis有三种基本的Executor执行器:SimpleExecutor、ReuseExecutor、BatchExecutor。 1. SimpleExecutor 每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。 2. ReuseExecutor 执行update或select,以sql作为key查找Stateme…... -
如何实现 MyBatis 与 Spring 的集成
参考答案 MyBatis 创建了 MyBatis-Spring 项目与 Spring 进行无缝整合,让 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 Spring 的 bean 中。 核心配置就是 dataSource、SqlSessionFactoryBean、MapperScannerConfigurer。 1. data…... -
Spring 中如何配置 MyBatis
参考答案 单纯使用 spring-context 和 spring-jdbc 集成 MyBatis。 配置步骤: 加载 spring-context、spring-jdbc、MyBatis、MyBatis-Spring 的 jar 包。 spring 集成 MyBatis 的 xml 配置文件,配置 dataSource、sqlSessionFactory、Mapper 接口包扫描路径。 Mapp…... -
MyBatis 的源码中有哪些核心类
参考答案 Configuration: 配置类。 Environment: 环境信息。 MapperProxy: Mapper 接口的代理类。 MapperMethod: Mapper 接口的方法,包含匹配的 SQL 执行种类和具体方法签名等信息。 SqlSessionFactoryBuilder: SqlSessionFactory 构造者类。 SqlSessionFactory: SqlSes…... -
MyBatis 中注册 Mapper 有哪些方式
参考答案 MyBatis中注册Mapper的两种方式: 1. 在配置文件 mybatis-config.xml 中添加及其子标签,编写对应的 Mapper 接口与 XML <mappers> <mapper resource="constxiong/mapper/UserMapper.xml"/> </mappers> 2. 硬编码方…... -
MyBatis 的 SQL 执行日志如何开启
参考答案 在配置文件的 <setting> 标签上,设置 logImpl 参数值(SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING)。 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 MyBatis 实现的标准输出的配置: <settings…... -
MyBatis 的接口绑定是什么,有哪些实现方式
参考答案 MyBatis的接口绑定的概念: 就是把接口里的方法与对应执行的 SQL 进行绑定,以及 SQL 执行的结果与方法的返回值进行转换匹配。 MyBatis的接口绑定的实现方式: 接口与对应 namespace 的 xml 进行绑定,接口方法名与 xml 中<select>、<delete>、<update>、<delete> 标签的 id 参…... -
Mapper XML 映射文件中支持哪些标签,作用分别是什么
参考答案 Mapper XML 映射文件中支持的标签及作用: select: 映射查询语句。 insert: 映射插入语句。 updae: 映射更新语句。 delete: 映射删除语句。 resultMap: 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。 parameterMap: 老式风格的参数映射,已废弃。 sql: 定义可被其它语句引用的可重用语句块。 include: 引入…... -
Mapper 接口如何传递多个参数
参考答案 Mapper接口传递多个参数的4种实现方式: 1. 接口中传多个参数,在 xml 中使用 #{param0}、#{param1}… //方式一 //java System.out.println("------ selectUserByParamIndex ------"); user = userMapper.selectUserByParamIndex(31, …... -
MyBatis 如何批量插入
参考答案 MyBatis批量插入的两个实现方式: 1. 打开批量插入的 SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); for (int i =…... -
Mapper 接口中可以根据参数不同进行重载吗,原因是什么
参考答案 Mapper接口中不能根据参数不同进行重载。 原因: MapperedStatement 的 id 属性值等于 Mapper 接口的 包名.接口名.方法名 作为 key 添加到 Configuration 对象的 Map 结构的 mappedStatements 属性里。 查找 MapperedStatement 执行 SQL 时,也是根据 Mapper 接口的 包名.接口名.方法名 作…... -
Mapper 接口并没有实现类,它是如何工作的
参考答案 Mapper 接口的 Class 对象,被解析包装成 MapperProxyFactory 对象。 SqlSession 获取 Mapper 接口时,通过 MapperProxyFactory 对象实例化 MapperProxy 动态代理 Mapper 接口。 执行 Mapper 接口的方法时,动态代理反射调用 MapperProxy 的 invoke 方法,根据接口与方法找到对应 Ma…... -
Mapper 接口方法如何与注解里的 SQL 进行绑定的
参考答案 实现方式: 根据 Mapper 接口、其方法、方法上的注解,生成 mappedStatementId 与 MapperStatement,注册到 configuration 对象中。 根据 Mapper 接口方法查到并调用对应的 MappedStatement,执行 SQL。 详解: 解析生成注册 MapperStatement 的代码入口在 MapperRegistry addMapp…... -
MyBatis 如何获取自动生成的(主)键值
参考答案 MyBatis获取自动生成的(主)键值: insert 方法总是返回一个int值 ,这个值代表的是插入的行数。 如果采用自增长策略,自动生成的键值在 insert 方法执行完后可以被设置到传入的参数对象中。 以上,是MyBatis面试题【如何获取自动生成的(主)键值】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---e…... -
模糊查询 like 语句该怎么写
参考答案 有两种方法: 1. 在Java代码中添加sql通配符。 string wildcardname = “%smi%”; list<name> names = mapper.selectlike(wildcardname); <select id=”selectlike”> select * from foo where bar like #{value} <…... -
使用 MyBatis 的 mapper 接口调用时有哪些要求
参考答案 使用MyBatis的mapper接口调用时的要求: Mapper接口方法名,和mapper.xml中定义的每个sql的id相同。 Mapper接口方法的输入参数类型,和mapper.xml中定义的每个sql 的parameterType的类型相同。 Mapper接口方法的输出参数类型,和mapper.xml中定义的每个sql的resultType的类型相同。 Mapper.xml文件中的…... -
用 MyBatis 如何使用模糊查询
参考答案 MyBatis使用模糊查询的实现方式: 1. XML 中使用 #{},Java 代码中传入 "%参数值%"。 Java: list<User> users = mapper.select(Collections.singleMap("name", "%constxiong%")); XML: <select …... -
MyBatis 中如何配置连接中断或执行超时
参考答案 Mybatis的XML 配置中,在 <settings> 节点中添加子节点 <setting>,name=defaultStatementTimeout,设置等待数据库响应的超时时间。 <settings> <!-- 设置超时时间,它决定数据库驱动等待数据库响应的秒数 --> <setting name="defaultSt…... -
简述 Mybatis 的插件运行原理,以及如何编写一个插件
参考答案 Mybatis的插件运行原理: Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件。 Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invok…... -
Mybatis 是如何进行分页的,分页插件的原理是什么
参考答案 Mybatis的分页实现方式: Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。 可以在sql内,直接书写带有物理分页的参数,来完成物理分页功能。 可以使用分页插件,来完成物理分页。 分页插件的基本原理: 使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialec…... -
MyBatis 与 Hibernate 的区别
参考答案 MyBatis 与 Hibernate 的区别: MyBatis 不完全是一个 ORM 框架,它需要程序员自己编写 SQL;Hibernate 可以做到无 SQL 对数据库进行操作。 MyBatis 直接编写原生 SQL,可以严格控制 SQL 执行性能,灵活度高,快速响应需求变化;Hibernate 会根据模型配置自动生成和执行 SQL 语句,面对多变的需求,灵活度没那么高。 MyBat…... -
MyBatis 中实体类的属性名与表中的字段名不一致时,怎么处理
参考答案 修改SQL,给查询字段重命名,让字段名的别名和实体类的属性名一致。例如,将 user_id 重命名为 userId。 <select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”> select order_id id, order_no orderno ,order_pri…...