下面是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()方法返回空指针异常