什么是MyBatis的接口绑定?有哪些实现方式?

接口绑定,就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置。

接口绑定有两种实现方式

通过注解绑定,就是在接口的方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定;

通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名。当Sql语句比较简单时候,用注解绑定, 当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多。

通常一个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执行结果返回。

缓存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。

Mybatis是如何进行分页的?分页插件的原理是什么?

Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

举例:select * from student,拦截sql后重写为:select t.* from (select * from student) t limit 0, 10

传统JDBC开发存在的问题

频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。可以使用连接池解决这个问题。但是使用jdbc需要自己实现连接池。

sql语句定义、参数设置、结果集处理存在硬编码。实际项目中sql语句变化的可能性较大,一旦发生变化,需要修改java代码,系统需要重新编译,重新发布。不好维护。

使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

结果集处理存在重复代码,处理麻烦。如果可以映射成Java对象会比较方便。

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

1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

解决:在mybatis-config.xml中配置数据链接池,使用连接池管理数据库连接。

2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句。

4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象。

Mybatis面试题-日更相关推荐

  1. 为进阿里刷面试题-日更

    为进阿里刷面试题-日更(加油打工人) 下面的题目都是自己理解的,如有漏,或者写错的,请指出来!加油! JAVA基础 1.JVM内存分配原理,垃圾回收原理 2.ConcurrentHashMap 和 h ...

  2. 渗透测试面试题--日更(1-9day)

    day-one 1.拿到一个待检测的web站,渗透测试思路? 答: (1)信息收集 获取域名的whois信息,获取注册者的邮箱姓名电话等 查服务器的旁站以及子域名站点,因为主站一般比较难,所以可以先看 ...

  3. MyBatis面试题库

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

  4. MyBatis面试题1

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

  5. 日更一文,今天来点干货!

    今天给大家介绍一个前端公众号:前端充电宝,干货很多,值得关注!公众号只分享原创文章,基本日更一文(周末.节假日休息),被小伙伴戏称高产似那啥~ 关于作者 作者 CUGGZ,掘金LV6,2021年度人气 ...

  6. 算法唯手熟尔(PAT剩余清单 or leetcode)---希望可以日更

    文章目录 2020/3/5 PAT A1119_C 2020/3/6 PAT A1123_C PAT A1115_C PAT A1114_C leetcode 206. 反转链表_C leetcode ...

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

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

  8. 省选前的计划(日更,然而你们天天吊打我)

    还有17天就省选了,不能再颓废了! 总结篇(不定期更新) 网络流基本 计算几何基本 字符串入门+基础 斜率优化dp 日记篇(日更) 3.18 今天做了一些题目吧. 考试的题目也做了一道题目. 方格取数 ...

  9. [日更-2019.5.2、3、4] 关于JVM的概略分析

    2019独角兽企业重金招聘Python工程师标准>>> 声明 上一篇写了[日更-2019.4.29.30] 关于JVM.Dalvik.ART的基础分析 ,本篇就单独对JVM进行一下分 ...

最新文章

  1. boost::geometry模块使用变换自定义坐标系示例
  2. ios url缓存策略——NSURLCache、 NSURLRequest
  3. HTML作业-花店网页商城
  4. MySQL学习笔记_5_SQL语言的设计与编写(上)
  5. 星辰小组——第一阶段评分+各小组的意见反馈
  6. 计算机绘图课程选用课本,机械制图与计算机绘图 机械制图与计算机绘图 机械制图与计算机绘图课程标准.doc...
  7. quanTIseq:肿瘤浸润免疫细胞定量分析
  8. matplotlib 不显示图像或者图像只能在弹出层显示
  9. python第一个程序:计算体脂率
  10. win10通过网线连接树莓派
  11. MySQL错误:Column ‘pno‘ in field list is ambiguous是什么问题呢?
  12. 惠普打印机介质不匹配_打印机提示纸张不匹配该怎么解决?
  13. 超级牛逼的立体画,太厉害了!
  14. Dojo mobile TweetView 系列教程之三——Tweets和Mentions视图
  15. 基于CentOS7.2的服务器搭建教程《一》
  16. am335x_gpio
  17. 幻灯片插件-jquery.sliderPro.min.js
  18. 商务统计学基础:从不确定性到人工智能
  19. 关于Word无法启动转换器mswrd632.wpc错误的解决方法
  20. 康泰克音源采样器-Native Instruments Kontakt 6 v6.5.2 MacOSX

热门文章

  1. win10如何截屏_win10系统电脑截屏的多种操作方法
  2. openstack搭建
  3. 关于垂直切分Vertical Sharding的粒度
  4. Linux系统中硬盘的管理
  5. 开源 免费 java CMS - FreeCMS-信息页静态化参数 .
  6. 新手学信息检索4:向量空间模型与相似度计算
  7. 推荐一些可以将QQ截取的gif图片修改为循环播放的软件
  8. Chrome Beta for MacLinux正式发布下载
  9. HDU 4547 CD操作
  10. spring cloud微服务分布式云架构-commonservice-config配置服务搭建