Mybatis面试题

2、什么是Mybatis的接口绑定,有什么好处?

Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

3、什么情况用注解,什么情况用xml绑定?

注解使用情况:Sql语句简单时
xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件)

4、Mybatis在核心处理类叫什么?

SqlSession

5、查询表名和返回实体Bean对象不一致,如何处理?

映射键值对即可

<result column="title" property="title" javaType="java.lang.String"/>

column:数据库中表的列名
property:实体Bean中的属性名

6、Mybatis的好处?

  • 把Sql语句从Java中独立出来。
  • 封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。
  • 自己编写Sql语句,更加的灵活。
  • 入参无需用对象封装(或者map封装),使用@Param注解

7、Mybatis配置一对多?

<collection property="topicComment" column="id" ofType="com.tmf.bbs.pojo.Comment" select="selectComment" />
  • property:属性名
  • column:共同列
  • ofType:集合中元素的类型
  • select:要连接的查询

8、Mybatis配置一对一?

<association property="topicType" select="selectType" column="topics_type_id" javaType="com.tmf.bbs.pojo.Type"/>
  • property:属性名
  • select:要连接的查询
  • column:共同列
  • javaType:集合中元素的类型

9 、${} 和 #{}的区别?

  • :简单字符串替换,把{}:简单字符串替换,把:简单字符串替换,把{}直接替换成变量的值,不做任何转换,这种是取值以后再去编译SQL语句。
  • #{}:预编译处理,sql中的#{}替换成?,补全预编译语句,有效的防止Sql语句注入,这种取值是编译好SQL语句再取值。
总结:一般用#{}来进行列的代替

10、获取上一次自动生成的主键值?

select last _insert_id()

11、Mybatis如何分页,分页原理?

RowBounds对象分页
在Sql内直接书写,带有物理分页

12、Mybatis工作原理?

原理:
  • 通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。
  • SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。
  • 完成数据库的CRUD操作和事务提交,关闭SqlSession。

MyBatis面试题

1 ### JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决: Mybatis自动将java对象映射至sql语句。

④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象。

MyBatis编程步骤是什么样的?

① 创建SqlSessionFactory
② 通过SqlSessionFactory创建SqlSession
③ 通过sqlsession执行数据库操作
④ 调用session.commit()提交事务
⑤ 调用session.close()关闭会话

2 ### MyBatis与Hibernate有哪些不同?
Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

3 ### 使用MyBatis的mapper接口调用时有哪些要求?
① Mapper接口方法名和mapper.xml中定义的每个sql的id相同
② Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
③ Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
④ Mapper.xml文件中的namespace即是mapper接口的类路径。
5.SqlMapConfig.xml中配置有哪些内容?
SqlMapConfig.xml中配置的内容和顺序如下:
properties(属性)
settings(配置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)

4 ### 简单的说一下MyBatis的一级缓存和二级缓存?
Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象

Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。

Mapper编写有哪几种方式?

①接口实现类继承SqlSessionDaoSupport
使用此种方法需要编写mapper接口,mapper接口实现类、mapper.xml文件

1、在sqlMapConfig.xml中配置mapper.xml的位置

<mappers><mapper resource="mapper.xml文件的地址" /><mapper resource="mapper.xml文件的地址" />
</mappers>

2、定义mapper接口

3、实现类集成SqlSessionDaoSupport

mapper方法中可以this.getSqlSession()进行数据增删改查。

4、spring 配置

<bean id=" " class="mapper接口的实现"><property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>

②使用org.mybatis.spring.mapper.MapperFactoryBean

1、在sqlMapConfig.xml中配置mapper.xml的位置

如果mapper.xml和mappre接口的名称相同且在同一个目录,这里可以不用配置

<mappers><mapper resource="mapper.xml文件的地址" /><mapper resource="mapper.xml文件的地址" />
</mappers>

2、定义mapper接口

注意

1、mapper.xml中的namespace为mapper接口的地址

2、mapper接口中的方法名和mapper.xml中的定义的statement的id保持一致

3、 Spring中定义

<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface"   value="mapper接口地址" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

③使用mapper扫描器

1、mapper.xml文件编写

注意:
mapper.xml中的namespace为mapper接口的地址
mapper接口中的方法名和mapper.xml中的定义的statement的id保持一致
如果将mapper.xml和mapper接口的名称保持一致则不用在sqlMapConfig.xml中进行配置

2、定义mapper接口

注意mapper.xml的文件名和mapper的接口名称保持一致,且放在同一个目录

3、配置mapper扫描器

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="mapper接口包地址"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

4、使用扫描器后从spring容器中获取mapper的实现对象扫描器将接口通过代理方法生成实现对象,要spring容器中自动注册,名称为mapper 接口的名称。

结束

2019-mybatis面试题相关推荐

  1. mysql和mybatis面试题_2020年,MyBatis常见面试题总结

    Mybatis 技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用 Mybatis 的文章,所以,一些参数使用细节略掉了,我们的目标 ...

  2. 面试官都会问的Mybatis面试题,你会这样回答吗?

    一.概述 面试,难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:"面试 ...

  3. 数据结构:下列选项中,不可能是快速排序第2趟排序结果的是(2019年全国试题10)

    题目 排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一"趟".下列排序中,不可能是快速排序第二趟结果的是()[2019年全国试题10(2分)] A. 5, 2, 16, ...

  4. MyBatis面试题库

    这里写目录标题 Mybatis面试题库 1.Mybatis是什么? 2.Mybaits的优点: 3.Mybatis框架的缺点 4.MyBatis框架的适用场合 5.当实体类中的属性名和表中的字段名不一 ...

  5. MyBatis面试题1

    MyBatis面试题(1) 众所周知,MyBatis是ssm三大框架之一,也是在以后的开发过程中的一个重要的框架,相对其他的两个框架而言,MyBatis框架更容易理解一些:在开发工程师的面试中,面试官 ...

  6. 5.MyBatis源码解析-MyBatis面试题--阿呆中二

    MyBatis面试题 MyBatis MyBatis面试题 MyBatis一级缓存和二级缓存? MyBatis 有几种执行器和区别? Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能 ...

  7. 2021年MyBatis面试题30道

    文章目录 前言 面试题系列文章传送门 MyBatis面试题内容 1. 模糊查询like语句该怎么写? 2. MyBatis 框架适用场合? 3. MyBatis是如何进行分页的?分页插件的原理是什么? ...

  8. 【2021最新版】MyBatis面试题总结(38道题含答案解析)

    文章目录 1.什么是Mybatis? 2.Mybaits的优点? 3.MyBatis框架的缺点? 4.MyBatis框架适用场合 5.MyBatis与Hibernate有哪些不同? 6.#{} 和${ ...

  9. Mybatis面试题整理

    文章目录 Mybatis面试题 1. 谈谈 MyBatis 2. Mybatis 的优点 3. Mybatis 的缺点 4. 什么是 ORM 5. 为什么说 Mybatis 是半自动 ORM 映射工具 ...

  10. 山东大学2019年操作系统试题(回忆)

    山东大学2019年操作系统试题(回忆) 注:软件学院 一. 概念解释:(共20') 1. Multiprogramming 2. Race condition 3. User mode/kernel ...

最新文章

  1. DOS命令行操作MySQL常用命令
  2. MyBatis实现与插件开发
  3. 【Paper】2012_Distributed Average Tracking of Multiple Time-Varying Reference Signals With Bounded
  4. 从求生存到修体系,我在阿里找到了技术人的成长模式
  5. ITK:计算曲率各向异性扩散
  6. 细节取胜的javadoc
  7. linux 监听数据包,linux下网络监听与发送数据包的方法(即libpcap、libnet两种类库的使用方法)...
  8. CMake使用介绍(1)
  9. chrono0.10插件离线版_梁宝川:这11条anki插件的使用常识分享给你
  10. 二、文章发布页制作及后台实现《iVX低代码/无代码个人博客制作》
  11. java 输入输出流
  12. Mac 系统SourceTree 配置VSCode代码对比工具
  13. 天翼云联手平凯星辰共建开源分布式数据库实验室
  14. 科来过滤jd提示语法解析器错误的解决问题方法
  15. 51计数器(理论+实践【代码】)
  16. 海康威视复赛题 --- 算法说明书
  17. KGB知识图谱开拓行业应用新展图
  18. STM32单片机学习笔记(七)-RCC时钟控制:简单了解时钟树(一)
  19. JavaScript “佛祖保佑 永无bug”
  20. 管理员不让我使用计算机管理,用u盘禁用软件教你实现电脑禁止使用u盘、管理员禁止使用u盘...

热门文章

  1. C++如何高效地判断一个字符串是数值?
  2. 英伟达4070Ti 6499元起/ 微软要推出ChatGPT版Bing/ 苹果头显被曝售价3000美元... 今日更多新鲜事在此...
  3. 为什么说 WebAssembly 属于浏览器之外? Why WebAssembly Belongs Outside the Browser
  4. ChatGPT中文电脑端软件
  5. h5页面手机端适配头
  6. c语言rand函数时间种子,C语言中以时间为种子,产生随机数的函数
  7. 8-1不安全的文件下载原理和案例演示
  8. nodecu8266 lua应用(三)----模块基础
  9. Python 实现VRay Bitmap的旋转和重复偏移
  10. Weblogic 常见漏洞汇总