MyBatis面试可能会遇见的题

1.在使用MyBatis的时候,除了可以使用@Param注解来实现多参数不同类型入参,还可以用()传递多个参数值。

A.用Map对象可以实现传递多参数值

B.用List对象可以实现传递多参数值

C.用数组的方式传递

D.用Set集合的方式传递

2.如何获取自动生成的(主)键值

A.设置resultMap

B.设置useGeneratedKeys

C.设置keyProperty

D.设置Property

3.ORM是什么意思?

A.对象数据管理

B.对象关系映射

C.持久化数据

D.持久化对象

4.看程序进行分析:Public UserselectUser(String name,String area); #{0} 表示哪一个参数?

A.程序报错

B.name

C.area

D.0

5.在 MyBatis 动态 SQL 中,没有使用下列( )标签

A.for

B.if

C.choose

D.where

6.MyBatis中用于表示返回结果类型的属性名称是

A.resultType

B.parameterType

C.collection

D.returnType

7.、MyBatis中用于表示输入类型的属性名称是

A.resultType

B.parameterType

C.collection

D.returnType

8.在 MyBatis 中,配置结果映射时,使用( )标签实现1对多的关联

A.many-one

B.one-many

C.association

D.collection

9.在 MyBatis 中,配置结果映射时,使用( )标签实现多对1的关联

A.many-one

B.one-many

C.association

D.collection

10.下列不属于Activity生命周期方法的是

A.onCreate

B.onResume

C.onRestart

D.onRestop

11.下列( )不属于 MyBatis全局配置文件中的标签

A.settings

B.select

C.plugins

D.properties

12.MyBatis 指定配置文件的根元素使用的是( )。

A.

B.

C.

D.

13.在 MyBatis 的配置文件中,通过( )标签来设置实体类的别名

A.properties

B.settings

C.typeAliases

D.dataSource

14.在 MyBatis中调用SqlSessionFactoryBuilder的哪个方法用于获取SqlSession对 象( )。

A.getSession()

B.openSession()

C.session()

D.showSqlSession()

15.实体类中的属性名和表中的字段名不一样怎么处理?【选择二项】

A.查询的SQL语句中定义字段名的别名

B.不用处理

C.通过来映射字段名和实体类

D.通过来映射字段名和实体类

16.mybaties中模糊查询like语句的写法

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}"%"

17.Mybatis动态sql标签有哪些?

A.trim

B.foreach

C.set

D.than

18.Mybatis是如何将sql执行结果封装为目标对象并返回的

A.id

B.

C.使用sql列的别名

D.resultType

19. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?选择说法正确的

A.不同的xml映射文件,如果配置了namespace,那么id可以重复

B.如果没有配置namespace,那么id不能重复

C.如果没有配置namespace,那么id能重复

D.不同的xml映射文件,如果配置了namespace,那么id不可以重复

20.在MyBatis中,操作数据库的核心类是( )

A.SqlSessionFactory

B.SqlSession

C.Session

D.SqlSessionFactoryBuilder

21.关于MyBatis框架的使用说法错误的是( )

A.MyBatis是一个基于Java且封装了jdbc的数据库操作框架

B.MyBatis简化了jdbc数据库操作,但是sql语句还是自行编写

C.使用MyBatis框架,数据库创作的sql语句将会自动产生,无需自己编写

D.MyBatis是一个ORM框架

22.以下关于MyBatis和Hibernate两种持久层框架描述不正确的是( )

A.MyBatis需要自己编写sql语句实现操作,Hibernate不需要

B.两者都是实现了封装jdbc,简化操作数据库操作代码的目的

C.MyBatis封装了jdbc,而Hibernate则不是

D.MyBatis在对存储过程的调用支持上比Hibernate更好

23.在MyBatis中,在进行select查询映射时,下列关于返回类型的说法,正确的是( )

A.只能是resultType

B.只能是resultMap

C.可以是resultType或resultMap

D.以上说法都不对

24.在Mybatis中,SQL映射文件中配置insert语句时,在SQL SERVER中插入语句所在的表的ID为自动增长列,下列关于insert标签的说法,正确的是( )

A.必须要显示插入标识列中的值

B.可以使用userGeneratedKeys属性允许标识列的自动增长用于生成主键

C.使用任何数据库都可以使用自动生成主键策略

D.userGeneratedKeys属性对update标签也有作用

25.使用MyBatis的mapper接口调用时有哪些要求

A.Mapper接口方法名和mapper.xml中定义的每个sql的id相同

B.Mapper.xml文件中的namespace即是mapper接口的类路径

C.Mapper接口方法的输出参数类型和Mapper.xml中定义的每个sql的resultType的类型相同

D.Mapper接口方法的输入参数类型和Mapper.xml中定义的每个sql的parameterType的类型相同

26.以下关于MyBatis集合类型参数的处理,说法错误的是()

A.当参数为Collection接口,转化为Map,Map的Key为collection

B.当参数类型为List接口时,除了collection的值外,list作为key

C.如果参数为数组,也会转化为Map,Map的key为array

D.如果参数为数组,也会转化为Map,Map的key为list

27.主要用于更新时的mybatis动态sql标签是

A.Choose(where/otherwise)

B.Set

C.Where

D.Foreach

28.关于MyBatis中传递多参数的情况,如果参数封装成了Student类,那么在Mapper.xml中获取数据,应该怎么操作()

A.条件获取数据可以通过#{属性名}来获得

B.条件获取数据可以通过#{arg0}来获得

C.条件获取数据可以通过#{arg1}来获得

D.条件获取数据可以通过#{属性名}或者#{arg0}来获得

29.MyBatis编程步骤选择正确顺序的一项

A.Step1:创建SQLSessionFactory Step2:通过SQLSessionFactory 创建SQLSession  Step3:通过SQLSession 执行数据库操作  Step4:调用session.close()关闭会话

B.Step1:创建SQLSession Step2:通过SQLSession执行数据库操作  Step3:调用session.commit()提交事务  Step4:调用session.close()关闭会话

C.Step1:创建SQLSession Step2:通过SQLSession创建SQLSessionFactory   Step3:通过SQLSessionFactory执行数据库操作   Step4:调用session.commit()提交事务  Step5:调用session.close()关闭会话

D.Step1:创建SQLSessionFactory  Step2:通过SQLSessionFactory创建SQLSession  Step3:通过SQLSession执行数据库操作   Step4:调用session.commit()提交事务  Step5:调用session.close()关闭会话

30.MyBatis注解中怎么给参数一个名字()

A.@Param C11

B.@Select

C.Options

D.@Results

31.以下关于MyBatis传递数组参数的说法错误是()

A.在映射文件中取得数组值应该通过标签

B.标签可以应用于set,list以及数组的取值

C.传递数组的值,和多参数传值一样,在映射文件中只能通过取值

D.标签的open和close属性用于写开始和结束标签

32.关于MyBatis参数处理说法正确的是

A.传递单个参数时,MyBatis会自动封装到Map集合中

B.传递单个参数时,MyBatis会自动进行参数的赋值

C.传递多个参数时,MyBatis会自动封装到Map集合中

D.传递多个参数时,MyBatis会自动进行参数的赋值

33.在MyBatis数据库操作时,需要编写()和对应的xml文件,其中xml文件中编写的是对应Sql语句

A.接口和抽象方法

B.普通类和普通方法

C.抽象类和抽象方法

D.普通类和抽象方法

34.映射一对一使用的标签是

A.many-one

B.one-many

C.association

D.collection

35.MyBatis是那一层的框架

A.表示层

B.业务逻辑层

C.持久层

D.数据库层

36.配置实体包的别名,正确的写法是

A.

B.

C.

D.

37.编译Java程序的命令是

A.appletviewer

B.javac

C.java

D.javadoc

38.想实现批量删除的动态sql的标记可选择

A.Choose(where/otherwise)

B.Set

C.Where

D.Foreach

39.使用MyBatis Generator自动工具生成的文件不包含( )

A.Entity

B.DAO类

C.SqlMap.xml

D.Mapper XML

40.多选题 MyBatis内置类型别名有

A._int

B.Integer

C.int

D.String

41.MyBatis对JDBC访问数据库的代码进行封装,从而大大简化了数据访问层的重复性代 码,它是针对三层架构中( )的解决方案

A.表现层

B.业务逻辑层

C.持久化层

D.数据库系统

42. 单选题 MyBatis生命周期说法错误的是 

A. SqlSessionFactoryBuilder实例的最佳作用域是方法范围,也就是定义为本地方法变量既可

B.SqlSessionFactory实例的生命周期应该在整个应用的执行期间都存在

C.SqlSession实例时线程不安全的,因此其生命周期应该是请求或方法范围

D.SqlSession实例通常定义为一个类的静态变量

43.模糊查询like语句该怎么写?第一种:在Java代码中添加(sql通配符)。第二种:在sql语句中添加(拼接通配符),会引起sql注入。

44.四个核心接口是(Executor)用于执行CRUD操作,(ParameterHandler)处理SQL的参数,(PesultSetHandler)处理返回结果集,(StatementHandler)用于执行SQL语句

45.MyBatis中提供了一级缓存和二级缓存,其中(一级缓存)默认存在,不可控制,同一SqlSession范围内的操作共享该缓存,增、删、改后将(清除缓存)。

46.MyBatis动态sql有什么用?执行原理?

答:MyBatis动态sql可以在xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值完成逻辑判断并动态拼接sql的功能

47.什么是mybatis?

答:①Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。②MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。③通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。

48.mybatis的优点?

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

49.MyBatis框架的缺点?

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

50.#{}和${}的区别

答:①#{}是预编译处理,${}是字符串替换。②Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;③Mybatis在处理 ${}替换成变量的值。④使用#{}可以有效的防止SQL注入,提高系统安全性。

你可能感兴趣的:(MyBatis面试可能会遇见的题)