Springboot 中@Autowired注入失败

DepartmentMapper.java

public interface DepartmentMapper {
    int deleteByPrimaryKey(Integer deptno);

    int insert(Department record);

    Department selectByPrimaryKey(Integer deptno);

    List<Department> selectAllDepartment();

    int updateByPrimaryKey(Department record);
}

DepartmentMapperImpl.java

package com.loey.mapper;

import com.loey.model.Department;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.*;

/**
 * @ClassName DepartmentMapperImpl
 * @Author loey
 * @Date Create in 2021/1/1 21:44
 * @Version 1.0
 **/
@Repository
public class DepartmentMapperImpl implements DepartmentMapper {


    private static Map<Integer,Department> map = null;

    static{

        map = new HashMap<Integer,Department>();

        map.put(10,new Department(10,"人事部","北京"));
        map.put(20,new Department(20,"财务部","北京"));
        map.put(30,new Department(30,"后勤部","北京"));

    }

    @Override
    public int deleteByPrimaryKey(Integer deptno) {

        map.remove(deptno);
        return 0;
    }

    @Override
    public int insert(Department record) {
        Integer deptno = record.getDeptno();

        map.put(deptno,record);
        return 0;
    }


    @Override
    public Department selectByPrimaryKey(Integer deptno) {

        Department department = map.get(deptno);

        return department;
    }

    @Override
    public List<Department> selectAllDepartment() {

        List<Department> departments = (List<Department>) map.values();
        return departments;
    }


    @Override
    public int updateByPrimaryKey(Department record) {

        Integer deptno = record.getDeptno();
        map.put(deptno,record);
        return 0;
    }
}

EmployeeMapper.java

package com.loey.mapper;

import com.loey.model.Employee;

import java.util.List;


public interface EmployeeMapper {
    int deleteByPrimaryKey(Integer empno);

    int insert(Employee record);

    Employee selectByPrimaryKey(Integer empno);

    List<Employee> selectAllEmployees();

    int updateByPrimaryKey(Employee record);
}

EmployeeMapperImpl.java

package com.loey.mapper;

import com.loey.model.Department;
import com.loey.model.Employee;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;


import javax.annotation.PostConstruct;
import java.util.*;

/**
 * @ClassName EmployeeMapperImpl
 * @Author loey
 * @Date Create in 2021/1/1 18:50
 * @Version 1.0
 **/

@Repository
public class EmployeeMapperImpl implements EmployeeMapper {

//    @Autowired不能给静态变量注入
    private static DepartmentMapper departmentMapper;

    @Autowired
    private DepartmentMapper myDepartmentMapper;

    @PostConstruct
    public void init(){
        departmentMapper = this.myDepartmentMapper;
        System.out.println(departmentMapper);
    }

    //模拟数据库中的数据
    private static Map<Integer,Employee> employees = null;

    static {
        employees = new HashMap<Integer,Employee>();//创建一个员工表

        employees.put(1,new Employee(1,"zhangsan","sing",2,new Date(2001,10,8),100000.0,10.0,10,departmentMapper.selectByPrimaryKey(10)));
        employees.put(2,new Employee(2,"lisi","dance",3,new Date(2002,10,8),10000.0,5.0,30,departmentMapper.selectByPrimaryKey(30)));
        employees.put(3,new Employee(3,"wangwu","sing",null,new Date(2003,10,8),200000.0,10.0,20,departmentMapper.selectByPrimaryKey(20)));
    }


    //主键自增
    private static Integer initId = 3;

    @Override
    public int deleteByPrimaryKey(Integer empno) {

        employees.remove(empno);

        return 0;
    }

    @Override
    public int insert(Employee record) {

        initId++;

        Integer deptno = record.getDeptno();

        Department department = departmentMapper.selectByPrimaryKey(deptno);

        record.setDepartment(department);

        record.setEmpno(initId);

        employees.put(initId,record);

        return 0;
    }


    @Override
    public Employee selectByPrimaryKey(Integer empno) {

        Employee employee = employees.get(empno);
        System.out.println(employee);
        return employee;
    }

    @Override
    public List<Employee> selectAllEmployees() {

        List<Employee> Allemployees = (List<Employee>) EmployeeMapperImpl.employees.values();

        return Allemployees;
    }

    @Override
    public int updateByPrimaryKey(Employee record) {

        Integer empno = record.getEmpno();

        employees.put(empno,record);
        return 0;
    }
}

这是我的代码,运行时报空指针异常。bean注入不成功

那你就@Resource按名称注入

mybatis的*mapper接口并不需要类去实现吧,*mapper接口的实现类其实是对应的*mapper.xml文件。

我没有连接数据库,直接是模拟的数据库,所以没有*mapper.xml文件

 

换@Resource也不行

你这个dao层互相调用,一般好像不这样使用,弄个sevice层调用dao层试试。

我写了service层,也没用

我的意思是把Mapper实现类的*mapper属性干掉,把dao层互相调用的部分全部抽到service层,mapper实现类里边不要去声明或注入别的mapper接口,@Repository换成@Component吧,反正只是模拟dao层