SpringBoot关于自动注入mapper为空的坑及解决

 更新时间:2023年07月15日 08:40:06   作者:Tokey_W  
这篇文章主要介绍了SpringBoot关于自动注入mapper为空的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1、初始环境

配置类

package com.sofwin.yygh.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @packageName: com.sofwin.yygh.config
 * @author: wentao
 * @date: 2022/12/12 17:34
 * @version: 1.0
 * @email 1660420659@qq.com
 * @description: 数据字典的配置类
 */
@Configuration
//发现映射器--可以动态生产mapper的实现类
@MapperScan(basePackages = "com.sofwin.yygh.mapper")
public class CmnConfig {
    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
        return paginationInterceptor;
    }
}

启动类

package com.sofwin.yygh;
import com.sofwin.yygh.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan("com.sofwin")
public class ServicecmnApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServicecmnApplication.class, args);
    }
}

mapper接口

package com.sofwin.yygh.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sofwin.yygh.model.cmn.Dict;
import com.sofwin.yygh.model.hosp.HospitalSet;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
/**
 * @packageName: com.sofwin.yygh.mapper
 * @author: wentao
 * @date: 2022/12/12 17:17
 * @version: 1.0
 * @email 1660420659@qq.com
 * @description: Dict的mapper接口
 */
@Repository
public interface DictMapper extends BaseMapper<Dict> {
}

目录

2、测试

Test1

自动注入DictMapper

package com.sofwin.yygh;
import com.sofwin.yygh.mapper.DictMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * @packageName: com.sofwin.yygh
 * @author: wentao
 * @date: 2022/12/21 10:56
 * @version: 1.0
 * @email 1660420659@qq.com
 * @description: TODO
 */
@Component
public class Test1 {
    @Autowired
    private DictMapper dictMapper;
    public void test() {
        System.out.println(dictMapper.selectList(null));
    }
}

Test2

自动注入DictMapper

package com.sofwin.yygh;
import com.sofwin.yygh.mapper.DictMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * @packageName: com.sofwin.yygh
 * @author: wentao
 * @date: 2022/12/21 10:56
 * @version: 1.0
 * @email 1660420659@qq.com
 * @description: TODO
 */
@Component
public class Test2 {
    @Autowired
    private DictMapper dictMapper;
    public void test() {
        System.out.println(dictMapper.selectList(null));
    }
}

测试类

package com.sofwin.yygh;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * @packageName: com.sofwin.yygh
 * @author: wentao
 * @date: 2022/12/21 10:57
 * @version: 1.0
 * @email 1660420659@qq.com
 * @description: TODO
 */
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class MapperTest {
    @Test
    public void test() {
        //使用new的话 dictMapper是为空的
        Test1 test1 = new Test1();
        test1.test();
    }
    @Autowired
    private Test2 test2;
    @Test
    public void test2() {
        //使用自动注入的话 dictMapper不为空
        test2.test();
    }
}

结果

第一个test失败  空指针异常

第二个test成功  

3、总结 

原因:

第一个test使用new创建的Test1,不是使用spring容器中给创建的Test,

因此没有自动注入DictMapper,所以出现空指针异常

所以:当类中有自动注入的属性的时候,不要使用new创建对象,要使用自动注入的方式,才不会出现mapper为空的情况

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java获取和设置系统变量问题(环境变量)

    java获取和设置系统变量问题(环境变量)

    这篇文章主要介绍了java获取和设置系统变量问题(环境变量),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • RestTemplate报错I/O error on POST request for的解决办法

    RestTemplate报错I/O error on POST request for的解决办法

    这篇文章主要给大家介绍了关于RestTemplate报错I/O error on POST request for的解决办法,文中通过代码实例将解决的办法介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Java实战之在线寄查快递系统的实现

    Java实战之在线寄查快递系统的实现

    这篇文章主要介绍了如何利用Java制作一个在线寄查快递系统,文中采用的技术有java、SpringBoot、FreeMarker、Mysql,需要的可以参考一下
    2022-02-02
  • Spring 依赖注入和循环依赖的实例解析

    Spring 依赖注入和循环依赖的实例解析

    依赖注入的主要目的是降低类之间的耦合度,使得代码更加灵活、可维护和可测试,这篇文章主要介绍了Spring 依赖注入和循环依赖的相关知识,需要的朋友可以参考下
    2023-09-09
  • Java使用线程实现异步运行的方法

    Java使用线程实现异步运行的方法

    在Java中,实现异步运行的一个常用方式是使用Thread类,这篇文章主要介绍了Java使用线程实现异步运行,需要的朋友可以参考下
    2024-07-07
  • SpringMVC用XML方式实现AOP的方法示例

    SpringMVC用XML方式实现AOP的方法示例

    这篇文章主要介绍了SpringMVC用XML方式实现AOP的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Java控制台实现猜拳游戏

    Java控制台实现猜拳游戏

    这篇文章主要为大家详细介绍了Java控制台实现猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • mybatis collection关联查询多个参数方式

    mybatis collection关联查询多个参数方式

    在使用MyBatis进行关联查询时,往往需要根据多个参数进行查询,例如,使用evtId和businessType作为查询条件,同时在resultMap中配置id和businessType1作为结果映射,这种情况下,可以通过<sql>标签定义参数模板,或者使用@Param注解指定参数名称
    2024-10-10
  • SpringBoot3整合Druid监控功能的项目实践

    SpringBoot3整合Druid监控功能的项目实践

    Druid连接池作为一款强大的数据库连接池,提供了丰富的监控和管理功能,成为很多Java项目的首选,本文主要介绍了SpringBoot3整合Druid监控功能的项目实践,感兴趣的可以了解一下
    2024-01-01
  • Spring中的@ComponentScan注解详解

    Spring中的@ComponentScan注解详解

    这篇文章主要介绍了Spring中的@ComponentScan注解详解,ComponentScan做的事情就是告诉Spring从哪里找到bean,由你来定义哪些包需要被扫描,一旦你指定了,Spring将会在被指定的包及其下级包中寻找bean,需要的朋友可以参考下
    2024-01-01

最新评论