关键时刻,第一时间送达!java
阅读本文须要5分钟 底部获取全栈资源程序员
Mybatis中如何执行批处理?
使用BatchExecutor完成批处理。web
Mybatis都有哪些Executor执行器?它们之间的区别是什么?
Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。面试
SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完马上关闭Statement对象。sql
ReuseExecutor:执行update或select,以sql做为key查找Statement对象,存在就使用,不存在就建立,用完后,不关闭Statement对象,而是放置于Map<String, Statement>内,供下一次使用。简言之,就是重复使用Statement对象。数据库
BatchExecutor:执行update(没有select,JDBC批处理不支持select),将全部sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每一个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。与JDBC批处理相同。编程
做用范围:Executor的这些特色,都严格限制在SqlSession生命周期范围内。缓存
Mybatis中如何指定使用哪种Executor执行器?
在Mybatis配置文件中,能够指定默认的ExecutorType执行器类型,也能够手动给DefaultSqlSessionFactory的建立SqlSession的方法传递ExecutorType类型参数。微信
Mybatis是否能够映射Enum枚举类?
Mybatis能够映射枚举类,不单能够映射枚举类,Mybatis能够映射任何对象到表的一列上。映射方式为自定义一个TypeHandler,实现TypeHandler的setParameter()和getResult()接口方法。session
TypeHandler有两个做用,一是完成从javaType至jdbcType的转换,二是完成jdbcType至javaType的转换,体现为setParameter()和getResult()两个方法,分别表明设置sql问号占位符参数和获取列查询结果。
Mybatis映射文件中,若是A标签经过include引用了B标签的内容,请问,B标签可否定义在A标签的后面,仍是说必须定义在A标签的前面?
虽然Mybatis解析Xml映射文件是按照顺序解析的,可是,被引用的B标签依然能够定义在任何地方,Mybatis均可以正确识别。
原理是,Mybatis解析A标签,发现A标签引用了B标签,可是B标签还没有解析到,尚不存在,此时,Mybatis会将A标签标记为未解析状态,而后继续解析余下的标签,包含B标签,待全部标签解析完毕,Mybatis会从新解析那些被标记为未解析的标签,此时再解析A标签时,B标签已经存在,A标签也就能够正常解析完成了。
简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?
Mybatis将全部Xml配置信息都封装到All-In-One重量级对象Configuration内部。在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象,其每一个子元素会被解析为ParameterMapping对象。
<resultMap>标签会被解析为ResultMap对象,其每一个子元素会被解析为ResultMapping对象。
每个<select>、<insert>、<update>、<delete>标签均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。
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()关闭会话
MyBatis与Hibernate有哪些不一样?
1.Mybatis和hibernate不一样,它不彻底是一个ORM框架,由于MyBatis须要程序员本身编写Sql语句。
mybatis能够经过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。
2.Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,很是适合对关系数据模型要求不高的软件开发。
例如互联网软件、企业运营类软件等,由于这类软件需求变化频繁,一但需求变化要求成果输出迅速。
可是灵活的前提是mybatis没法作到数据库无关性,若是须要实现支持多种数据库的软件则须要自定义多套sql映射文件,工做量大。
3.Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)若是用hibernate开发能够节省不少代码,提升效率。
可是Hibernate的学习门槛高,要精通门槛更高,并且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate须要具备很强的经验和能力才行。
总之,按照用户的需求在有限的资源环境下只要能作出维护性、扩展性良好的软件架构都是好架构,因此框架只有适合才是最好。
使用MyBatis的mapper接口调用时有哪些要求?
一、Mapper接口方法名和mapper.xml中定义的每一个sql的id相同。
二、Mapper接口方法的输入参数类型和mapper.xml中定义的每一个sql 的parameterType的类型相同。
三、Mapper接口方法的输出参数类型和mapper.xml中定义的每一个sql的resultType的类型相同。
四、Mapper.xml文件中的namespace便是mapper接口的类路径。
之后将持续为你们搜集面试题。整理的很差也但愿你们多多提出宝贵的意见。
END
更多高质量视频资源请查看《高级社区》,底部还有惊喜
公众号输入:全栈资源
另外小编还创建了资源互换微信群,群内只留300人,将不断视频资源互换,须要进入的能够扫下面二维码,加好友以后回复加群。
本群严禁伸手党和其它博主进入,谢谢,定时清理!!!
是否是很棒!!!分享一下吧,小伙伴们!!!
上一篇文章《mybatis面试题二》
是否是很棒!!!分享一下吧,小伙伴们!!!
本文分享自微信公众号 - Java研发军团(ityuancheng)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。