mybatis的基本工作流程

1.读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。

2.有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡

3.SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,一个方法中建立,方法结束应该关闭

4.当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果。

5.将返回的结果通过映射,包装成java对象。

什么是MyBatis的接口绑定,有什么好处

接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们通过直接调用接口方法 例如:

UserMapper  userMapper=sqlSession.getMapper  (UserMapper.class) 就可以,这样比起原来了SqlSession提供的方法,例如List<Country> countryList = sqlSession.selectList("selectAll");我们可以有更加灵活的选择和设置.。

注意:(1)Mapper .xml文件的namespace属性必须配置为接口的全限定名称,接口方法名与Mapper.xml中的<select><insert>id值必须相同,且接口方法的返回值类型必须与Mapper.xml配置的resultType一致,这里后者起到决定作用。

(2)select查询通过在Mapper.xml中配置ResultMap标签,将查询结果的列名与字段名对应。

insert语句通过#{属性名}从接口参数获取值放到sql语句中。

(3)Mapper.xml接口绑定本质是动态代理。

接口绑定有几种实现方式,分别是怎么实现的?

接口绑定有两种实现方式,

(1)注解绑定:就是在接口的方法上面@Select@Update等注解里面包含Sql语句来绑定

(2)另外一种就是通过xml里面写SQL来绑定,在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名.

什么情况下用注解绑定,什么情况下用xml绑定

当Sql语句比较简单时候,用注解绑定,
当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多

MyBatis实现一对一有几种方式?具体怎么操作的

有联合查询和嵌套查询

(1)联合查询是几个表联合查询,只查询一次,

查询结果有三种处理方式:第一种自动映射返回结果为resultType、

第二种配置resultMap,返回结果配置为存在的resultMap,这个resultMap中的Property都要加一个role.Property,表示用户对象中的role对象的property,每一个属性都要加role.很繁琐,association标签就是解决这个问题的。

第三种通过在resultMap里面配置association节点配置一对一的类就可以完成;

注意:mybaits支持resultMap映射继承。<ResultMap id="userRoleMap" extends="userMap">
(2)嵌套查询是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置

MyBatis实现一对多有几种方式,怎么操作的

有联合查询和嵌套查询

(1)联合查询是几个表联合查询,只查询一次,通过在resultMap里面配置collection标签配置一对多的类就可以完成;
(2)嵌套查询是先查一个表,根据这个表里面结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表查询通过select节点配置

MyBatis里面的动态Sql是怎么设定的?用什么语法?

MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来判断,但是如果要写的完整,必须配合where,trim节点,

choose标签 choose when otherwise标签,一个choose中至少有一个when,0或1个otherwise,如果when满足就执行,全不满足就执行otherwise。

注意where1=1必须添加,防止where关键字后面没有语句.

where标签是判断包含节点有内容就插入where,如果where后面的字符串是以AND和OR开头的,就将AND和OR提出

当if条件都不满足,where元素中没有内容,也就不会出现choose标签那种错误。

set标签更新的时候用:如果该标签包含的元素中有返回值,就插入一个set;如果set后面的字符串是以逗号结尾的,就将这个逗号剔除。

注意set标签用法中,SQL后面的逗号没有问题了,但是如果set元素中没有内容,照样会出现SQL错误,所以为了避免错误产生,类似id=#{id}这样必然存在的赋值仍然有保留的必要。

讲下MyBatis的缓存

MyBatis的缓存分为一级缓存和二级缓存,
一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是打开的,
使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>

【mybatis】mybatis面试题相关推荐

  1. Mybatis常见面试题总结(详细)

    Mybatis常见面试题总结 SpringMVC常见面试题总结(超详细回答) 2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总 Spring常见面试题总结(超 ...

  2. Mybatis常见面试题(10个必备面试题)

    目录 面试题一:什么是Mybatis? 面试题二:Mybaits的优缺点? 面试题三:#{}和${}的区别是什么? 面试题四:Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复? ...

  3. [F2F] MyBatis相关面试题

    关于Mybatis的面试题 题目详情 MyBatis 的执行原理是什么? 在 MyBatis 的初始化过程中,会生成一个 Configuration 全局配置对象,里面包含了所有初始化过程中生成对象 ...

  4. MyBatis 常见面试题有哪些?

    Mybatis 一连串提问,被面试官吊打了?看这篇经典面试问题和MyBatis+MyBatis plus学习教程附后~ 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持自定义 ...

  5. MyBatis—MyBatis概述

    文章目录 什么是mybatis MyBatis的生命周期? Dao接口的工作原理是什么? Dao 接口里的方法参数不同时能重载吗? mybatis分页方式 Mybatis 是否支持延迟加载?如果支持, ...

  6. SpringBoot整合mybatis+mybatis分页插件

    第一步:相关依赖 <!--web,servlet引入--> <dependency><groupId>org.springframework.boot</gr ...

  7. Mybatis常见面试题(转)

    原文链接:https://www.cnblogs.com/huajiezh/p/6415388.html 1.#{}和${}的区别是什么? 注:这道题是面试官面试我同事的. 答:${}是Propert ...

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

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

  9. Mybatisの常见面试题

    Mybatis -面试问题 最近准备系统的学一下Mybatis,之前只有粗略的看了下,选了十个常见的面试题 1. #{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换. Mybatis ...

  10. Mybatis常见面试题(三)

    Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问, B 标签能 否定义在 A 标签的后面,还是说必须定义在 A 标签的前面? :虽然 Mybatis 解析 ...

最新文章

  1. 打印http地址打印双斜杠
  2. android r类 作用,Android 主项目和 Module 中 R 类的区别
  3. 软设考试笔记--UML建模
  4. spring boot多环境配置
  5. SAP Spartacus应用启用时导入的一些模块
  6. Js slice()方法和splice()方法
  7. 日均互动50万次 微信的营销的成功之道
  8. 可伸缩架构-面向增长应用的高可用
  9. 实现多线程爬取数据并保存到mongodb
  10. abaqus利用python实现部件合并_python脚本实现abaqus前处理2D多晶粒建模(附完整源码)-Voronoi多边形的生成...
  11. 凸优化第七章统计估计 7.1参数分布估计
  12. Spring、SpringMVC、SpringBoot、SpringCloud的联系与区别(看了多篇后的自我总结)
  13. AD09,如何设置按住鼠标轮放大缩小
  14. 力扣36.有效的数独
  15. skyline 查询 和 验证索引数据结构MR-tree的构建
  16. 如何完整地对一个小游戏进行功能测试
  17. kubelet cgroup driver与docker cgroup drive不一致解决方案
  18. JAVA大数据的第五十九天——The authenticity of host ‘gree129 (192.168.**.129)‘ can‘t be established.
  19. MATLAB图像处理(直方图)
  20. Line-based Automatic Extrinsic Calibration of LiDAR and Camera论文阅读

热门文章

  1. 工具推荐丨最适合程序员的六款好用 IDE 工具,赶紧收藏吧!
  2. 如何在网上获取全国计算机等级考试证书电子版
  3. Centos7安装ftp服务
  4. 中文新闻分类 数据集_最新开源LiDAR数据集LSOOD:四种常见的室外物体分类
  5. 包裹黑色像素点的最小矩形_融合设计:为什么所有电话都是黑色矩形
  6. 网站屏蔽360或者google chrome浏览器
  7. 【阿冈感动】月最圆时写给乔月光的歌《爱是温暖的月光》
  8. ubuntu18.04组软RAID1和10及修复
  9. 保育师经验总结武汉亲子周边游快乐三部曲听清楚喽
  10. Fastjson 1.2.68 bypass autotype