SpringBoot關于自動注入mapper為空的坑及解決
1、初始環(huán)境
配置類
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: 數(shù)據(jù)字典的配置類
*/
@Configuration
//發(fā)現(xiàn)映射器--可以動態(tài)生產mapper的實現(xiàn)類
@MapperScan(basePackages = "com.sofwin.yygh.mapper")
public class CmnConfig {
/**
* 分頁插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// paginationInterceptor.setLimit(你的最大單頁限制數(shù)量,默認 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創(chuàng)建的Test1,不是使用spring容器中給創(chuàng)建的Test,
因此沒有自動注入DictMapper,所以出現(xiàn)空指針異常
所以:當類中有自動注入的屬性的時候,不要使用new創(chuàng)建對象,要使用自動注入的方式,才不會出現(xiàn)mapper為空的情況
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java 重載(overload)與重寫(override)詳解及實例
這篇文章主要介紹了java 重載(overload)與重寫(override)詳解及實例的相關資料,并附實例代碼,需要的朋友可以參考下2016-10-10
java獲取redis日志信息與動態(tài)監(jiān)控信息的方法
這篇文章主要給大家介紹了關于java如何獲取redis日志信息與動態(tài)監(jiān)控信息的方法,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04
Java+swing+Mysql實現(xiàn)商品銷售管理系統(tǒng)
基礎扎不扎實只有在實戰(zhàn)中才能顯現(xiàn),本篇文章手把手帶你用Java+swing+Mysql實現(xiàn)商品銷售管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01
Spring Boot 2.5.0 重新設計的spring.sql.init 配置有啥用
前幾天Spring Boot 2.5.0發(fā)布了,其中提到了關于Datasource初始化機制的調整,有讀者私信想了解這方面做了什么調整。那么今天就要詳細說說這個重新設計的配置內容,并結合實際情況說說我的理解和實踐建議2021-05-05

