wzhuwzhu 2018-11-05 03:54 采纳率: 0%
浏览 2764

MyBatis自己写的Function调用Mapper,如何在Controller调用Function?

下面是FunctionImpl代码,末尾写了main方法测试,可以连接操作数据库,Interface Function也可以。但是用Controller调用就显示空指针异常。是不是因为FunctionImpl中创建sqlSession的命令没有执行,出现空指针?该怎么写能在Controller调用Function方法前先执行sqlSession实例化?谢谢了!

@Service
public class StaffManagementFunctionImpl implements StaffManagementFunction{
    @Autowired
    SqlSession session = MyBatisUtil.getSession();
    StaffManagementMapper smMapper = session.getMapper(StaffManagementMapper.class);

    @Override
    public  StaffManagement findStaffByName(String name){
        name=AssertThrowUtil.assertStringNotBlank("Name cannot be blank!",name);

        StaffManagement staff=smMapper.selectByUniqueField("name", name); 
        if(staff != null){
            return staff;
        }
        throw new ThisSystemException("Cannot find this staff[\"+name+\"].");
    };

    @Override
    public  StaffManagement findStaffById(int id){
        StaffManagement staff=smMapper.selectByUniqueField("id", id); 
        if(staff != null){
            return staff;
        }
        throw new ThisSystemException("Cannot find this staff["+id+"].");
    };

    @Override
    public  StaffManagement addStaff(StaffManagementArgumentObject staffManagementArgumentObject) throws Exception{

                if(staffManagementArgumentObject==null){
                    throw new IllegalArgumentException("argumentObjec娑撳秷鍏樻稉铏光敄");
                }

                String name=AssertThrowUtil.assertStringNotBlank("Name cannot be blank!",staffManagementArgumentObject.getName());

                AssertThrowUtil.assertFalse("Staff already exists!",smMapper.exists("name",name));

                Date yearOfGraduation = AssertThrowUtil.assertDatePatternAndParse("Illegal input!","\\d{4}",staffManagementArgumentObject.getYearOfGraduation(),new String[]{"yyyy"});
                Date enrolledSince = AssertThrowUtil.assertDatePatternAndParse("Illegal input!","\\d{4}",staffManagementArgumentObject.getEnrolledSince(),new String[]{"yyyy"});
                Date yearOfBirth = AssertThrowUtil.assertDatePatternAndParse("Illegal input!","\\d{8}",staffManagementArgumentObject.getEnrolledSince(),new String[]{"yyyymmdd"});

                StaffManagement staff=new StaffManagement();

                boolean gender="1".equals(staffManagementArgumentObject.getGender());

                staff.setName(name);
                staff.setGender(gender);
                staff.setDepartment(staffManagementArgumentObject.getDepartment());
                staff.setPosition(staffManagementArgumentObject.getPosition());
                staff.setPermission(staffManagementArgumentObject.getPermission());
                staff.setTechnicalTitle(staffManagementArgumentObject.getTechnicalTitle());
                staff.setDegree(staffManagementArgumentObject.getDegree());
                staff.setGraduatedFrom(staffManagementArgumentObject.getGraduatedFrom());
                staff.setMajor(staffManagementArgumentObject.getMajor());
                staff.setYearOfGraduation(yearOfGraduation);
                staff.setEnrolledSince(enrolledSince);
                staff.setPhoneNo(staffManagementArgumentObject.getPhoneNo());
                staff.setHometown(staffManagementArgumentObject.getHometown());
                staff.setYearOfBirth(yearOfBirth);
                staff.setRemark(staffManagementArgumentObject.getRemark());

                smMapper.insertSelective(staff);
                return staff;
    }


    @Override
    public  StaffManagement updateStaff(StaffManagementArgumentObject staffManagementArgumentObject) throws Exception{

                if(staffManagementArgumentObject==null){
                    throw new IllegalArgumentException("argumentObjec娑撳秷鍏樻稉铏光敄");
                }

                String name = staffManagementArgumentObject.getName();
                AssertThrowUtil.assertTrue("Staff doesn't exist!",smMapper.exists("name",name));

                Date yearOfGraduation = AssertThrowUtil.assertDatePatternAndParse("Illegal input!","\\d{4}",staffManagementArgumentObject.getYearOfGraduation(),new String[]{"yyyy"});
                Date enrolledSince = AssertThrowUtil.assertDatePatternAndParse("Illegal input!","\\d{4}",staffManagementArgumentObject.getEnrolledSince(),new String[]{"yyyy"});
                Date yearOfBirth = AssertThrowUtil.assertDatePatternAndParse("Illegal input!","\\d{8}",staffManagementArgumentObject.getEnrolledSince(),new String[]{"yyyymmdd"});

                StaffManagement staff=new StaffManagement();

                boolean gender="1".equals(staffManagementArgumentObject.getGender());

                staff.setName(name);
                staff.setGender(gender);
                staff.setDepartment(staffManagementArgumentObject.getDepartment());
                staff.setGraduatedFrom(staffManagementArgumentObject.getGraduatedFrom());
                staff.setMajor(staffManagementArgumentObject.getMajor());
                staff.setYearOfGraduation(yearOfGraduation);

                smMapper.updateByPrimaryKeySelective(staff);
                return staff;
    }

    @Override
    public List<StaffManagement> findAllStaff(){
        List<StaffManagement> staff = smMapper.selectAll();
        return staff;
    }

    @Override
    public void deleteById(int id) {
        smMapper.deleteByPrimaryKey(id);
    }

    //Test 
    public static void main(String[] args) throws Exception {
        StaffManagementFunctionImpl function = new StaffManagementFunctionImpl();
        List staffList =  function.findAllStaff();
        System.out.println("StaffManagementFunctionImpl.findAllStaff() succeed!"+staffList);
        }
}

下面是Controller的代码:

 public class StaffManagementController {
    @Autowired 
    private StaffManagementFunction function;
    public StaffManagementController(StaffManagementFunction function) {
        this.function = function;
    }

    @GetMapping("/staffs")
    List<StaffManagement> staffs() {
        return function.findAllStaff();
    }


实例化Function后用function运行Controller中的staffs()方法返回空指针异常

  • 写回答

1条回答 默认 最新

  • wzhuwzhu 2018-11-06 08:37
    关注

    后来发现是因为StaffManagementFunction没有初始化,导致空指针异常。在FunctionImpl里写了构造函数后在Controller里实例化就好了。可是Function是interface,不能写构造函数,只能用FunctionImpl创建对象。不知道有没有其他解决办法

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器