Spring Data JDBC整合mybatis

(1)Spring data Jdbc整合mybatis 出現報錯
Unsatisfied dependency expressed through field 'sqlSession': No qualifying bean of type 'org.apache.ibatis.session.SqlSession' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
麻煩有思路者不吝指教 感謝

img


個人配置如下
(1)已經在pom.xml添加依賴


```xml
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

(2)application.yml檔 添加了掃描mapper文件配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dddlearning
    username: ENC(OpHcHldSZ+ycDb5fsKyTBQ==)
    password: ENC(CRDYH3KIW9gnAxZqdoURSA==)
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: mapper/*Mapper.xml

(3)我的接口類


@Mapper
public interface ProgrammerRepositoryExtension {
     List<Programmer> findProgrammerById(String employeeId);
 }


<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.april.test.mapper.ProgrammerRepositoryExtension">

    <select id="findProgrammerById"
            parameterType="java.lang.String"
            resultType="com.april.test.domain.model.entities.Programmer">
        select * from programmer where employeeId=#{employeeId};
    </select>

</mapper>




```java

@Repository
public class ProgrammerRepositoryExtensionImpl implements ProgrammerRepositoryExtension {
    @Autowired
    private SqlSession sqlSession;
    @Override
    public List<Programmer> findProgrammerById(String employeeId) {
        return sqlSession.selectList(ProgrammerRepositoryExtension.class.getName()+".findProgrammerById");
    }


}

img

看样子应该是sqlsession没有注入到 我不太了解你的代码环境,问了gpt是交由SqlSessionFactory来创建sqlsession实例, 然后再去注入sqlsession

【以下回答由 GPT 生成】

根据报错信息,可以看出问题是找不到符合条件的SqlSession的bean。这可能是由于mybatis的配置问题导致的。

解决思路:

  1. 确保SqlSession的bean被正确地注入到Spring容器中。
  2. 确保mybatis-spring-boot-starter的版本与当前项目的Spring Boot版本兼容。
  3. 确保mapper文件的位置配置正确。
  4. 检查数据库连接配置是否正确。

下面是逐步解决问题的具体步骤:

Step 1: 确保SqlSession的bean被正确地注入到Spring容器中

确保在主应用程序中使用@MapperScan注解注入了Mapper接口所在的包。例如:

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Step 2: 确保mybatis-spring-boot-starter的版本与当前项目的Spring Boot版本兼容

根据你提供的pom.xml文件,mybatis-spring-boot-starter的版本为2.1.1。需要确保该版本与当前项目的Spring Boot版本兼容。可以通过在pom.xml文件中添加以下配置来排除Spring Boot自动配置的SqlSessionFactory

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Step 3: 确保mapper文件的位置配置正确

根据你提供的application.yml文件,mapper文件的位置应该是resource/mapper/目录下的*.xml文件。请确保mapper文件的位置和命名是正确的。如果仍然存在问题,可以尝试将mybatis.mapper-locations属性的值更改为绝对路径。

Step 4: 检查数据库连接配置是否正确

根据你提供的application.yml文件,可以看出你在数据库连接配置部分使用了加密的用户名和密码。请确保用户名、密码、数据库URL和驱动程序类名正确。并且确保用户名和密码已正确解密。

如果以上步骤都没有解决问题,可以尝试以下操作:

  1. 检查mybatis-spring-boot-starter文档,查看是否有其他需要配置的地方。
  2. 在debug模式下跟踪代码,找出具体报错的位置及原因。
  3. 尝试使用其他集成Spring Boot和MyBatis的方法或工具,如mybatis-plus等。

希望以上解决思路能帮助到你解决问题。如果仍有疑问,请提供更多的错误日志和相关代码,以便更好地帮助你解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这个错误提示表明 Spring 在自动装配 sqlSession 时找不到符合条件的 bean。这通常是由于 Spring 没有正确配置或扫描到 MyBatis 的相关配置所导致的。以下是一些可能的解决方案和思路:

确认 MyBatis 配置文件位置: 确保你的 MyBatis 配置文件(比如 mybatis-config.xml)在 Spring 的扫描路径之下,或者你已经通过 @MapperScan 注解指定了正确的 Mapper 接口路径。

检查 MyBatis 配置是否正确: 确保你的 MyBatis 配置文件中包含了正确的配置信息,比如数据库连接信息、映射器配置等。

检查 MyBatis Mapper 接口定义: 确保你的 Mapper 接口定义正确,比如注解或 XML 配置是否正确,是否和 MyBatis 配置文件中的映射对应。

Spring 配置中是否包含 MyBatis 配置: 确保你在 Spring 的配置文件中正确地包含了 MyBatis 的配置,例如 SqlSessionFactory 的定义和配置。

依赖版本兼容性: 确保你使用的 Spring、MyBatis 和相关依赖库的版本是兼容的,不同版本之间可能会有一些不兼容的问题。

检查包扫描配置: 如果你使用了 @MapperScan 注解来扫描 MyBatis Mapper 接口,确保扫描的包路径是正确的,且能够扫描到 Mapper 接口。

检查 Maven 或 Gradle 依赖: 确保你的项目中正确引入了 MyBatis 和 Spring 相关的依赖,可以尝试重新构建项目以确保依赖正确加载。

排除冲突的依赖: 有时候不同的依赖可能存在冲突,你可以尝试使用 Maven 或 Gradle 的依赖排除功能来排除冲突的依赖项。

重新编译和部署: 如果以上步骤都没有解决问题,尝试重新编译项目并重新部署,有时候问题可能是由于构建或部署过程中的错误导致的。

如果你仍然无法解决问题,可以提供更多关于你的 Spring 配置、MyBatis 配置以及代码示例,这样我可以更具体地帮助你诊断问题。

@ada 你认为这个报错是哪里的问题呢?