1.企业对开发者mybatis的要求是怎样的-阿里云开发者社区

开发者社区> rekless> 正文

1.企业对开发者mybatis的要求是怎样的

简介: 面试官询问mybatis方面的技术,究竟要考些什么
+关注继续查看

作为一名java开发工程师,对我而言,最简单的了解技术发展趋势的方法是没事儿多看看招聘需求。
毕业后做了几年开发,到了需要记笔记,写博客的时候了,因为总结对于做技术的真的很重要;所以看了看招聘需求,并在网上查了查一些热门的面试题,并结合了自身的面试经历,做了一些对于学习mybatis要点的总结。

企业要求:

对mybatis有深入的应用和优化经验,掌握它的原理机制,有框架开发或重构经验者优先考虑。(这应该就是所谓精通)

面试常问的技术点:

什么是orm,说说你对mybatis的理解?


在关系型数据库中,将表与java对象做了一个映射,通过操作java对象来实现对表的操作,使java开发者更加专注于java代码与流程的开发,更贴近面向对象的开发思想。而mybatis是一个半自动的orm框架,内部对jdbc进行了多层的封装与扩展,通过xml或者注解将接口与sql进行关联与定位,所以需要开发者编写原生sql,并且灵活度更高,更适合敏捷开发与产品的快速迭代。  
  

jdbc的缺点是什么,mybatis是如何解决mybatis缺点的?


jdbc需要手动创建和关闭数据库的连接,手动解析结果集,几乎全都需要手动处理,冗余代码极多;mybatis通过xml映射,使开发者关注于接口的设计与sql的编写,至于数据库的驱动和连接的创建销毁以及连接池的应用,都交给框架自己完成。
  

有哪些动态sql标签,动态sql的原理是什么?


mybatis提供了9种动态标签:trim,where,set,foreach,if,choose,when,otherwise,bind;
通过这些标签可以使编写的sql可以做一些简单的判断,本质上是一种sql的拼接。

模糊查询 like 语句该怎么写?


将%写在java程序的参数中参数上,然后xml文件中使用#{}做sql拼接;
固定写法,写在xml中:%${value}%。
 

#{}和${}的区别是什么?


看运行日志文件可以发现: 
#代表preparestatement,生成?占位符;
$代表statement,传递的就是参数,拼接的sql;

说说mybatis的接口绑定?


将接口与sql进行绑定,使用的时候,只要调用接口的方法就可以了;
可以在方法上使用select,update等注解,使用起来比较方便,但适合表简单,业务简单的情况;
也可以使用xml配置的方式,dao的xml配置文件要与dao文件在同一个目录,而且xml文件中要使用<mapper namespace="">来指定dao文件,id要对应接口的方法名,适用于sql复杂的情况。
  

dao接口的工作原理是什么,里面的方法可以重载吗?


不能重载,因为是根据全类名+方法名进行sql定位的,方法重载会使xml出现判断错误;
dao的工作原理是jdk的动态代理,sqlSession通过getMapper()方法生成接口的代理对象,代理对象里的方法使用sqlsession里通过全类名+方法名和方法定位到xml中的sql语句,根据xml的select,update标签,判断使用jdbc里的execute方法执行。
  

插入数据时,如何获取自动生成的id值?


原理:在执行insert后,执行一个select last_insert()语句;
<insert><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"></></>;

怎样才能让接口中的方法传递多个参数?

 
1.接口方法中直接传,在xml中使用#{0},#{1},#{2}来代表参数的下标;
2.接口中使用@param注解,然后在xml中用#{}来正常表示;
3.封装成一个map;

如果实体类属性与sql的字段名不同,有哪些解决方式?


1.编写sql时,查询的字段使用别名;
2.<resultMap>标签做映射;
3.sql查询的结果集为设置为map,然后在java中设置值;
4.当使用注解时,可以使用@Results和@Result标签设置对应关系;
5.设置Configuration对象的setMapUnderscoreToCamelCase方法:当属性遵循驼峰命名法并且字段使用下划线,通过修改配置可以做到属性的自动映射;

mybatis都有哪些Executor执行器?它们之间的区别是什么?

mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor;
1.SimpleExecutor:每执行一次update或select,就开启一个statement对象,用完立刻关闭statement对象;
2.ReuseExecutor:执行update或select,以sql作为key查找statement对象,存在就使用,不存在就创建,用完后,不关闭statement对象,而是放置于Map<String, Statement>内,供下一次使用。简言之,就是重复使用statement对象;
3.BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个statement对象,每个statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理;
Executor的这些特点,都严格限制在sqlSession生命周期范围内,可以在xml中配置sqlsession的ExecutorType。

如何批量插入,能返回生成的主键列表吗?

能返回,连jdbc都能;
1.for循环insert;
2.sqlsession设置ExecutorType.BATCH,然后正常使用for循环insert;
3.for循环生成一个list,然后调用insertBatch(),在xml<insert><foreach collection ="list" item="对象" separator =","></></> ;

实现一对多有哪几种方式,实现一对一又有哪几种方式?


一对一:
  从表包含主表的实体对象的引用,在<resultMap>中设置association;
  默认是立即加载;
一对多:
  主表设置一个从表的list属性,然后在<resultMap>中设置collection;
  一般设置为延迟加载,原理是用cglib生成结果的代理对象,然后当调用代理对象的list属性时,判断代理对象的list是否为null,如果为null就查询list集合,延迟加载的属性为lazyLoadingEnabled=true;

了解mybatis的缓存机制吗?


一级缓存:
  sqlsession的缓存,存入的是对象;
  连续两次查询,结果为同一个对象,因为只请求了一次数据库,将查询结果存入到sqlsession的map区域中,查询时先查询缓存;
  清空缓存的方法:sqlsession.clearCache();
  当调用了sqlsession的删除修改添加,close,commit等方法,自动删除缓存;
二级缓存:
  sqlFactory的缓存,存的是类似json的数据,不是对象;
  创建新对象,将数据写进对象中,所以对象要实现序列化接口;
  由同一个sqlsessionfactory创建的sqlsession对象共享;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性| 9月9号栖夜读
今天的首篇文章,讲述了:如何治理测试稳定性问题?很多人会说:环境、流程管控、监控、工具化、加机器、专人负责、等等。这些都是对的。不过这些都是解决方案层面的,而不是方法论和理论体系层面的。今天,阿里研究员郑子颖来说说测试稳定性的三板斧。
3878 0
企业数仓如何处理?Flink来报到 | 开发者社区精选文章合集(二十一)
Flink 作为业界公认为最好的流计算引擎,不仅仅局限于做流处理,而是一套兼具流、批、机器学习等多种计算功能的大数据引擎,以其高吞吐低延时的优异实时计算能力、支持海量数据的亚秒级快速响应帮助企业和开发者实现数据算力升级。来看Flink如何高效解决企业数仓难题!
67 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
11035 0
【干货】Work at Alibaba 阿里企业应用构建揭秘
作为一个拥有数万名员工的企业,阿里巴巴的企业信息化是怎么做的?阿里巴巴企业智能事业部资深技术专家叶建辉为大家揭晓谜底。
1436 0
达摩院2020十大科技趋势发布:科技浪潮新十年序幕开启 | 开发者必读(129期)
2020年第一个工作日,“达摩院2020十大科技趋势”发布。这是继2019年之后,阿里巴巴达摩院第二次预测年度科技趋势。
712 0
+关注
1
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载