一 MyBatis是什么?
MyBatis是一款优秀的持久层框架,一个半ORM (对象关系映射)框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生类型接口和Java的POIO (Plain Old Java Objects,普通老式lava对象)为数据库中的记录。
二 ORM是什么
ORM (Object Relational Mapping) ,对象关系映射,是一种为了解决关系型数据库数据与简单Java对象(POIO)的映射关系的技术。简单的说, ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。
三 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。
而Mybatis在查询关联对象或关联集合对象时,需要手动编写sq来完成,所以,称之为半自动ORM映射工具。
四 传统JDBC开发存在的问题
-
频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。可以使用连接池解决这个问题。但是使用jdbc需要自己实现连接池。
-
sql语句定义、参数设置 结果集处理存在硬编码。实际项目中sql语句变化的可能性较大,一旦发生变化,需要修改java代码,系统需要重新编译,重新发布。不好维护。
-
使用preparedstatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。
-
结果集处理存在重复代码,处理麻烦。如果可以映射成Java对象会比较方便。
五 JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
- 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题.
解决:在mybatis-config.xml中配置数据链接池,使用连接池管理数据库连接 - Sq语句写在代码中造成代码不易维护,实际应用sq变化的可能较大,sq|变动需要改变java代码。
解决:将Sq句配置在××××mappe.×ml文件中与java代码分离。 - 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对映射至sql语句。 - 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要谝历,如果能将数据库记录封装成pojo对象解析比蛟方便。
解决:Mybatisä动将sql执行结果映射至java对象
六 Mybatis优缺点
优点
与传统的数据库访问技术相比,ORM有以下优点.
- 基于SQL语句编程.相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在xml里,解除sq|与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用
- 与JDBC比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接
- 很好的与各种数厍兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数啹库MyBatis都支持)
- 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护
- 能够与Spring很好的集成
缺点
- SQL语句的编写工作量较大,尤其当字段多、关朕表多时,对开发人员编写SQL语句的功底有一定要求
- SQL不能随意更换数据库
七 MyBatis框架适用场景
- MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案
- 对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
八 MyBatis编程步骤是什么样的?
九 请说说MyBatis的工作原理
十 MyBatis的功能架构是怎样的
JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
十一 MyBatis的框架架构设计是怎么样的
十二 为什么需要预编译
数据库管理系统(Database Management System)
十三 Mybatis都有哪些Executor执行器?它们之间的区别是什么?
十四 Mybatis中如何指定使用哪一种Executor执行器?
十五 Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
十六 #{}和${}的区别
十七 模糊查询like语句该怎么写
十八 在mapper中如何传递多个参数
十九 Mybatis如何执行批量操作
二十 如何获取生成的主键
二十一 当实体类中的属性名和表中的字段名不一样 ,怎么办
二十二 Mapper 编写有哪几种方式?
二十三 什么是MyBatis的接口绑定?有哪些实现方式?
二十四 使用MyBatis的mapper接口调用时有哪些要求?
二十五 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗
二十六 Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
二十七 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?
二十八 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
二十九 Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
三十 Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?
三十一 MyBatis实现一对一,一对多有几种方式,怎么操作的?
三十二 Mybatis是否可以映射Enum枚举类?
三十三 Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?
三十四 Mybatis是如何进行分页的?分页插件的原理是什么?
三十五 简述Mybatis的插件运行原理,以及如何编写一个插件。
三十六 Mybatis的一级、二级缓存
crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)