踩坑记录:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required

本文讲述了作者在升级到Spring Boot 3.0后遇到的MyBatis冲突问题,通过调整至2.1.7.RELEASE版本并移除mybatis-spring-boot-starter,解决了Mapper插入失败和配置问题。核心在于版本兼容性导致的sqlSessionFactory依赖缺失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

处理方式:改spring-boot-starter-parent版本即可,不必配置sqlSessionFactory等相关。

项目原本没有报错,只不过因为同时引入mybatis-plus-boot-starter和mybatis-spring-boot-starter,造成了依赖包冲突,造成mybatis中Mapper的insert等不能使用,没有log输入等问题

移除mybatis-spring-boot-starter后,项目启动失败,提示Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required  等错误信息。

原本以为配置了sqlSessionFactory和sqlSessionTemplate等,就能解决问题,但最终也不行,参考了不少问题解答,仍然无法解决。

最后采用写demo的方式来对比,结果发现spring-boot-starter-parent是版本问题造成的。 

修改前:   

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>3.0.0</version>
   <relativePath/>
</parent>

修改后:

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.1.7.RELEASE</version>
   <relativePath/>
</parent>

### MyBatis Plus 中 `sqlSessionFactory` 或 `sqlSessionTemplate` 属性缺失的解决方案 当遇到 “PropertysqlSessionFactoryorsqlSessionTemplateare required”的错误提示时,这表明在 Spring 容器初始化过程中,某些依赖于这些属性的对象未能成功注入所需的资源。此类问题常见于基于 Spring BootMyBatis Plus 构建的应用程序中。 #### 配置文件设置不当 如果应用程序使用的是 YAML 或者 properties 文件来定义数据库连接和其他必要的参数,则需确认是否已正确定义了数据源以及 MyBatis 相关配置项[^1]: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath*:mapper/*.xml type-aliases-package: com.example.demo.entity ``` #### 数据库配置类未创建或不正确 另一个常见的原因是缺少自定义的数据源配置类或者是该类存在缺陷。对于大多数场景来说,默认情况下 Spring Boot 可以自动装配所需组件;但如果项目结构较为复杂或是有特殊需求的话,则建议显式声明一个用于管理 DataSource 的 Java Config 类[^2]: ```java import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class DatabaseConfig { @Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); // 如果使用 XML 映射文件, 则还需要指定其位置 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml")); return sessionFactory.getObject(); } } ``` #### Mapper 接口扫描路径不对 最后还需注意检查 Mapper 接口所在的包名是否被正确指定了。可以通过 `@MapperScan` 注解的方式,在启动类或者其他合适的地方添加此注解并传入相应的包名称作为参数值[^3]: ```java @SpringBootApplication @MapperScan(basePackages = {"com.example.demo.mapper"}) public class DemoApplication { public static void main(String[] args){ SpringApplication.run(DemoApplication.class,args); } } ``` 通过以上方法可以有效解决由于 `sqlSessionFactory` 或 `sqlSessionTemplate` 缺失所引发的一系列问题。确保所有的配置都按照上述指导进行了调整之后再尝试重新部署应用即可恢复正常运行状态。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值