1、JDBC有多少步?
JDBC可以分为六个步骤
负载驱动程序
获取数据库连接
创建语句对象
操作数据库进行增删改查
获取结果集
关闭资源
2.什么是mybatis?
如果你在面试中被问到,只需说以下三件事:
Mybatis 是一个优秀的持久层框架,支持自定义 SQL、存储过程和高级映射。
Mybatis 省去了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
Mybatis 可以通过简单的 XML 或注解将原始类型、接口和 Java POJO(plain old Java objects)配置和映射为数据库中的记录。
3.什么是ORM?
全称是对象关系映射。对象映射关系数据库。对象关系映射(ORM,或O/RM,或O/R映射)用于实现面向对象编程语言中不同类型系统之间的数据转换。简而言之,ORM就是用元数据来描述对象与数据库的映射关系,将程序中的对象与关系数据库进行映射。
ORM 提供了另一种实现持久层的方式。它使用映射元数据来描述对象关系的映射,使ORM中间件可以充当任何应用程序的业务逻辑层和数据库层之间的桥梁。
4、说说orm的优缺点
“优势” 1、提高开发效率。由于 ORM 可以自动映射数据库中实体对象和表之间的字段和属性,我们可能不需要专门的庞大的数据访问层。2. ORM提供到数据库的映射,可以直接从数据库中获取数据,就像操作对象一样,不需要SQL编码。
“缺点”牺牲程序的执行效率和固定的思维方式,降低了开发的灵活性。
从系统结构来看,使用ORM的系统一般是多层系统。如果系统层数过多,效率就会降低。ORM是一种完全面向对象的方式,面向对象的方式也会对性能产生一定的影响。
当我们开发一个系统时,我们通常会遇到性能问题。主要的性能问题是不正确的算法和不正确的数据库使用。
ORM生成的代码不太可能写出非常高效的算法,更容易在数据库应用中被误用。主要体现在持久对象的提取和数据的处理上。如果使用ORM,程序员很可能会将所有数据提取到内存对象中,然后对其进行过滤处理,容易造成性能问题。
在持久化一个对象时,ORM 一般会持久化所有的属性。有时,这是不可取的。但是,ORM 是一个工具,可以解决一些重复性和简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸地解决所有问题。有些问题仍然需要特殊处理,但对于大多数系统来说,需要特殊处理的部分应该很少。
5、说说mybaits的优缺点
优势
①基于SQL语句编程,相当灵活,不会影响现有的应用程序或数据库设计。SQL采用XML编写,将SQL与程序代码解耦,便于统一管理。提供 XML 标签以支持动态 SQL 语句的编写,并可重复使用。
②与JDBC相比,代码量减少50%以上,消除了JDBC中的大量冗余代码,无需手动切换连接;
③ 对各种数据库非常兼容(因为mybatis使用JDBC连接数据库,所以只要JDBC支持的数据库mybatis都支持)。
④ 能与弹簧很好的结合;
⑤ 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
缺点
① 编写SQL语句的工作量大,尤其是字段多、关联表多的情况下,对开发人员编写SQL语句有一定的要求。
② SQL 语句依赖于数据库,导致数据库的可移植性差,不能随意替换数据库。
Mybatis框架适用于:
(1)Mybatis专注于SQL本身,是一个足够灵活的Dao层解决方案。
(2)Mybatis对于性能要求高或者需求变化多的项目会是一个不错的选择,比如互联网项目。
6、mybatis是如何分页的?
Mybatis 使用 rowboundaries 对象进行分页。它是结果集结果集的内存分页,而不是物理分页。首先,找出所有数据,然后进行分页。
可以直接在SQL中写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
7、分页插件的基本原理是什么?
分页插件的基本原理是利用mybatis提供的插件接口实现一个自定义插件,在插件的拦截方法中拦截要执行的SQL,然后重写SQL(SQL拼接限制),根据方言添加相应的物理分页语句和物理分页参数,使用JDK动态代理技术,使用责任链设计模式。
8、mybatis插件是如何工作的?
Mybatis 只能为 parameterhandler、resultshandler、statementhandler 和 executor 这四个接口编写插件。Mybatis利用JDK的动态代理,为需要拦截的接口生成代理对象,实现拦截接口方法的功能。每当执行四个接口对象的方法时,都会进入拦截方法,具体是invocationHandler的invoke()方法,当然只有你指定拦截的方法才会被拦截。
9、如何编写插件?
编写插件:实现mybatis的拦截器接口并复制intercept()方法,然后给插件写注释,指定拦截哪个接口的哪些方法,最后在配置文件中配置你写的插件. 推荐:推荐合集,mybatis插件原理详解
10、mybatis动态SQL有什么用?
Mybatis 动态 SQL 可以将动态 SQL 以标签的形式写在 XML Mapping 文件中。执行原理是完成逻辑判断,根据表达式的值动态调整SQL的功能。
Mybatis 提供了九个动态 SQL 标签:trim | where | set | foreach | if | choose | when | otherwise | bind。
11. XML Mapping 文件中的标签是什么?
除了常见的选择| 插入 | 更新 | 删除标签,有:
<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态SQL的9个Tag,其中<sql>Tag SQL
Fragment by <include>Tag引入SQL Fragment,<selectKey>为不支持自增的主键生成策略标签。
12、mybatis是否支持延迟加载?
Mybatis 只支持关联关联对象和集合关联集合对象的延迟加载。关联是指一对一,集合是指一对多查询。在mybatis配置文件中,可以配置是否开启延迟加载lazyLoadingEnabled=true|false。
13、延迟加载的基本原理是什么?
延迟加载的基本原理是使用cglib创建目标对象的代理对象,在调用目标方法时进入拦截器方法。
比如调用a.getB().getName()拦截器invoke()方法发现a.getB()为空值,然后将保存的SQL查询分别发送给B对象的SQL,B查询起来,然后调用。a.setB(b)然后,a的对象B属性就有了值,然后是完成a.getB().getName()方法。