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的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis最全的高质量面试题和答案—2

Mybatis最全的高质量面试题和答案—1

Mybatis最全的高质量面试题和答案—4

最全MySQL面试60题和答案

最全MySQL面试60题和答案

最全BAT面试239道题答案:Map集合题+并发+中间件+MySQL等