springBoot使用注解注入失败

useMapper的xml文件

 <mapper namespace="com.auto.dao.UserMapper">
    <select id="findByName" parameterType="String" resultType="User">
        select * from t_user where username=#{username}
    </select>
 </mapper>

mapper接口代码

public interface UserMapper {
    public User findByName(String username);
}

springboot启动类的代码

@SpringBootApplication
@MapperScan("com.auto.dao")
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

pom.xml文件配置

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
  </parent>
  <groupId>com.auto</groupId>
  <artifactId>MavenDay01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <properties>
    <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
        <!-- spirngBoot启动器 -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <!-- jstl -->
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.1</version>
    </dependency>

user的实体类

@Repository
public class User {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }

}

这是properties的配置文件

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mysql
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.type-aliases-package=com.auto.entity  实体类和mapper.xml文件都在这包里面
server.port=9090

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

我写了个service接口,然后写了个实现类重写findByName方法返回userMapper中方法,在实现类中注入了userMapper接口,这里无法使用@Autowired注入

@Service
@Transactional
public class UserServiceImpl implements UserService{
    @Resource
    UserMapper userMapper;
    @Override
    public User findByName(String username) {

        return userMapper.findByName(username);
    }
}

报错

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.auto.dao.UserMapper.findByName

总是报找不到接口,加上注解标记也没用,换成在接口上用@mapper注解也不行,是什么问题,我在网上看说有什么依赖包冲突问题,但我换了几个版本也不行;

问题已经解决:
问题出在没有在properties文件中添加mapper.xml文件的扫描路径
解决办法:在properties文件中加上
mybatis.mapper-locations=com/.../.../*.xml 这里是mapper.xml文件的路径

2个回答

是否可以提供更多的代码? 比如UserMapper.xml? 在mapper接口中是否使用@param 注解?如果没有使用, 可能会导致找不到绑定参数的异常
如果使用的是idea 开发工具,请观察target 目录下的mapper 是否已经编译(mapper.xml是否存在) 如果没有编译, 请在pom 的build 中加入以下节点

<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
</resources>

(这段依赖包含在build中)加入之后请重新Build

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456
spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources

# mapper 实现类路径
mybatis.mapper-locations=com/xdz/mybatis/mapper/impl/*.xml 

# mapper对应entity配置
mybatis.typeAliasesPackage=com.xdz.mybatis.entity   

weixin_43296748
一个写程序的人 回复qq_35929243: 您好,我在properties中加上了mapper_Location,代码可以成功运行了,浪费您这么多时间真是不好意思,非常感谢您的分享!
7 个月之前 回复
qq_35929243
qq_35929243 您将该配置补充到properties 中再尝试一下, (mybatis.type-aliases-package=com.auto.entity) 这个配置我也没用过 ,打算明天学习一下,如有问题, 希望您多多指教
7 个月之前 回复
qq_35929243
qq_35929243 我刚刚将您补充的配置文件再次看了一遍, 发现您没有配置实现类路径, 我将实现类路径代码配置注释之后,和您报的错是相同的,
7 个月之前 回复
qq_35929243
qq_35929243 十分抱歉未能模拟出您的问题, 我将我的配置文件放在回复中, 希望能对您有帮助 ,如有需要,我可以将Demo 发送至您的邮箱
7 个月之前 回复
weixin_43296748
一个写程序的人 回复qq_35929243:我在IDEA打开,xml文件确实没有,按照您的方法之后target目录下mapper.xml出现了,但是运行还是会那个错误
7 个月之前 回复
qq_35929243
qq_35929243 <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>
7 个月之前 回复
qq_35929243
qq_35929243 如果您用的是IDEA , 请观察target 目录下mapper.xml 是否已经 编译 , 如果在target 目录下找不到mapper.xml , 请在build中加入如下依赖
7 个月之前 回复
weixin_43296748
一个写程序的人 我更新了,但是我参数只有一个,应该不需要这个注解吧
7 个月之前 回复

useMapper.xml中resultType="User" 的User在xml中定义了吗?

weixin_43296748
一个写程序的人 您好,问题确实是出在没有没有配置xml文件的路径,加上mapper_Location之后,代码可以正常运行,非常感谢您的分享!
7 个月之前 回复
sinat_30356443
云锦の 回复爱你久见你心: 这个是我写的代码示例 https://gitee.com/lshyunjin/publicProject/tree/master/dao
7 个月之前 回复
sinat_30356443
云锦の 回复爱你久见你心: 照着你的代码来了一遍,确实会报这个错,原因是你的properties里面没有读取mapper.xml文件,添加一个mybatis.mapperLocations=classpath:/*.xml配置就行了
7 个月之前 回复
weixin_43296748
一个写程序的人 我更新了代码,user实体类我就加了@Repository注解标记
7 个月之前 回复
sinat_30356443
云锦の 回复爱你久见你心: 有更多的代码吗,这个User是要映射的,即使properties写了,但是未必能映射吧
7 个月之前 回复
weixin_43296748
一个写程序的人 mybatis.type-aliases-package=com.auto.entity这是我实体类的包 在properties文件里面配置了
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!