zeromemos
最好的学习方法就是输出所学的知识

SpringBoot整合mybatis mapper扫描问题

springboot整合mybatis,想要mapper类和mapper.xml能够被spring容器扫描到,需要进行以下配置

1.扫描Mapper接口类

(1)给接口类加上@Mapper注解(需要在每个类上都添加@Mapper注解)

加@Repository或者@Component都不管用,必须得@Mapper注解才行。

(2)在启动类上加@MapperScan注解(只需在启动类上添加一次即可)

单个包:@MapperScan(“com.example.demo.**.dao”)

多个包:@MapperScan({“com.mysiteforme.admin.dao”,“com.zipon.tpf.dao”})

(3)在配置类上加@MapperScan注解

package com.zeromemos.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.zeromemos.mapper")
public class Config {
}

补充:

@Mapper和@MapperScan注解都是mybatis的注解,而@Component和@ComponentScan注解都是spring的,在mybatis的应用场景下,用mybatis的注解。

2.扫描*Mapper.xml文件

(1)*Mapper.xml文件放在resources下时


application.yml:

mybatis:
  mapper-locations: classpath*:mapper/*Mapper.xml
  type-aliases-package: com.xiao.learn.entity

(2)*Mapper.xml文件在java目录下时

该路径下,默认在编译时不会把静态文件编译到target目录下,会找不到

这种问题在启动时没什么异常,但是当你调用这个mapper的方法时就会抛出:

BindingException: Invalid bound statement (not found)

解决办法是在pom.xml(maven项目)中的build标签里加入:

<resources>
    <resource>
        <directory>${basedir}/src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
</resources>

扫描配置:

application.properties

mybatis.mapper-locations=classpath:org/sang/springboot/mapper/xml/*.xml
mybatis.type-aliases-package=org.sang.springboot.entity

如果*Mapper.xml文件跟mapper类在同一文件夹下,则不需要进行上面的配置

多个路径时中间用","号隔开即可*:classpath:com/learn/shiro/mapper/xmls/.xml,classpath:xmls/.xml

原文链接:https://blog.csdn.net/qq_35096670/article/details/111144860

评论区

关于我们

本站主要用于记录个人学习笔记,网站开发中,如需以前站内资料请加QQ群272473835索取。注册账号仅提供回帖功能,可不注册!

微信公众号