MyBatis面试题
26、Mapper编写有哪几种方式?
第一种:接口实现类继承 SqlSessionDaoSupport:使用此种方法需要编写mapper接口,mapper接口实现类、mapper.xml文件。
1、在 sqlMapConfig.xml中配置 mapper.xml的位置
resource="mapper.xml文件的地址"/> resource="mapper.xml文件的地址"/>
1、定义 mapper接口
3、实现类集成 SqlSessionDaoSupport
mapper方法中可以 this.getSqlSession()进行数据增删改查。
4、spring配置
id=" "class="mapper接口的实现"> name="sqlSessionFactory" ref="sqlSessionFactory">
第二种:使用org.mybatis.spring.mapper.MapperFactoryBean:
1、在 sqlMapConfig.xml中配置 mapper.xml的位置,如果 mapper.xml和mappre接口的名称相同且在同一个目录,这里可以不用配置
resource="mapper.xml文件的地址"/> resource="mapper.xml文件的地址"/>
2、定义 mapper接口:
1、mapper.xml中的 namespace为 mapper接口的地址
2、mapper接口中的方法名和 mapper.xml中的定义的 statement的 id保持一致
3、Spring中定义
id=""class="org.mybatis.spring.mapper.MapperFactoryBean"> name="mapperInterface"value="mapper接口地址"/> name="sqlSessionFactory"ref="sqlSessionFactory"/>
第三种:使用 mapper扫描器:
1、mapper.xml文件编写:
mapper.xml中的 namespace为 mapper接口的地址;
mapper接口中的方法名和 mapper.xml中的定义的 statement的 id保持一致;如果将 mapper.xml和 mapper接口的名称保持一致则不用在 sqlMapConfig.xml中进行配置。
2、定义 mapper接口:
注意 mapper.xml的文件名和 mapper的接口名称保持一致,且放在同一个目录3、配置 mapper扫描器:
class="org.mybatis.spring.mapper.MapperScannerConfigurer"> name="basePackage"value="mapper接口包地址 "> name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
4、使用扫描器后从 spring容器中获取 mapper的实现对象。
27、简述 Mybatis的插件运行原理,以及如何编写一个插件。
答:Mybatis仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、Executor这 4种接口的插件,Mybatis使用 JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这 4种接口对象的方法时,就会进入拦截方法,具体就是 InvocationHandler的 invoke()方法,当然,只会拦截那些你指定需要拦截的方法。
编写插件:实现 Mybatis的 Interceptor接口并复写 intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。