欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

解决java.lang.IllegalArgumentException:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requir

发布时间:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 解决java.lang.IllegalArgumentException:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requir 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 1. 复现问题
  • 2. 分析问题
    • 2.1 检查是否引入了mybatis的jar包
    • 2.2 检查启动类的配置
    • 2.3 检查xml文件对应java类的配置是否有误
    • 2.4 检查application.yml文件的mybatis配置是否有误
    • 2.5 检查pon.xml文件
  • 3. 解决问题

1. 复现问题

今天在测试如下代码时:

@SpringBootTest class LowCodeApplicationTests {@Autowired private Userservice userservice;@Testvoid contextLoads() {List<User> users = userservice.queryByParam("测试");for (User user : users) {System.out.println(user);}} }

报错如下错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userMapper' defined in file [D:\project\target\classes\com\cloud\lowcode\mapper\UserMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are requiredat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:461)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:527)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650)at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318)... 83 more Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are requiredat org.springframework.util.Assert.notNull(Assert.java:201)at org.mybatis.spring.support.SqlSessionDaoSupport.checkDaoConfig(SqlSessionDaoSupport.java:122)at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:73)at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)... 96 more

即错误信息为:java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required。

2. 分析问题

将该错误信息翻译成中文为java.lang.IllegalArgumentException:属性“sqlSessionFactory”或“sqlSessionTemplate”是必需的。

2.1 检查是否引入了mybatis的jar包

<properties><java.version>1.8</java.version><mybatisStarter.version>2.2.2</mybatisStarter.version><baomidouStarter.version>1.0.5</baomidouStarter.version><baomidouMybatisPlus.version>2.1.9</baomidouMybatisPlus.version> </properties><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatisStarter.version}</version> </dependency> <dependency><groupId>com.baomidou</groupId><artifactId>mybatisplus-spring-boot-starter</artifactId><version>${baomidouStarter.version}</version> </dependency> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>${baomidouMybatisPlus.version}</version> </dependency>

2.2 检查启动类的配置

检查启动类是否加上MapperScan,如下已加上该注解:

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) @MapperScan("com.**.mapper") public class LowCodeApplication {public static void main(String[] args) {SpringApplication.run(LowCodeApplication.class, args);}}

2.3 检查xml文件对应java类的配置是否有误

如下是userMapper.xml配置信息:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.cloud.lowcode.mapper.UserMapper"><select id="queryByParam" parameterType="string" resultType="com.cloud.lowcode.entity.po.User">SELECT * FROM `user`<where><if test="username != null || username.length > 0">name = #{username}</if></where></select> </mapper>

再看对应的UserMapper.java类,如下所示:

package com.cloud.lowcode.mapper;import com.baomidou.mybatisplus.mapper.BaseMapper; import com.cloud.lowcode.entity.po.User; import org.apache.ibatis.annotations.Mapper;import java.util.List;/*** @author 念兮为美* @datetime 2022/11/28 13:51* @desc 用户实体类*/ @Mapper public interface UserMapper extends BaseMapper<User> {List<User> queryByParam(String username); }

userMapper.xml和userMapper.java对应如下:

  • userMapper.xml和UserMapper.java的名字一样(不包括后缀名)

  • userMapper.xml中的namespace为com.cloud.lowcode.mapper.UserMapper对应UserMapper.java中的包名+类名,没问题

  • userMapper.xml中的id为queryByParam对应UserMapper.java中的方法名,没问题

  • userMapper.xml中的参数类型parameterType为string对应UserMapper.java中的queryByParam字符串类型,没问题

  • 经检查resultType也没问题

2.4 检查application.yml文件的mybatis配置是否有误

如下是application.yml配置的mybatis信息:

#mybatis配置 mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations: classpath*:/mapper/*Mapper.xmltype-aliases-package: com.cloud.lowcode.entity.po

该配置信息没有问题。

2.5 检查pon.xml文件

<build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.yml</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><filtering>true</filtering></resource></resources> </build>

pom.xml中已配置了resource信息,也没有问题。

以上四种情况,都没有问题,那么,问题出现在哪里呢?

3. 解决问题

尝试删除启动类中的exclude={DataSourceAutoConfiguration.class},即修改成如下代码:

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

重新启动测试类,便能成功运行,如下代码所示:

总结

以上是生活随笔为你收集整理的解决java.lang.IllegalArgumentException:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requir的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。