为什么要在service层加上@ mapper注解
时间: 2023-03-25 12:00:27 浏览: 167
在service层加上@ mapper注解是为了将该service类与对应的mapper接口绑定起来,使得在service层中可以直接调用mapper接口中定义的方法,从而方便地进行数据库操作。同时,@ mapper注解也可以让Spring容器自动扫描并注入mapper接口的实现类,避免手动创建mapper实例的繁琐操作。
相关问题
Springboot下的service层调用mapper报错找不到bean
如果在Springboot下的service层调用mapper报错找不到bean,可能是以下原因导致的:
1. 没有在mapper接口上加上@Mapper注解:在mapper接口上加上@Mapper注解,表示该接口是一个Mapper接口,需要被Spring容器管理。
2. 没有在启动类上加上@MapperScan注解:在启动类上加上@MapperScan注解,表示需要扫描Mapper接口所在的包,将其注入到Spring容器中。
3. mapper接口所在的包没有被扫描到:在启动类上加上@MapperScan注解时,需要将mapper接口所在的包路径传入注解中,如果没有传入,则默认扫描启动类所在的包及其子包。
4. mapper接口命名不规范:在使用Mapper接口时,需要注意命名规范,例如接口名以Mapper结尾,方法名与SQL语句的ID一致等。
5. service层没有加上@Service注解:在service层中,需要加上@Service注解,表示该类是一个Service类,需要被Spring容器管理。
6. service层没有注入mapper接口:在service层中,需要注入mapper接口才能调用其方法,使用@Autowired注解将mapper接口注入到service层中。
service层加了@Autowire还报空指针
在SpringMVC框架中,我们通常使用@Autowired注解来注入Service或Mapper接口。在controller层中注入service接口,在service层中注入其他的service接口或mapper接口是可以的。然而,在我们自定义的非controller或service类中直接使用@Autowired注解进行注入是不可能的,会导致空指针异常。
解决这个问题的方法是,我们可以使用下面的方式来实现注入。首先,在我们自定义的类中声明一个@Autowired注解的成员变量,然后通过构造方法或setter方法来对该成员变量进行赋值。这样,在使用该类时,Spring会自动将依赖的实例注入进来,避免了空指针异常的发生。具体实现步骤和相关使用技巧可以参考Spring实战之@Autowire注解的文章。
举个例子,假设我们有一个非controller或service类叫做UserInfoService,在该类中需要注入一个IUserInfoService接口的实例。我们可以在UserInfoService类中声明如下成员变量并加上@Autowired注解:
@Autowired
private IUserInfoService userInfoService;
然后,在UserInfoService类的构造方法或setter方法中对该成员变量进行赋值:
public UserInfoService(IUserInfoService userInfoService) {
this.userInfoService = userInfoService;
}
或者
@Autowired
public void setUserInfoService(IUserInfoService userInfoService) {
this.userInfoService = userInfoService;
}
这样,在使用UserInfoService类时,IUserInfoService接口的实例就会被自动注入进来,避免了空指针异常的发生。如果你仍然遇到service层加了@Autowire注解后报空指针异常的问题,请检查是否正确声明了@Autowired注解的成员变量并是否正确进行了赋值。如果仍然无法解决问题,可以参考引用中的解决办法,可能会帮助你解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文