您的位置:首页 > 职场人生

mybatis面试题

2020-04-19 23:10 459 查看

mybatis面试题

1/34 填空题 Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
不同的Xml映射文件,如果配置了namespace,那么id____;如果没有配置
namespace,那么id____; (5分)
正确答案: 可以重复 不能重复
题目解析 
分数: 5
按空得分,只要一空答对就得分
2/34 填空题 #{}和KaTeX parse error: Expected 'EOF', got '#' at position 10: {}的区别是什么?#̲{}是_____,{}是_____。 (5分)
正确答案: 预编译处理 字符串替换
题目解析 
分数: 2
3/34 多选题 对mybatis描述有误的是? (2分) A. MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架
B. MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面
C. Mybatis是一个全ORM(对象关系映射)框架,它内部封装了JDBC
D. MyBatis 只可以使用 XML来配置和映射原生信息
正确答案: C, D
题目解析
4/34 多选题 Mybatis是如何将sql执行结果封装为目标对象并返回的 (2分) A. id
B. 标签
C. 使用sql列的别名
分数: 2
D. resultType
正确答案: B, C
题目解析
分数: 2
5/34 多选题 mybaties中模糊查询like语句的写法 (2分) A. select * from foo where bar like #{value}
B. select * from foo where bar like #{%value%}
C. select * from foo where bar like %#{value}%
D. select * from foo where bar like “%”${value}"%"
正确答案: A, D
题目解析
分数: 2
6/34 多选题 Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?
选择说法正确的 (2分) A. 不同的Xml映射文件,如果配置了namespace,那么id可以重复
B. 如果没有配置namespace,那么id不能重复
C. 如果没有配置namespace,id能重复
D. 不同的Xml映射文件,如果配置了namespace,那么id不可以重复
正确答案: A, B
题目解析
分数: 2
7/34 多选题 Mybatis的mapper接口调用时候的要求正确的是: (2分) A. Mapper接口方法名和Mapper.xml中定义的每个SQL的id相同;
B. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sqlparameterType类型
相同
C. Mapper接口方法的输入输出参数类型和mapper.xml中定义的每个sql的resultType的
类型相同
D. Mapper.xml文件中的namespace,就是接口的名字
正确答案: A, B, C
题目解析
分数: 2
8/34 多选题 MyBatis内置类型别名有 (2分) A. _int
B. Integer
C. int
D. String
正确答案: A, C
题目解析
分数: 2
9/34 多选题 Mybatis动态sql标签有哪些? (2分) A. trim
B. foreach
C. set
D. than
正确答案: A, B, C
题目解析
分数: 2
10/34 多选题 Mybaits的优点正确的是? (2分) A. 基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影
响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理
B. 与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手
动开关连接
C. 很好的与各种数据库兼容
D. 它是一全个ORM框架,MyBatis不需要程序员自己编写Sql语句。
正确答案: A, B, C
题目解析
11/34 多选题 实体类中的属性名和表中的字段名不一样怎么处理?【选择二项】
(2分) A. 查询的sql语句中定义字段名的别名
分数: 2
B. 不用处理
C. 通过来映射字段名和实体类属性名
D. 通过来映射字段名和实体类属性名
正确答案: A, C
题目解析
分数: 2
12/34 多选题
(选择二项) (2分) A. JDBC
B. MANAGED
C. POOLED
D. JNOI
正确答案: A, B
题目解析
分数: 2
13/34 单选题 在mybatis的配置文件中,通过( )标签来设置实体类的别名。
(2分) A. properties
B. settings
C. typeAliases
D. dataSource
正确答案: C
题目解析
14/34 单选题 下列( )不属于 MyBatis全局配置文件中的标签 (2分) A. settings
B. select
C. plugins
D. properties
正确答案: B 分数: 2
题目解析
分数: 2
15/34 单选题 在Mybatis中,SQL映射文件中配置insert语句时,在SQL
SERVER中插入语句所在的表的ID为自动增长列,下列关于insert标签的说法,正
确的是( ) (2分) A. 必须要显示插入标识列中的值
B. 使用任何数据库都可以使用自动生成主键策略
C. useGeneratedKeys属性对update标签也有作用
D. 可以使用useGeneratedKeys属性允许标识列的自动增长用于生成主键
正确答案: D
题目解析
分数: 2
16/34 单选题 在 MyBatis 中,操作数据库的核心类是 (2分) A. SqlSessionFactory
B. SqlSession
C. Session
D. SqlSessionFactoryBuilder
正确答案: B
题目解析
分数: 2
17/34 单选题 在使用MyBatis的时候,除了可以使用@Param注解来实现多参数入参,还可以用()传递多个
参数值。 (2分) A. 用Map对象可以实现传递多参数值
B. 用List对象可以实现传递多参数值
C. 用数组的方式传递
D. 用Set集合的方式传递
正确答案: A
题目解析
分数: 2
18/34 单选题 在 MyBatis 中,配置结果映射时,使用( )标签实现多对1的关
联 (2分) A. many-one
B. one-many
C. association
D. collection
正确答案: C
题目解析
分数: 2
19/34 单选题 MyBatis操作数据库时的接口方法中,如果传入的参数名和动态sql
中使用时不一致,则需要使用( )注解修饰。 (2分) A. @RequestParam
B. @Parameter
C. @String
D. @Param
正确答案: D
题目解析
分数: 2
20/34 单选题 在mybatis中,配置结果映射时,使用( )标签实现一对多的关
联 (2分) A. many-one
B. one-many
C. association
D. collection
正确答案: D
题目解析
21/34 单选题 MyBatis 中对复杂数据映射到一个结果集的配置使用的标签是( )
(2分) A.
分数: 2
B.
C.
D.
正确答案: A
题目解析
分数: 2
22/34 单选题 在 MyBatis 动态 SQL 中,循环使用的标签名是( )。 (2分) A. for
B. while
C. foreach
D. do-while
正确答案: C
题目解析
分数: 2
23/34 单选题 看程序进行分析:Public UserselectUser(String name,String
area);
<select id="selectUser"resultMap=“BaseResultMap”>
select * fromuser_user_t whereuser_name = #{0} anduser_area=#{1}

#{0} 表示哪一个参数? (2分) A. 程序报错
B. name
C. area
D. 0
正确答案: B
题目解析
24/34 单选题 MyBatis对JDBC访问数据库的代码进行封装,从而大大简化了数
据访问层的重复性代
码,它是针对三层架构中( )的解决方案 (2分) A. 表现层
分数: 2
B. 业务逻辑层
C. 持久化层
D. 数据库系统
正确答案: C
题目解析
分数: 2
25/34 单选题 MyBatis生命周期说法错误的是 (2分) A. SqlSessionFactoryBuilder实例的最佳作用域是方法范围,也就是定义为本地方法变
量既可
B. SqlSessionFactory实例的生命周期应该在整个应用的执行期间都存在
C. SqlSession实例时线程不安全的,因此其生命周期应该是请求或方法范围
D. SqlSession实例通常定义为一个类的静态变量
正确答案: D
题目解析
分数: 2
26/34 单选题 以下不属于一对多的是? (2分) A. 帅哥和美女
B. 学生和班级
C. 投影和学生
D. 学校和班级
正确答案: A
题目解析
27/34 单选题 在MyBatis中,在进行select查询映射时,下列关于返回类型的说
法,正确的是( ) (2分) A. 只能是resultType
B. 只能是resultMap
C. 可以是resultType或resultMap
D. 以上说法都不正确
正确答案: C 分数: 2
题目解析
分数: 2
28/34 单选题 配置实体包的别名,正确的写法是 (2分) A.


B.


C.


D.


正确答案: A
题目解析
分数: 2
29/34 单选题 一辆汽车由多个零部件组成,且相同的零部件可适用于不同型号的
汽车,则汽车实体集与零部件实体集之间的联系是( ) (2分) A. 1 : M
B. 1:1
C. M : 1
D. M : N
正确答案: D
题目解析
30/34 单选题 编译Java程序的命令是 (2分) A. appletviewer
B. javac
C. java
分数: 2
D. javadoc
正确答案: B
题目解析
分数: 2
31/34 单选题 在MyBatis数据库操作时,需要编写( )和对应的Xml文件,其
中Xml文件中编写的是对应Sql语句 (2分) A. 接口和抽象方法
B. 普通类和普通方法
C. 抽象类和抽象方法
D. 普通类和抽象方法
正确答案: A
题目解析
分数: 2
32/34 单选题 在 MyBatis 中,配置结果映射时,使用( )标签实现1对多的关
联 (2分) A. many-one
B. one-many
C. association
D. collection
正确答案: D
分数: 15
33/34 问答题 Mybatis动态sql有什么用?执行原理? (15分)
参考答案
Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql,执行原理
是根据表达式的值 完成逻辑判断并动态拼接sql的功能。
34/34 问答题 如何获取自动生成的(主)键值? (15分)
关键字
usegeneratedkeys 1分
keyproperty 1分
参考答案
如果采用自增长策略,自动生成的键值在 insert 方法执行完后可以被设置到传
入的参数对象中。
usegeneratedkeys=”true” keyproperty=”id”

Mybaits的优点:
1、基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。
2、与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
3、很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。
4、能够与Spring很好的集成;
5、提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

MyBatis框架的缺点:
1、SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。
2、SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

MyBatis框架适用场合:
1、MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。
2、对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

MyBatis与Hibernate有哪些不同?
1、Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。
2、Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。
3、Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。

#{}和KaTeX parse error: Expected 'EOF', got '#' at position 11: {}的区别是什么? #̲{}是预编译处理,{}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理时,就是把{}时,就是把时,就是把{}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。

当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
第1种:通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。
第2种:通过 来映射字段名和实体类属性名的一一对应的关系。

通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
Dao接口即Mapper接口。接口的全限名,就是映射文件中的namespace的值;接口的方法名,就是映射文件中Mapper的Statement的id值;接口方法内的参数,就是传递给sql的参数。
Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MapperStatement。在Mybatis中,每一个 、、、标签,都会被解析为一个MapperStatement对象。

Mybatis是如何进行分页的?分页插件的原理是什么?
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
第一种是使用 标签,逐一定义数据库列名和对象属性名之间的映射关系。
第二种是使用sql列的别名功能,将列的别名书写为对象属性名。
有了列名与属性名的映射关系后,Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。

为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

MyBatis实现一对多有几种方式,怎么操作的?
有联合查询和嵌套查询。联合查询是几个表联合查询,只查询一次,通过在resultMap里面的collection节点配置一对多的类就可以完成;嵌套查询是先查一个表,根据这个表里面的 结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。

MyBatis实现一对一有几种方式?具体怎么操作的?
有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成;
嵌套查询是先查一个表,根据这个表里面的结果的 外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置。

Mybatis的一级、二级缓存:
1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。
2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置

<cache/>

3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
weixin_46853313 发布了2 篇原创文章 · 获赞 0 · 访问量 29 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: