mybatis面试题总结

1.动态sql执行原理

2.为什么说mybatis是半自动orm框架,与全自动有什么区别?

Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为半自动 ORM 映射工具。

3.dao接口工作原理?

4.mybatis比ibatis改进在什么地方?

 ibatis中根元素是sqlMap,mybatis中是mapper;

传参比较:WHERE ID = #id:VARCHAR#    where ID = #{id,jdbcType=VARCHAR}

mapper接口方法传参:

ibatis :mapper.selectone("namespace+id",param)

mybatis:mapper.selectById(param)

等等

5.什么是接口绑定?有几种实现方式,怎么实现的?

接口映射就是在Mybatis中任意定义接口,然后把接口里面的方法和sql语句绑定。

接口绑定有两种实现方式,一种是通过注解绑定,就是子啊接口的方法上面加@select,@update等注解里面包含Sql 语句来绑定,另外一种就是通过xml里面写sql来绑定,在这种情况下,要指定xml文件里面的namespace必须为接口的全路径名字。

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

6.如何分页,分页插件原理?如何编写分页插件?

1)Mybatis 仅可以编写针对 ParameterHandler、 ResultSetHandler、 StatementHandler、 Executor 这 4 种接口的插件,Mybatis 通过动态代理,为需要拦截的接口生成代理 对象以实现接口方法拦截功能,每当执行这 4 种接口对象的方法时,就会进入拦 截方法,具体就是 InvocationHandler 的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。
2)实现 Mybatis 的 Interceptor 接口并复写 intercept()方法,然后在给插件编写 注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你 编写的插件。

7.是否支持延迟加载,实现原理是什么?

Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载, association
指的就是一对一, collection 指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载LazyLoadingEnabled=true|false。

他的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()

方法发现a.getB()是null值,那么就会单独发送实现保存好的查询关联B对象的SQL,把B查询上来,然后调用a.setB(b),于是a的对象b熟悉就有值了,

接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。

8.有哪些Executor执行器,区别是什么?

Mybatis 有三种基本的 Executor 执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。1) SimpleExecutor:Mybatis 的默认执行器,每执行一次 update 或 select,就开启一个 Statement 对 象,用完立刻关闭 Statement 对象。2)ReuseExecutor:执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,而是放 置于 Map3)BatchExecutor:完成批处理

9.和hibernate有什么不同?

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

Mybatis 学习门槛低,简单易学,程序员直接编写原生态 sql,可严格控制 sql 执行性 能,灵活度高。

Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如
需求固定的定制化软件)如果用 hibernate 开发可以节省很多代码,提高效率。但是
Hibernate 的缺点是学习门槛高,要精通门槛更高,而且怎么设计 O/R 映射,在性能和对象
模型之间如何权衡,以及怎样用好 Hibernate 需要具有很强的经验和能力才行。

10.mybatis-config.xml中获取Mapper映射文件的四种方式

第一种写法:直接获取SQL映射xml文件

<mapper resource="mapping/UserinfoMapper.xml"/>

第二种写法:扫描包,注意接口的名称和xml的文件的主文件名必须一致 

<mapper resource="mapping"/>

第三种写法:指定接口名称,注意接口的名称和xml的文件的主文件名必须一致

<mapper resource="mapping.UserinfoMapper"/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值