|
Mybatis是否支持延迟加载?如果支持,它的实现原理是什
么?
1)Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指
的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用
延迟加载lazyLoadingEnabled=true|false。
2)它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方
法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独
发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b
属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。
MyBatis的好处是什么?
1)MyBatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护
带来了很大便利。
2)MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,大
大简化了Java数据库编程的重复工作。
3)因为MyBatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控
制sql语句,因此能够实现比Hibernate等全自动orm框架更高的查询效率,能够完成复杂查
询。
简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的
映射关系?
Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Con内部。在Xml映射文
件中,标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对
象。标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。 以下
标签:
<select>、<insert>、<update>、<delete>
均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。
什么是MyBatis的接口绑定,有什么好处?
接口映射就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调
用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置.
接口绑定有几种实现方式,分别是怎么实现的?
接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上@Select@Update
等注解里面包含Sql语句来绑定,另外一种就是通过xml里面写SQL来绑定,在这种情况下,要指定
xml映射文件里面的namespace必须为接口的全路径名.
|
|