Mybatis最全的高质量面试题和答案—5
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis最全的高质量面试题和答案—5相关的知识,希望对你有一定的参考价值。
25、使用MyBatis 的mapper 接口调用时有哪些要求?
1、Mapper 接口方法名和mapper.xml 中定义的每个sql 的id 相同;
2、Mapper 接口方法的输入参数类型和mapper.xml 中定义的每个sql 的parameterType 的类型相同;
3、Mapper 接口方法的输出参数类型和mapper.xml 中定义的每个sql 的resultType 的类型相同;
4、Mapper.xml 文件中的namespace 即是mapper 接口的类路径。
26、Mapper 编写有哪几种方式?
第一种: 接口实现类继承SqlSessionDaoSupport:使用此种方法需要编写mapper 接口, mapper 接口实现类、mapper.xml 文件。
1、在sqlMapConfig.xml 中配置mapper.xml 的位置
<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
2、定义mapper 接口
3、实现类集成SqlSessionDaoSupportmapper 方法中可以this.getSqlSession()进行数据增删改查。
4、spring 配置
<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory"
ref="sqlSessionFactory"></property>
</bean>
第二种: 使用org.mybatis.spring.mapper.MapperFactoryBean:
1、在sqlMapConfig.xml 中配置mapper.xml 的位置, 如果mapper.xml 和
mappre 接口的名称相同且在同一个目录,这里可以不用配置
<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
2、定义mapper 接口:
3、mapper.xml 中的namespace 为mapper 接口的地址
4、mapper 接口中的方法名和mapper.xml 中的定义的statement 的id 保持一致
5、Spring 中定义
<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
第三种: 使用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 扫描器:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址
"></property>
<property name="sqlSessionFactoryBeanName"
value="sqlSessionFactory"/>
</bean>
4、使用扫描器后从spring 容器中获取mapper 的实现对象。
27、简述Mybatis 的插件运行原理,以及如何编写一个插件。
答: Mybatis 仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor 这4 种接口的插件,Mybatis 使用JDK 的动态代理, 为需要拦截的接口生成代理对象以实现接口方法拦截功能, 每当执行这4 种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler 的invoke()
方法,当然,只会拦截那些你指定需要拦截的方法。
编写插件:实现Mybatis 的Interceptor 接口并复写intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住, 别忘了在配置文件中配置你编写的插件。
以上是关于Mybatis最全的高质量面试题和答案—5的主要内容,如果未能解决你的问题,请参考以下文章