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"/>