前言
- 我们在使用Mybatis是经常会遇到Mapper找不到,或者实体类找不到的问题,一个小细节可能就需要花很多时间去解决,就是因为我们对mybatis的配置不熟悉,对这些配置的作用不熟悉,这篇文章我就总结了一些mybatis中常见的一些问题解决方法。
Mybatis中常见的配置及其作用
- 映射器配置(扫描mapper.xml文件)
mapper-locations是一个字符串数组,可以设置多个
//我的mapper.xml文件是mapper/produce/ProduceMapper.xml,这里的*是通配符
mybatis: //注意缩进
mapper-locations: classpath:mapper/**/*Mapper.xml
- 设置别名(可以在mapper.xml中简化sql返回值类型)
我的实体类是在com.lq.pojo.domain下,那么xml中的参数类型就只用写实体类名称,而不用写全限定名,如果不加这个配置,我需要写parameterType = "com.lq.pojo.domain.User"
,但是加了这个配置,我就只需要写parameterType = "User"
,不仅仅是parameterType 中使用,只要类型这个包下的都可以【注意,type-aliases-package不支持配置多个包,要想在不同包下使用别名,只用使用通配符满足】
//扫描实体类所在的包
mybatis: //注意缩进
type-aliases-package: com.lq.**.domain
- 其实mybatis中常用的配置就这两个,但是我们常常会碰到mapper接口找不到的错误,其实是mapper扫描的问题。
Mapper扫描问题
-
使用@MapperScan注解
在主启动类上加上@MapperScan(“mapper接口所在的包路径”)【可以使用通配符】
-
使用@Mapper注解
在mapper接口上加上@Mapper注解
Mapper接口和Mapper.xml映射
- mapper.xml中的命名空间进行匹配
类的完全限定名就是包名+类名
<mapper namespace="mapper接口的完全限定名">
<mapper>
- mapper接口和xml文件一般要在同一个包下,当然不在同一个接口下也可以,但是要确保的是Mapper接口能被扫描到。