mybatis面试题
mybatis选择题题库

mybatis选择题题库含解答共20道1. 问题:MyBatis是一种什么类型的持久层框架?- a. ORM框架- b. MVC框架- c. AOP框架- d. IoC容器答案:a. ORM框架2. 问题:在MyBatis中,#{param}和${param}的区别是什么?- a. #{param}用于设置预编译参数,${param}用于字符串替换- b. #{param}用于字符串替换,${param}用于设置预编译参数- c. 两者没有区别- d. #{param}和${param}不能同时使用答案:a. #{param}用于设置预编译参数,${param}用于字符串替换3. 问题:MyBatis中的动态SQL是通过哪个标签实现的?- a. \<if>- b. \<choose>- c. \<foreach>- d. \<sql>答案:b. \<choose>4. 问题:MyBatis中,一对一关联关系的映射是通过哪个元素实现的?- a. \<one-to-one>- b. \<resultMap>- c. \<association>- d. \<many-to-one>答案:c. \<association>5. 问题:MyBatis的缓存机制默认是开启的吗?- a. 是- b. 否答案:a. 是6. 问题:MyBatis中的批量插入操作通常使用哪个元素?- a. \<batch>- b. \<foreach>- c. \<insert>- d. \<update>答案:b. \<foreach>7. 问题:在MyBatis中,如果想要返回自增主键,可以使用哪个属性?- a. keyProperty- b. useGeneratedKeys- c. generatedKey- d. returnGeneratedKeys答案:b. useGeneratedKeys8. 问题:MyBatis中的逆向工程是通过哪个工具生成的?- a. MyBatis Generator- b. Hibernate Tools- c. Spring Roo- d. Apache Maven答案:a. MyBatis Generator9. 问题:MyBatis中的拦截器是通过哪个接口实现的?- a. Interceptor- b. MapperInterceptor- c. MyBatisInterceptor- d. Plugin答案:a. Interceptor10. 问题:MyBatis中的动态数据源切换是通过哪个技术实现的?- a. AOP- b. 注解- c. ThreadLocal- d. 注入答案:c. ThreadLocal11. 问题:在MyBatis中,如果需要返回多个查询结果集,可以使用哪个元素?- a. \<select>- b. \<resultMap>- c. \<association>- d. \<resultSets>答案:d. \<resultSets>12. 问题:MyBatis中的懒加载是通过什么机制实现的?- a. AOP- b. 代理模式- c. 工厂模式- d. 观察者模式答案:b. 代理模式13. 问题:在MyBatis中,#{}, ${}, <![CDATA[]]> 的作用分别是什么?- a. #{}, ${}都是用于设置预编译参数,<![CDATA[]]>用于包裹动态SQL- b. #{}, ${}都是用于字符串替换,<![CDATA[]]>用于设置预编译参数- c. #{}, ${}都是用于字符串替换,<![CDATA[]]>用于包裹动态SQL- d. #{}, ${}都是用于设置预编译参数,<![CDATA[]]>用于字符串替换答案:a. #{}, ${}都是用于设置预编译参数,<![CDATA[]]>用于包裹动态SQL14. 问题:在MyBatis中,如果使用注解方式配置SQL语句,可以使用哪个注解?- a. @Query- b. @Sql- c. @Statement- d. @Select答案:d. @Select15. 问题:MyBatis的架构中,SqlSession的作用是什么?- a. 用于执行SQL语句- b. 用于映射Java对象和数据库记录- c. 用于管理数据库连接- d. 用于配置数据源答案:a. 用于执行SQL语句16. 问题:在MyBatis中,#{}和${}的主要区别是什么?- a. #{}用于预处理参数,${}用于直接替换字符串- b. #{}用于直接替换字符串,${}用于预处理参数- c. #{}用于动态SQL,${}用于设置预处理参数- d. #{}和${}在MyBatis中没有区别答案:a. #{}用于预处理参数,${}用于直接替换字符串17. 问题:MyBatis的二级缓存是默认开启的吗?- a. 是- b. 否答案:b. 否18. 问题:在MyBatis中,如何配置全局的参数映射器(TypeHandler)?- a. 在全局配置文件中配置- b. 在Mapper接口中配置- c. 在Mapper XML 文件中配置- d. 在数据库连接配置中配置答案:a. 在全局配置文件中配置19. 问题:在MyBatis中,#{param}和${param}的作用范围是什么?- a. #{param}只能用于设置预编译参数,${param}只能用于字符串替换- b. #{param}和${param}在MyBatis中没有区别- c. #{param}和${param}都可以用于设置预编译参数和字符串替换- d. #{param}只能用于字符串替换,${param}只能用于设置预编译参数答案:c. #{param}和${param}都可以用于设置预编译参数和字符串替换20. 问题:在MyBatis中,如何配置Mapper接口的方法参数映射?- a. 在Mapper接口方法上使用@Param注解- b. 在Mapper XML 文件中使用\<parameter>元素- c. 在全局配置文件中使用\<parameterMap>元素- d. 在Mapper接口方法上直接使用参数名答案:a. 在Mapper接口方法上使用@Param注解。
中间件 面试题

中间件面试题中间件是一种用于分布式系统中的软件模块,用于增加系统的可靠性、可扩展性和可管理性。
在中间件面试中,常常会涉及到以下一些常见的问题和知识点。
本文将以问答的形式来逐一解答这些问题。
问题一:什么是中间件?中间件是一种在分布式系统中用于连接不同端点、协助信息传递和处理的软件模块。
它充当了系统中的一个逻辑层,屏蔽了底层系统的复杂性,提供了一种简化和统一的接口,使得不同的应用程序可以方便地进行通信和协作。
问题二:中间件的作用是什么?中间件的主要作用包括以下几个方面:1. 提高系统的可靠性和容错性:中间件可以通过实现故障转移、负载均衡等机制来提高系统的可靠性和容错性。
2. 改善系统的可扩展性:中间件可以利用集群、分布式缓存等技术来实现系统的横向扩展,提升系统的处理能力。
3. 统一接口和协议:中间件可以提供一套统一的接口和协议,使得不同的应用程序可以方便地进行通信和协作。
4. 简化开发和部署:中间件可以提供一些开发工具和部署工具,帮助开发人员更方便地进行应用程序开发和部署。
问题三:中间件的分类有哪些?中间件的分类可以根据不同的维度,例如功能、使用场景等进行划分。
根据功能,中间件可以分为消息中间件、数据库中间件、缓存中间件等;根据使用场景,中间件可以分为企业应用集成(EAI)中间件、云计算中间件、物联网(IoT)中间件等。
问题四:常见的消息中间件有哪些?常见的消息中间件包括:1. Apache Kafka:一个分布式流处理平台,具有高性能、高吞吐量、可持久化、容错等特性。
2. RabbitMQ:一个开源的消息中间件,支持多种协议,包括AMQP、MQTT等。
3. ActiveMQ:一个由Apache基金会支持的开源消息中间件,支持JMS协议。
4. RocketMQ:阿里巴巴开源的分布式消息中间件,具有高吞吐量、低延迟、高可靠性等特点。
问题五:数据库中间件有哪些?常见的数据库中间件包括:1. MySQL Proxy:一个MySQL数据库的代理,可以实现负载均衡、故障转移等功能。
mybatis填空题

mybatis填空题
以下是一些关于MyBatis的填空题:
1. MyBatis是一个基于Java的________框架,用于简化数据库访问操作。
2. MyBatis通过配置文件和注解方式将接口与SQL语句绑定,支持________和________两种映射方式。
3. MyBatis的配置文件通常使用XML格式编写,包含了数据库连接信息、SQL语句映射、事务管理等配置信息。
4. MyBatis支持使用________和________两种方式传递参数给SQL语句。
5. MyBatis可以通过________标签在SQL语句中添加动态条件,根据不同情况生成不同的SQL语句。
6. MyBatis的________标签用于结果集映射,将查询结果映射到Java对象中。
7. MyBatis的________标签用于指定要执行的SQL语句,可以包含占位符,通过参数自动填充。
8. MyBatis中可以使用________标签将结果集映射到Map中,以键值对形式返回结果。
9. MyBatis支持使用________和________两种方式进行事务管理。
10. MyBatis的________接口用于配置事务管理器,可以通过实现该接口自定义事务管理逻辑。
软件开发mybatis技术(习题卷1)

软件开发mybatis技术(习题卷1)第1部分:单项选择题,共76题,每题只有一个正确答案,多选或少选均不得分。
1.[单选题]ResultMap中映射到列结果的字段或者属性的是A)columnB)propertyC)javaTypeD)jdbcType答案:B解析:2.[单选题]在使用Spr ingMVC的项目中,进行服务器端验证,用什么注解可以实现正则匹配A)@SizeB)@PatternC)@MaxD)@Past答案:B解析:3.[单选题]mybatis配置文件的根标签是:A)mapperB)configurationC)htmlD)xml答案:B解析:4.[单选题]使用一对多的标签是()A)associationB)collectionC)OneToManyD)ManyToOne答案:B解析:5.[单选题]在Mybatis 注册Mappers信息时添加配置为:A)<mapper resource="dao.EmpDaoMapper.xml"></mapper>B)<mapper resource="dao\EmpDaoMapper.xml"></mapper>C)<mapper resource="dao/EmpDao"></mapper>D)<mapper resource="dao/EmpDaoMapper.xml"></mapper>答案:D解析:6.[单选题]映射文件的<mapper namespace=””>配置可以是任意字符串吗?A)可以,但只能通过完全限定名调用D)不可以,这样映射文件就找不到对应的接口类答案:A解析:7.[单选题]Mybatis中< select >标签的作用A)添加B)修改C)删除D)查询答案:D解析:8.[单选题]Mybatis是如何将sql执行结果封装为目标对象并返回的A)idB)使用sql列的别名C)resultTypeD)resultMap答案:B解析:9.[单选题]下面对Spring中Bean的注入说法正确的是A)Bean根据注入方式不同可以分为构造方法注入和自动装载B)使用构造方法注入构造对象的同时,完成依赖关系的建立C)在关系的对象很多时,使用构造方法注入更适合D)构造方法通过constructor-index属性来指定,在该标签下要指定索引的位置答案:B解析:10.[单选题]每个基于 MyBatis 的应用都是以一个() 的实例为中心的A)SqlSessionFactoryB)SqlSessionC)SessionD)SqlSessionFactoryBuilder答案:A解析:11.[单选题]在MyBatis中,使用jdbc方式返回主键自增的值需要设置<insert>标签的什么属性( )A)idB)parameterTypeC)keyPropertyD)useGeneratedKeys答案:D解析:12.[单选题]下列不属于Spring MVC控制器的是?A)前端控制器(dispatcherServlet)B)请求到处理器映射(handlerMapping)C)视图解析器(ViewResolver)D)处理器适配器(ConntrllerAdapter)13.[单选题]MyBatis中用于表示返回结果类型的属性名称是A)resultTypeB)parameterTypeC)collectionD)returnType答案:A解析:14.[单选题]关于AspectJ注解的介绍,说法错误的是A)@Aspect用于定义一个切面B)@Pointcut用于定义切入点表达式C)@Before用于定义前置通知,相当于BeforeAdviceD)@After用于定义后置通知,相当于AfterReturningAdvice答案:D解析:15.[单选题]在下划线处填写正确代码实现重定向@RequestMapping("/toJump") public String skipTest(){ return "_______:/jump.do"; }A)skipB)forwardC)redirectD)to答案:C解析:16.[单选题]Spring的核心机制是( )A)依赖注入B)数据访问C)AOPD)声明式事务答案:A解析:17.[单选题]使用()标签注入Properties集合元素A)B)C)<list>D)<map>答案:A解析:18.[单选题]<result column="loc" property="loc"/>标签中” property”的作用A)配置对应表中的列名B)配置对应的实体类C)配置对应的测试类D)配置对应的实体类中的成员变量答案:D解析:19.[单选题]以下代码是哪种( )注入方式<bean id="student" class="com.mhys.bean.Student"> <!-- name:属性B)构造方法注入C)set注入D)表达式spel方式注入答案:C解析:20.[单选题]使用()标签注入数组元素A)<import>B)<list>C)<autowire>D)<factory-bean>答案:B解析:21.[单选题]关于@RestController控制器说明正确的是?A)是Spring的内容注解B)是Spring的路径注解C)是Spring的控制器注解D)@Controller 注解更强大答案:C解析:22.[单选题]Mybatis的表关联的映射描述错误的是()A)一对一关联B)一对多关联C)多对多关联D)以上都不对答案:D解析:23.[单选题]在Spring中, 以下代码属于( )注入方式<bean id="student" class="com.mhys.bean.Student"> <!--name:属性名 value:属性值 --> </property></bean>A)p命名空间注入B)构造方法注入C)set注入D)表达式spel方式注入答案:C解析:24.[单选题]下列注解限制必须为一个不大于指定值得数字是?A)@Max(value)B)@Min(value)C)@DecimalMax(value)D)@DecimalMin(value)答案:C解析:25.[单选题]MVC中M是A)ModelD)ModelAndView答案:A解析:26.[单选题]以下哪个属性是<bean>标签的名称标识?A)idB)nameC)classD)factory-bean答案:B解析:27.[单选题]mybatis指定配置文件的根元素使用的是什么A)<sqlMapConfig>B)<configration>C)<setting>D)<environments>答案:B解析:28.[单选题]SpringMVC处理响应时,默认采用的是下列( )方式进行A)重定向B)转发C)先重定向,然后转发D)先转发,然后重定向答案:B解析:29.[单选题]Mybatis 会不会为程序员在运行期自动生成SQL执行?A)不会B)会C)可能会D)不确定答案:A解析:30.[单选题]下列限制只能为false的标签是?A)@AssertFalseB)@NullC)@DecimalMin(value)D)@IsFalse答案:A解析:31.[单选题]Maven项目的主配置文件是()A)pom.xmlB)web.xmlC)mysql-config.xmlD)application.xml32.[单选题]MVC中v是A)ModelB)ViewC)ControllerD)ModelAndView答案:B解析:33.[单选题]Spring的优势不包括以下哪个选项( )。
ssm面试题及答案

ssm面试题及答案SSM(Spring + Spring MVC + MyBatis)是一种流行的Java开发框架,广泛应用于企业级应用程序的开发中。
在SSM开发中,技术面试是非常重要的环节,通过面试可以评估面试者对SSM框架的理解和能力。
本文将提供一些常见的SSM面试题及答案,帮助读者为SSM面试做好准备。
1. 什么是SSM框架?SSM框架是一种基于Spring、Spring MVC和MyBatis的Java Web开发框架。
Spring是一个轻量级的IoC(控制反转)和AOP(面向切面编程)容器,Spring MVC是基于Spring的MVC(模型-视图-控制器)框架,MyBatis是一个优秀的持久层框架,它可以与Spring无缝集成。
2. SSM框架的优点有哪些?SSM框架具有以下优点:- 灵活性:SSM框架采用模块化的设计,使得开发者可以按需选择使用各个模块,灵活性高。
- 易于学习和使用:SSM框架的学习曲线相对较低,上手快,文档和教程丰富。
- 安全性:SSM框架提供了一些安全性措施,如表单验证、身份认证等。
- 卓越的性能:SSM框架通过MyBatis提供高性能、高度优化的数据库访问方式。
3. Spring框架的优点是什么?Spring框架具有以下优点:- IoC容器:Spring框架通过IoC容器管理对象之间的依赖关系,降低了代码的耦合性,提高了代码的可维护性和可测试性。
- AOP支持:Spring框架提供了对面向切面编程的支持,使得开发者可以将一些通用的功能(如日志记录、事务管理)从业务逻辑中解耦出来,提高了代码的重用性。
- 事务管理:Spring框架提供了对事务的支持,通过声明式事务管理简化了事务操作的编码工作。
4. Spring MVC框架的优点是什么?Spring MVC框架具有以下优点:- 简单易用:Spring MVC框架提供了简单易用的编程模型,使得开发者可以快速开发Web应用程序。
《MyBatis数据持久化框架》笔试题库

《MyBatis数据持久化框架》笔试题库1. 在MyBatis中,开发Mybatis不需要下列哪些步骤添加Mybatis核心包配置mybatis配置文件mybatis-config.xml配置全局属性、数据源和实体包的别名实现静态列表html页面(正确答案)2. 在MyBatis中对JDBC访问数据库的代码进行封装,从而大大简化了数据访问层的重复性代码,它是针对三层架构中()的解决方案表现层业务逻辑层持久化层(正确答案)数据库系统3. 在MyBatis中,关于log4j日志级别不包含以下那种update(正确答案)ERRORTRACEDEBUG4. 在MyBatis中,操作数据库的核心类是()SqlSessionFactorySqlSession(正确答案)SessionSqlSessionFactoryBuilder5. 在MyBatis中,将以下划线命名的数据库列映射到Java对象的驼峰命名属性的配置是什么()sqlSessionFactorypropertymapUnderscoreToCamelCase(正确答案)jdbcType6. 在MyBatis中,查询列前缀属性为propertyjavaTypeColumnPrefix(正确答案)ColumnBefore7. Mybaits中的前身是()IBATIS(正确答案)BeginClintonApache8. 在MyBatis中对结果集的配置使用的标签是以下()<result><resultMap>(正确答案)<map><collection>9. 在MyBatis中,删除具有主从关系的主表记录时会出现删除异常,可以使用什么解决方式()【选两项】设置从表的删除时规则为“置为NULL”(正确答案)设置主表的删除时规则为“置为NULL”设置从表的删除时规则为“置为级联”(正确答案)设置主表的删除时规则为“置为级联”10. 在MyBatis中,执行以下代码生成结果变量result代表的含义是什么intresult=userMapper.deleteUserById(id);()删除消耗时间删除数据字段数量数据删除受影响的行数(正确答案)数据库剩余数据行数11. 在MyBatis数据库操作时,需要编写()和对应的xml文件,其中xml文件中编写的是对应Sql语句接口和抽象方法(正确答案)普通类和普通方法抽象类和抽象方法普通类和抽象方法12. 在MyBatis中,@SelectKey(statement="select last_insert_id()",keyProperty="id",resultType=Long.class, before=false)注解的作用是什么()返回值为最后一次插入数据的id值(正确答案)查询数据库中最大的id值查询当前数据库中id的数量查询数据库中是否存在相同id13. 在MyBatis中,以下哪项不属于xml映射文件标签resultMapparameter(正确答案)include14. 在MyBatis中用于表示返回结果类型的属性名称是resultType(正确答案)parameterTypecollectionreturnType15. 在MyBatis中用于表示输入类型的属性名称是resultTypeparameterType(正确答案)collectionreturnType16. 在 MyBatis 的配置文件中,通过()标签来设置实体类的别名propertiessettingstypeAliases(正确答案)dataSource17. 在MyBatis中,以下哪项不属于Mybatis全局配置文件中的标签propertiesdata(正确答案)typealiases18. 在MyBatis中,以下哪项不属于resultMap的自动映射级别NONEPARTIALFULLANY(正确答案)19. 在MyBatis中,以下说法错误的是Mapper接口方法名和mapper.xml中定义的每个sql的id可以不同(正确答案)Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType 的类型相同Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同Mapper.xml文件中的namespace即是mapper接口的类路径20. 在MyBatis中,用于取出由数据库内部生成主键的属性是()keyPropertyuseGeneratedKeys(正确答案)keyColumndataBaseid21. 在MyBatis中,更新数据的Mapper.xml的标签是什么InsertSelectUpdate(正确答案)Delete22. 在MyBatis中,使用jdbc方式返回主键自增的值需要设置<insert>标签的什么属性()idparameterTypekeyPropertyuseGeneratedKeys(正确答案)23. 在Mybatis中实现DML操作的标签有哪些()【选三项】<insert>(正确答案)<update>(正确答案)<delete>(正确答案)<provider>24. 在Mybatis中接口方法中只有一个参数时,在映射器XML可用的参数是什么(){param}{param0}{arg0}(正确答案){arg1}25. 在Mybatis中接口绑定的方式有哪两种【选两项】注解绑定(正确答案)直接绑定XML里面写SQL绑定(正确答案)XML里面写方法绑定26. 在mapper中如何传递多个参数【选两项】使用占位符的思想(正确答案)使用数组传递使用map集合作为参数来装载(正确答案)无法实现27. 在Mybatis中,设置自动生成主键后通过什么属性获取自动生成的(主)键值设置resultMap设置useGeneratedKeys设置keyProperty(正确答案)设置Property28. 在Mybatis的ORM映射中,表中的列名需要和()进行映射?类名类中的属性名(正确答案)类的包名id29. 在Mybatis中,Mapper接口的方法名需要和Mapper对应XML文件中的()对应标签名id(正确答案)参数名parameterType30. 在MyBatis中,以下关于MyBatis集合类型参数的处理,说法错误的是()当参数为Collection接口,转化为Map,Map的Key为collection当参数类型为List接口时,除了collection的值外,list作为key如果参数为数组,也会转化为Map,Map的key为array如果参数为数组,也会转化为Map,Map的key为list(正确答案)31. 在MyBatis中,以下哪项不属于MyBatis的API SqlSessionFactoryBuilderSqlSessionFactoryExecutor(正确答案)SqlSession32. 在使用MyBatis的select标签查询客户(customer)的电话信息时,如果客户实体中电话的属性名为mobile,而客户表所对应的字段名为phone,则正确的写法是()select phone from customerselect mobile from customerselect mobile as phone from customerselect phone as mobile from customer(正确答案)33. 在MyBatis中,<collection>标签支持的属性值以及属性的作用和<association>标签完全相同,分别有哪些()【选两项】resultTypecolumnPrefix(正确答案)property(正确答案)parameterType34. 在MyBatis中,子标签<association>配置已经有的结果集时使用哪个属性()propertyjavaTyperesultType(正确答案)columnPrefix35. 在MyBatis中,以下不属于<association>标签嵌套查询常用属性的是()show(正确答案)selectcolumnfetchType36. 在Mybatis中使用collection标签来解决一对多关联,哪项不属于其属性properties(正确答案)ofTypecolumnselect37. 在 MyBatis 中,配置结果映射时,使用()标签实现1对多的关联many-oneone-manyassociationcollection(正确答案)38. 在 MyBatis 中,配置结果映射时,使用()标签实现多对1的关联many-oneone-manyassociation(正确答案)collection39. 在MyBatis中,.映射一对一使用的标签是many-oneone-manyassociation(正确答案)collection40. 在mybatis中,映射一对多时使用的常用属性是实体对象ConnectionResultSetList(正确答案)41. 在Mybatis中,Mapper.xml中用于设置返回值类型和结果字段映射关系的是accociationselectresultMap(正确答案)constructor42. 在MyBatis中,mybatis指定配置文件的根元素使用的是什么<sqlMapConfig><configration>(正确答案)<setting><environments>43. 在MyBatis中,<foreach>标签可以实现对象遍历的用法,适用对象不包括下列哪一个()数组MapListMath(正确答案)44. 在MyBatis中,以下属于choose标签内部标签的是【选两项】when(正确答案)selectotherwise(正确答案)if45. 在MyBatis中,以下不属于Mybatis动态sql标签的是?trimforeachsetthan(正确答案)46. 在Myabtis的XML映射文件中,除了常见的增删改查标签之外,还有哪些标签【选两项】codeparametersinclude(正确答案)selectKey(正确答案)47. 在MyBatis中,以下哪个属性作用为:当trim元素包含内容时,会把内容中匹配的前缀字符串去掉prefixprefixOverrides(正确答案)suffixsuffixOverrides48. 在MyBatis中,以下哪项不属于Mybatis动态sql标签ifchoosewhenget(正确答案)49. 在MyBatis中,实现对象遍历标签是foreach(正确答案)ifchoosetrim50. 在MyBatis中,以下不属于MyBatis动态标签的是【选两项】forwhen(正确答案)set(正确答案)while51. 在 MyBatis 动态 SQL 中,没有使用下列()标签for(正确答案)ifchoosewhere52. 下列关于Mybatis的描述错误的是()mybatis可以实现全自动的数据库操作,大大简化了开发工作量(正确答案) mybatis虽然实现了ORM,但是需要自己编写SQL语句mybatis内部其实是封装了jdbc进行数据库操作mybatis不仅支持sql,还能支持存储过程53. 在MyBatis中,<foreach>标签不包含以下哪些属性()【选两项】indexofitem(正确答案)index(正确答案)trim54. 在Mybatis中的foreach使用时,用于对应循环数据的别名属性是()closeitem(正确答案)collectionend55. 在MyBatis中,主要用于更新时的mybatis动态sql标签是Choose(when/otherwise)Set(正确答案)WhereForeach56. 在Mybatis中,想实现批量删除的动态sql的标记可选择choose(when/otherwise)setwhereforeach(正确答案)57. 在MyBatis中,动态SQL标签<choose>标签中最少可以有几个<when>标签()1(正确答案)23以上都不对58. 在MyBatis中,动态SQL标签<choose>标签中关于<otherwise>标签描述正确的是()<otherwise>标签可以有0个(正确答案)<otherwise>标签只能有1个<otherwise>标签可以有2个以上都不对59. 在MyBatis中,以下不属于Mybatis的动态标签的是()<if><while>(正确答案)<choose><where>60. 在MyBatis中,动态SQL标签<if>判断String类型的字段是否为空字符串的正确用法是()<if test="userName != null and userName != '' "></if>(正确答案)<if test="userName != null userName != '' "></if><if test="userName != null or userName != '' "></if><if test="userName != null || userName != '' "></if>61. 在MyBatis中,为实现批量输入和动态更新可以使用以下哪个动态SQL标签()<foreach>(正确答案)<if><choose><set>62. 在Mybatis中,当接口功能方法有多个参数时,可使用如下哪个注解为参数进行指定名称@set@Map@Param(正确答案)@value63. 在MyBatis中,二级缓存的默认效果有哪些()【选两项】二级缓存默认是关闭的(正确答案)映射语句文件中所有的insert语句、update语句和delete语句会刷新缓存(正确答案)缓存永远不会被回收如果没有设置刷新时间间隔,缓存会随时刷新64. 在以下场景中,不推荐使用二级缓存的是()以更新数据为主的应用中,查询业务较少(正确答案)以查询为主的应用中,尽可能少的更新操作查询业务绝大多数都是对单表进行操作的应用可以按业务划分对表进行分组时,关联表非常少65. 在MyBatis中,关于mybatis缓存的描述错误的是()一般提到Mybatis缓存的时候,都是指二级缓存一级缓存默认会启用一级缓存不能控制二级缓存不能控制(正确答案)66. 在MyBatis中,一般提到Mybatis缓存的时候指的是()二级缓存(正确答案)一级缓存本地缓存三级缓存67. 在MyBatis中,配置Mybatis Generator时,要求不会生成Examp相关的方法,需要设置targetRuntime为什么()Mybatis3Simple(正确答案)Mybatis3Mybatis3x以上都不对68. 在MyBatis中,使用MyBatis Generator自动工具生成的文件不包含()Entity(正确答案)DAO类SqlMap.xmlMapper XML69. 在MyBatis中,配置Mybatis Generator时,<table>标签可以配置几个()0个1个或多个(正确答案)仅能设置1个必须设置多个70. 在MyBatis中,MyBatis注解中怎么给参数一个名字()@Param("C11")(正确答案)@SelectOptions@Results71. 在MyBatis中,配置Mybatis Generator时,要生成数据库内所有表<table>标签中的tableName应该设置成什么()!#%(正确答案)$72. 在MyBatis中,以下Mybatis核心接口中用于设置入参设置是哪一个()ParameterHandler(正确答案)ResultSetHandlerExecutorStatementHandler73. 在MyBatis中,创建日志插件时应该通过拦截哪一个接口来完成ParameterHandlerResultSetHandlerStatementHandlerExecutor(正确答案)74. 在MyBatis中,Mybatis允许使用插件来拦截的核心接口有哪些()【选三项】Executor(正确答案)ParameterHandler(正确答案)ResultSetHandler(正确答案)ResultSet75. 在MyBatis中,以下哪项是可能造成JavaBean中字段与数据库列无法映射的原因【选两项】字段与数据库列名不一致(正确答案)没有对应的getter/setter方法(正确答案)未导入jar包项目搭建出错76. 下列关于Mybatis说法正确的是()【选两项】mybatis不能处理多表关联查询mybatis可以实现批量数据操作(正确答案)mybatis的一级缓存默认开启的(正确答案)mybatis不能针对视图进行操作77. 在MyBatis中,SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder ().build(resourceAsStream);这行代码代码主要做了哪些事呢,以下说法错误的是主要就涉及到了三个类SqlSessionFactoryBuilder、XMLConfigBuilder、XPathParser Build方法首先都是用XML配置文件构建一个XMLConfigBuilder类,XMLConfigBuilder通过parse方法返回一个Configuration配置类Configuration设置到SqlSessionFactory默认实现DefaultSqlSessionFactory的configuration属性并返回创建SqlSessionFactory对象是通过SqlSessionFactoryBuilder的build方法,他会返回它的默认实现类SqlSessionFactory(正确答案)78. 在MyBatis中,使用select映射查询含有部门详细信息的员工信息,下列关于返回类型的说法,正确的是()只能是resultType只能是resultMap(正确答案)可以是resultType或resultMap以上说法都不正确79. 在MyBatis中,以下不属于Mybatis优秀特性的是()支持自定义SQL查询支持存储过程支持高级映射支持XML注解(正确答案)80. 在MyBatis中,JDBC编程有哪些不足之处,Mybatis是如何解决这些问题的,描述正确的是()【选两项】mybatis替代了jdbc实现数据库操作将SQL语句配置在mapper.xml文件中与java代码分离(正确答案)mybatis避免了和数据库的直接连接Mbatis自动将SQL执行结果映射到java对象(正确答案)81. 在数据库操作中,事务的特性不包括下列原子性一致性高效性(正确答案)持久性82. 在MyBatis中,以下双方属于多对多关系的是权限-角色(正确答案)用户-银行卡用户-手机号学生-语文成绩83. 在MyBatis中,在使用MyBatis的时候,除了可以使用@Param注解来实现多参数不同类型入参,还可以用()传递多个参数值用Map对象可以实现传递多参数值(正确答案)用List对象可以实现传递多参数值用数组的方式传递用Set集合的方式传递84. 在MyBatis中,不属于MyBatis二级缓存默认效果有哪些映射语句文件中的所有select语句会被缓存映射语句文件中的所有insert、update、delete语句会刷新缓存缓存会使用LRU算法收回未设置缓存时间间隔,缓存会以任意时间顺序刷新(正确答案)85. 在MyBatis中,关于MyBatis映射器,说法错误的是()映射器定义了数据访问接口映射器是接口映射器中的方法是抽象方法,需要实现(正确答案)映射器类似于DAO接口,但仅需声明其中的方法,编程人员无须编码实现86. 在MyBatis中,以下哪项不属于MyBatis框架的优点易于上手和掌握解除sql与程序代码的耦合不支持级联更新(正确答案)提供xml标签,支持编写动态sql87. 在MyBatis中,以下属于MyBatis缓存级别的是【选两项】一级缓存(正确答案)二级缓存(正确答案)三级缓存无缓存88. 在MyBatis中,Mybatis的表关联的映射描述错误的是()一对多时可以使用collection标签进行关联映射多对一时可以使用association标签进行关联映射一对一时可以使用association标签进行关联映射mybatis不能处理多对多关联(正确答案)89. 在MyBatis中,mapper.xml的SQL语句中的占位符${}和#{}描述错误的是()一般会采用#{},#{}在mybatis中,最后会被解析为?,其实就是Jdbc的PreparedStatement中的?占位符,它有预编译的过程,可以防止SQL注入#{}中的变量名可以任意,如果入参类型是pojo,比如是Student类那么#{name}表示取入参对象Student中的name属性${}取对象的属性使用的是OGNL(Object Graph Navigation Language)表达式${}不会做类型解析,但不存在SQL注入的风险(正确答案)90. 在MyBatis中,MyBatis是那一层的框架业务逻辑层表示层持久层(正确答案)数据库层91. 在MyBatis中,关于MyBatis中传递多参数的情况,如果参数封装成Java Bean,应该怎么获取属性值通过#{参数名.属性名}通过#{arg0}来获得通过#{arg1}来获得通过#{成员属性}来获得(正确答案)92. 在MyBatis中,关于MyBatis中传递多参数的情况,如果参数封装成了Student 类,那么在Mapper.xml中获取数据,应该怎么操作条件获取数据可以通过#{属性名}来获得(正确答案)条件获取数据可以通过#{arg0}来获得条件获取数据可以通过#{arg1}来获得条件获取数据可以通过#{属性名}或者#{arg0}来获得93. 在MyBatis中,以下对MyBatis主配置文件描述错误的是()它主要提供数据库连接信息引用sql映射文件在其中定义具体的sql映射信息(正确答案)在其中定义了影响MyBatis行为的设置及其相关的属性信息94. 在MyBatis中,什么是DAO模式数据库访问对象(正确答案)关系对象对象持久化业务逻辑处理95. 在MyBatis中,持久层设计要考虑的范畴有哪些【选两项】数据存储逻辑分离(正确答案)数据访问底层实现的分离(正确答案)界面操作的易用性UI设计和数据库搭配96. 在MyBatis中,MyBatis如何执行批处理使用BatchExecutor完成批处理(正确答案)使用SimpleExecutor完成批处理任一executor均可实现无法进行批处理97. 在MyBatis中,不同的XML映射文件,id是否可以重复任何情况都不能重复不管陪不配置namespace,id均不可以重复如果配置namespace,id可以重复(正确答案)以上均不对98. 在MyBatis 中,映射器是中最重要、最复杂的组件,它由一个接口和对应的XML 文件(或注解)组成。
Mybatis面试题(含答案)

1.#{}和${}的区别是什么?#{}是预编译处理,${}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set 方法来赋值;Mybatis在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。
2.通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace 的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。
Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id=findStudentById的MappedStatement。
在Mybatis中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象。
Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。
Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao 接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。
3.Mybatis是如何进行分页的?分页插件的原理是什么?Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
mybatis面试题目及答案

mybatis面试题目及答案1. 介绍一下MyBatis的概念和作用。
MyBatis是一个基于Java的持久层框架,它通过使用简化的编程接口,将数据库操作与应用程序进行解耦。
MyBatis提供了许多强大的特性,如动态SQL、缓存、延迟加载等,可以帮助开发者更轻松地编写高效和可维护的数据库访问代码。
2. MyBatis的核心组件有哪些?MyBatis的核心组件包括:- SqlSessionFactory:用于创建SqlSession对象的工厂。
- SqlSession:表示和数据库之间的一次会话,可以用它来执行SQL语句、管理事务等。
- Mapper接口和Mapper映射文件:用于定义数据库操作的接口和具体的SQL语句。
3. 什么是Mapper接口?Mapper接口是一种用于定义数据库操作的Java接口。
在MyBatis 中,我们可以通过编写Mapper接口来定义各种SQL语句的执行方式。
接口的方法名和参数与SQL语句的名称和参数对应,MyBatis会根据方法的调用来执行相应的SQL语句。
4. MyBatis的动态SQL是什么?动态SQL是指在执行SQL语句时,根据不同的条件生成不同的SQL语句。
MyBatis提供了一些动态SQL的标签,如if、choose、when、otherwise等,可以用于灵活地拼装SQL语句。
5. MyBatis的一级缓存和二级缓存有什么区别?一级缓存是指在同一个SqlSession中,多次执行相同的SQL语句时,如果查询的数据没有发生变化,MyBatis会将结果缓存起来,下次查询时直接从缓存中获取,减少对数据库的访问。
二级缓存是指在多个SqlSession中,如果执行相同的SQL语句,MyBatis也会将结果缓存起来,但是缓存的范围不限于同一个SqlSession,而是在整个应用中共享。
6. MyBatis如何处理延迟加载?延迟加载是指在查询关联表数据时,只有在需要使用到关联数据时才进行加载,而不是在查询主表数据时一并加载关联数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、Mybatis基础: #{...} 和${...} 的区别
MyBatis将#{…} 解释为JDBC prepared statement 的一个参数标记。
而将${…} 解释为字符串替换。
理解这两者的区别是很有用的, 因为在某些SQL语句中并不能使用参数标记(parameter markers)。
比如,我们不能在表名(table name)的位置使用参数标记。
假设有下面的代码:
01.Map<String, Object>parms = new HashMap<String, Object>();
02.parms.put("table", "foo"); // 表名
03.parms.put("criteria", 37); // 查询过滤条件
04.List<Object> rows = mapper.generalSelect(parms);
01.<select id="generalSelect" parameterType="map">
02. select * from ${table} where col1 = #{criteria}
03.</select>
MyBatis生成的SQL语句(prepared statement)如下所示:
01.select * from foo where col1 = ?
重要提示: 请注意,使用$ {…} (字符串替换)时可能会有SQL注入攻击的风险。
另外,字符串替换在处理复杂类型也可能常常发生问题,如日期类型。
由于这些因素,我们建议您尽可能地使用#{…} 这种方式。
要使用LIKE语句该怎么写?
2、有两种使用LIKE的方法。
(推荐使用)第一种方法是,在Java代码中添加SQL通配符。
示例一:
01.StringwildcardName = "%Smi%";
02.List<Name> names = mapper.selectLike(wildcardName);
01.<select id="selectLike">
02. select * from foo where bar like #{value}
03.</select>
第二种方式是在SQL语句中拼接通配符。
这种方法相对来说安全性要低一些,因为可能会被SQL注入攻击。
示例二:
01.StringwildcardName = "Smi";
02.List<Name> names = mapper.selectLike(wildcardName);
01.<select id="selectLike">
02. select * from foo where bar like '%' || '${value}' || '%'
03.</select>
重要提示: 请注意两种方式中$ 和# 的使用!
3、如何执行批量插入?
首先,创建一个简单的insert语句:
01.<insert id="insertName">
02. insert into names (name) values (#{value})
03.</insert>
然后在Java代码中像下面这样执行批处理插入:
01.List<String> names = new ArrayList<String>();
s.add("Fred");
s.add("Barney");
s.add("Betty");
s.add("Wilma");
06.
07.// 注意这里ExecutorType.BATCH
08.SqlSessionsqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
09.try {
10. NameMapper mapper = sqlSession.getMapper(NameMapper.class);
11. for (String name : names) {
12. mapper.insertName(name);
13. }
14. mit();
15.} finally {
16. sqlSession.close();
17.}
4、如何获取自动生成的(主)键值?
insert 方法总是返回一个int值- 这个值代表的是插入的行数。
而自动生成的键值在insert
方法执行完后可以被设置到传入的参数对象中。
示例:
01.<insert id="insertName" useGeneratedKeys="true" keyProperty="id">
02. insert into names (name) values (#{name})
03.</insert>
name = new Name();
.setName("Fred");
03.
04.int rows = mapper.insertName(name);
05.// 完成后,id已经被设置到对象中
06.System.out.println("rows inserted = " + rows);
07.System.out.println("generated key value = " + name.getId());
5、在mapper中如何传递多个参数?
Java的反射机制并不能让框架获取到参数的名字(方法签名中只有参数类型,可以说是为了优化,也可以说设计就是如此,总之名字无意义), 所以MyBatis默认的命名为: param1,param2……
如果想给他们指定名称,可以使用@param注解:
01.importorg.apache.ibatis.annotations.Param;
02.public interface UserMapper {
03. User selectUser(@Param("username") String username,
04. @Param("hashedPassword") String hashedPassword);
05.}
然后,就可以在xml像下面这样使用(推荐封装为一个Map,作为单个参数传递给Mapper):
01.<select id=”selectUser” resultType=”User”>
02. select id, username, hashedPassword
03. from some_table
04. where username = #{username}
05. andhashedPassword = #{hashedPassword}
06.</select>。