MyBatis 面试复习整理
MyBatis
MyBatis 是一款优秀的ORM(对象关系映射)框架,可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中。它内部封装了 JDBC ,使开发者只需要关注 SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 Statement 等繁杂的过程。通过 XML 和注解的方式将要执行的各种 Statement 配置起来,并通过 Java 对象和 Statement 中的动态参数进行映射生成最终执行的 Sql 语句,最后要 MyBatis 框架执行 SQL 并将结果映射为 Java 对象并返回。
MyBatis提供了普通 SQL 查询、事物、存储过程等功能。
优点
- 相比于 JDBC 需要编写的代码更少
- 使用灵活,支持动态 SQL
- 提供映射标签,支持对象与数据库的字段关系映射
缺点
- SQL 语句依赖数据库,移植性较差
- SQL 语句编写工作量大
MyBatis 工作流程
工作流程旨在要完成MyBatis的初始化工作,具体的做法是
第一步要创建一个mybatis-config.xml文件,这个文件中包含了环境配置,全局设置项以及mapper声明这样的核心配置信息,这个mybatis-config.xml文件起到了一个全局配置作用;
SqlSessionFactoryBuilder --构建–》 SqlSessionFactory --构建–》SqlSession(保证全局唯一)
第二步是在我们程序运行的过程中,通过SqlSessionFactoryBuilder这个构建器对象来构建SqlSessionFactory,用于创建SqlSession对象,SqlSession必须保证全局唯一。通过这个SqlSessionFactory对象创建了对应的SqlSession,是我们对数据表进行增删改查的核心。
第三部对应的mapper.xml文件包含了大量的SQL语句,我们通过session来访问mapper.xml,进而来执行与之对应的增删查改SQL语句,那么对于写操作来说,执行完以后,千万不要忘记我们对事务及时进行commit的提交或者是rollback回滚,只有这样才能保证我们的数据被成功写入到数据库中。
最后通过session.close来关闭会话任务。

MyBatis数据查询步骤
创建实体类
创建Mapper XML
编写 SQL 标签
开启驼峰命名映射
新增
SQLSession执行select语句
resultType 指的是某个具体的对象
resultType=“com.*.students”:返回的是单表查询的对象或结果集
resultType=“java.util.Map”:返回的是多表查询的Map结果集
resultMap可以将查询结果映射为复杂类型的Java对象,适合于Java对象保存多表关联结果,支持对象关联查询
parameterType: 外侧要传入的参数的类型
1.MyBatis 和 Hibernate 有哪些不同?
- 灵活性:MyBatis 更加灵活,自己手写 SQL语句
- 可移植性:每个数据库的 SQL 不同,移植性差
- 开发效率:Hibernate 对 SQL 语句做了封装,可直接使用,效率高
- 门槛:MyBatis 入门比较简单
2.“#” 和 “$” 有什么区别?
"#" 是预编译处理,通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换
#{}可以接受简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,#{} 括号中可以是value或其他名称
使用 "#" 时,MyBatis 会将SQL 中的参数替换成 "?"配合 PreparedStatement set 方法赋值,有效的防止 SQL 注入。
"$" 是字符串替换。通过${} 可以将 parameterType 传入的内容拼接在 SQL 中且不进行 jdbc 类型转换
${} 可以接受简单数据类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,#{} 括号中只能是 value
3.MyBatis 有几种分页方式?
逻辑分页:使用 MyBatis 自带的RowBounds 进行分页,一次性查询很多数据,并非全部。
物理分页:手写 SQL 分页或分页插件。
4.RowBounds 是 一次性查询全部结果吗?
不是,因为 MyBatis 是对 JDBC 的封装
在 JDBC 驱动中有一个 FetchSize 的配置,它规定了每次最多能查询多少数据倘若要查询更多数据,会在执行 next() 的时候,去查询更多的数据。
5.什么是动态 SQL?
可以根据不同的参数信息来动态拼接不确定的SQL叫做动态SQL(if、choose、when、otherwise、where、set、foreach)
6.如何设置延迟加载?
延迟加载:在 MyBatis-config.xml 设置 <setting name="lazyLoadingEnabled" value="true"/>
7.JDBC和 MyBatis编程的比较
| JDBC | MyBatis | |
|---|---|---|
| 系统性能 | 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能 | 可在配置文件中数据连接池,使用连接池管理数据库连接 |
| Sql 语句 | Sql 语句写在代码中造成代码不易维护,实际应用 Sql 变化的可能较大,Sql 变动需要改变 Java 代码 | 将 Sql 语句配置在映射文件中与 Java 代码相分离 |
| 传参数 | 向 Sql语句传参数麻烦,因为 Sql 语句的 where 条件不一定,可能多也可能少,占位数需要和参数对应 | MyBatis 自动将 Java 对象映射至 Sql 语句,通过 Statement 中的 parameterType 定义输入参数的类型 |
| 结果解析 | 对结果集解析麻烦,Sql 变化导致解析代码变化,且解析前需要遍历 | MyBatis自动将 Sql 执行结果映射至 Java 对象,通过 Statement 中的 resultType 定义输出结果的类型 |
8.MyBatis 配置文件详解
配置环境以及数据池的配置

映射文件中的参数涵义
namespace 属性:取值必须是持久层(Dao)接口的全限定类名
resultType 属性:用于指定结果集的类型
parameterType 属性:用于指定传入参数的类型

mappers 映射器
<mapper resource=""/>: 使用相对于类路径的资源 <mapper resource="com/hyx/dao/IUserDao.xml"/>
<mapper class=""/>: 使用 mapper 接口类路径 <mapper resource="com.hyx.dao.UserDao"/>
<package name=""/>: 注册指定包下的所有 mapper 接口 <package name="com.hyx.mapper"/>
谢谢观看,待更新…
MyBatis 面试复习整理的更多相关文章
- Java基础(面试复习整理)
基础知识和语法 Java语言初识 计算机语言发展 机器语言.汇编.C.C++.Java Java的诞生与发展 1995 JavaSE JavaME Android JavaEE 2006(大数据) H ...
- Spring面试复习整理
Spring Spring核心分为三方面: 控制反转(IoC): 就是将创建对象的权利交给框架处理/控制,不需要人为创建,有效降低代码的耦合度,降低了开发成本. 依赖注入(DI): 容器动态地将将某种 ...
- Spring MVC面试复习整理
Spring MVC Spring MVC 是Spring Framework 提供的 web 组件 它的实现基于 MVC 的设计模式:Model(模型层).View(视图层).Controller( ...
- Java秋招面试复习大纲(二):Spring全家桶+MyBatis+MongDB+微服务
前言 对于那些想面试高级 Java 岗位的同学来说,除了算法属于比较「天方夜谭」的题目外,剩下针对实际工作的题目就属于真正的本事了,热门技术的细节和难点成为了面试时主要考察的内容. 这里说「天方夜谭」 ...
- php复习整理1--位运算符
前言 子曰:"温故而知新,可以为师矣." php复习整理系列即是对已掌握的知识的温习,对久不使用的知识点进行重新学习,从而对php基础知识的掌握更加牢固.当然因为是重新温习, ...
- linux常用命令大全(linux基础命令入门到精通+命令备忘录+面试复习+实例)
作者:蓝藻(罗蓝国度) 创建时间:2018.7.3 编辑时间:2019.4.29 前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通过(环境为ce ...
- linux常用命令大全(linux基础命令+命令备忘录+面试复习)
linux常用命令大全(linux基础命令+命令备忘录+面试复习)-----https://www.cnblogs.com/caozy/p/9261224.html
- web前端面试知识点整理
一.HTML5新特性 本地存储 webStorage websocket webworkers新增地理位置等API对css3的支持canvas多媒体标签新增表单元素类型结构标签:header nav ...
- MyBatis面试题整理
MyBatis面试题整理 1.什么是MyBatis? 答:MyBatis是一个可以自定义SQL.存储过程和高级映射的持久层框架. 2.讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二 ...
随机推荐
- 求字符串长度之递归与非递归的C语言实现
在上一篇中介绍了字符串拷贝的递归与非递归的实现,这里就不在赘述递归原理. 递归求字符串长度_strlen: 1 int _strlen(const char *src) 2 { 3 if( src = ...
- SqlServer 数据库备份到服务器,及删除
一:备份 1.在数据库管理下 新建一个维护计划,然后下图中点击 标红的按钮 新建计划作业,建好后就可以 SqlServer 代理下的作业里可以看到刚新建的作业. 2.SqlServer 代理下的作业 ...
- Linux·命令收藏
时间:2018-11-20 记录:byzqy 标题:Linux命令大全(手册) 地址:http://man.linuxde.net/ 标题:Linux script命令 -- 终端里的记录器 地址:h ...
- Linux服务器JDK的安装
JDK安装 开发java程序必须要的环境 下载JDK rpm. 安装环境 #检测当前系统是否安装Java环境 java -version #如果有就需要卸载 #rpm -qa|grep jdk #检测 ...
- 分布式系列-分布式ID
一.数据库自增(单实例) 1.方案描述 基于数据库自增ID(auto_increment)利用其来充当分布式ID.实现方式就是用一张表来充当ID生成器,当我们需要ID时,向表中插入一条记录返回主键ID ...
- golang redis
安装 下载第三方包: go get -u github.com/go-redis/redis/v9 连接 // 定义一个rdis客户端 var redisdb *redis.Client // 初始化 ...
- FastReport合并多份报表为一份预览打印
效果 比较简单,直接贴代码 //打印第一份报表 procedure TForm1.Button2Click(Sender: TObject); begin frxReport1.LoadFromFil ...
- 全网唯一正常能用的centos7 安装mysql5.7.35 22 33 25
CentOS7.4用yum安装并配置MySQL5.7 1.配置YUM源 下载MySQL源安装包 wget http://dev.mysql.com/get/mysql57-community-re ...
- Java链表练习题小结
链表 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).一个链表节点至少包含一个 数据域和 ...
- STP(生成树)的概述和工作原理
一.STP的简介 二.STP的概述 三.STP的工作原理 四.生成树的算法 五.BPDU(桥协议数据单元) 六.STP收敛 TP简介 STP - Spanning Tree Protocol(生成树协 ...