mybatis 同时使用 XML 和注解
作者:互联网
引言
学过 MyBatis 框架的童靴都知道, MyBatis 支持 XML 和注解两种方式配置,如下:
使用 XML 方式配置
只写明 XML 的 resource 路径(或者URL路径)
<mappers>
<mapper resource="com/UserMapper.xml"/>
</mappers>
使用注解方式配置
只写明注解Mapper的类全路径名(这种方式只适合于只包含注解的配置)
<mappers>
<mapper class="com.UserMapper"/>
</mappers>
我们知道,以上 XML 和注解方式各有利弊;有的童靴可能会想,那能不能 XML 和注解这两种方式一起用,这样可以尽量发挥各自的长处。答案是 MyBatis 可以同时使用 XML 和注解两种方式配置。
同时使用 XML 和注解方式配置(不同映射器接口类)
<mappers>
<mapper resource="com/GameMapper.xml"/>
<mapper class="com.UserMapper"/>
</mappers>
可以看到,以上两种方式配置是针对不同的映射器接口类。那么,是否可以在同一个映射接口类中同时使用 XML 和注解方式呢?答案依然是可以。
同时使用 XML 和注解方式配置(同一映射器接口类)
<mappers>
<mapper class="com..UserMapper"/>
<mapper resource="com/UserMapper.xml"/>
</mappers>
- 这种方式一定要把类的配置写在 XML 的配置之前。
因为先解析完 mapper 之后,可以继续解析 xml,解析 xml 时如果判断 mapper 解析过之后则不会重复解析也不会抛错,但是如果先解析 xml,会向Configuration 中注册 Mapper,当之后解析 Mapper 时如果检测到有加载过则会抛出异常并终止程序创建 SqlSessionFactory。
- 不允许对一个方法既XML 配置又注解,这会报错。
因为在解析每个 sqlmap 的时候会给其生成唯一的 ID,并存入 MapperRegistry 中,这个注册中心本质上是一个 HashMap,且不允许插入已经存在的 key 值,做插入操作时如果检测到已存在同名ID就会报错终止解析。
标签:XML,方式,配置,mybatis,注解,解析,接口类 来源: https://www.cnblogs.com/binbingg/p/13791801.html