有关mybatis的笔试

Posted 苏初之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关mybatis的笔试相关的知识,希望对你有一定的参考价值。

1.mybatis中的#{}${}的区别?

:

定义:#{}是预编译。

作用:mybatis处理#{}时,sql会将它替换成?,然后调用PreparedStatementset方法来赋值;还可以防止sql注入。

注释:sql注入是一种注入攻击,可以执行恶意的sql语句。是通过sql代码插入数据库查询,使得攻击者可以控制web应用服务后面的数据库服务器,可以对数据库进行一些操作。比如添加,修改和删除数据库中的数据。

定义:${}字符串替换。

作用:mybatis处理${}时,sql会将它替换成变量的值。

2.mybatis有几种分页方式?

:有四种,分别是数组分页,sql分页,拦截器分页,Rowbounds分页。

3.mybatis的物理分页与逻辑分页的区别?

:

定义:物理分页是依赖于某个物理实体,这个实体就是数据库,例如mysql数据库提供的limit关键字,程序员编写关于limit关键字的查询语句,数据库就会返回分页结果。

定义:逻辑分页是程序员编写的代码,数据库返回的不是分页结果,而是全部数据,然后程序员通过代码获取分页数据。常用操作就是一次性查询全部数据存放到list集合,然后通过索引获取指定范围的数据,

 

两者对比:

  1. 数据库的负担:因为物理分页每一次查询的会访问数据库,而逻辑分页只查询一次数据库,所以物理分页对数据库造成的负担更大。
  2. 服务器负担:逻辑分页是一次性将数据读取到内存中,占用了较大的内存空间,物理分页每一次访问数据库只读取一部分数据,占用内存空间较小,所以逻辑分页对服务器负担更大。
  3. 实时性:逻辑分页是一次性将数据读取到内存中,当数据发生改变,数据库中的最新状态不会实时反映到操作中,所以实时性差;物理分页每次需要数据时到需要去访问数据库,当数据发生改变时,数据库的最新状态可以实时反映到操作中,所以实时性强。
  4. 适用场合:逻辑分页适用于数据量小且数据稳定的场合,物理分页适用于数据量大且更新频繁的场合。

 

注:mybatisRowBounds分页使用的是逻辑分页,然后通过offsetlimit截断记录并返回分页结果。但是数据量大时会造成内存溢出。

 

4.简述mybatis的一级缓存和二级缓存?

答:一级缓存:它是基于PerpetualCache/ [p??pet?u?l]  [kæ?]hashMap本地存储,它存储的作用域是session。当Session flushclose之后,该session中的所有Cache都会被清空。一级缓存是默认打开的。

二级缓存和一级缓存的机制一样,都是基于PerpetualCacheHashMap本地存储,不同点是其存储的作用域是MapperNamespace),并且可以自定义存储源。二级缓存默认不打开,如果要开启二级缓存,需要使用二级缓存的属性类去是实现Serializable/[?s??r??la?z?bl] 序列化接口。

 

对于缓存数据的更新机制:当一个作用域进行增删改之后,默认该作用域下的所有查询的缓存都会被清空。

5.谈hibernatemybatis的区别?

答:Hibernate是当前流行的ormObject Relational Mapping)框架,对数据库结构进行了较完整的封装。

Mybatis也是当前流行的orm框架,主要着力点是POJOSQL之间的映射。POJO代表简单无规则java对象,纯的传统意义的Java对象,最基本的Java bean只有属性加上属性的getset方法,可以转化po,dto,vo.

1.两者最大的区别:针对简单查询,hibernatemybatis都有相应的代码生成工具,可以生成基本的dao层代码。

针对高级查询:mybatis需要手动去写SQL语句,以及ResultMap;而hibernate有良好的映射机制,开发者不需要关心sql生成和映射结果,可以更加关注业务流程。

2.开发难度对比:hibernate的开发难度大于mybatis,因为hibernate比较庞大复杂,而且学习周期比较长。而mybatis就比较简单,且它比较依赖于sql的书写,可以让开发者更加熟悉。

举一个形象的比喻:

Mybatis:机械工具,使用方便,拿来就用,但是工作还是要自己来做,不过工具是活的,怎么用由自己决定。

Hibernate:智能机器人,但研发(学习,熟练度)它的成本高,工作都可以交给它,但仅限于它能作的事。

 

6.Mybatis分页插件的实现原理是什么?

答:分页插件的基本原理是使用mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方法,添加相应的物理分页语句和物理分页参数。

以上是关于有关mybatis的笔试的主要内容,如果未能解决你的问题,请参考以下文章

mybatis里if标签判断字符串相等不相等的有关问题

mybatis缓存有关的设置和属性

MyBatis中的OGNL教程

有关MyBatis中的主键设置问题

[mybatis]缓存_缓存有关的设置以及属性

DAO层使用mybatis框架有关实体类的有趣细节