mybatis plus 3.3.0中如何怎么实例化 IService<T>中的BaseMapper
时间: 2024-02-11 13:04:26 浏览: 188
mybatis-plus批处理IService的实现示例
在 Mybatis Plus 3.3.0 中,IService<T> 接口中的 getBaseMapper() 方法返回的是 BaseMapper<T> 接口的实例,而 BaseMapper<T> 接口是一个标记接口,其中并没有定义任何方法。因此,不能直接实例化 BaseMapper<T> 接口。
如果你想要实例化 BaseMapper<T> 接口,可以先定义一个继承了 BaseMapper<T> 接口的 Mapper 接口,然后通过 MapperFactoryBean 来动态生成该 Mapper 接口对应的实现类。
例如,假设有一个 UserMapper 接口,继承了 BaseMapper<User> 接口:
```java
public interface UserMapper extends BaseMapper<User> {
// 自定义方法
}
```
现在,需要动态生成 UserMapper 接口对应的实现类,可以使用如下的代码:
```java
@Bean
public MapperFactoryBean<UserMapper> userMapper(SqlSessionFactory sqlSessionFactory) {
MapperFactoryBean<UserMapper> mapperFactoryBean = new MapperFactoryBean<>(UserMapper.class);
mapperFactoryBean.setSqlSessionFactory(sqlSessionFactory);
return mapperFactoryBean;
}
```
在上述代码中,使用 MapperFactoryBean 来动态生成 UserMapper 接口对应的实现类,其中,MapperFactoryBean 的构造方法需要传入一个 Class 类型的参数,该参数指定了要动态生成的 Mapper 接口类型。在 userMapper() 方法中,将 MapperFactoryBean 的实例化对象的 SqlSessionFactory 属性设置为已经实例化的 SqlSessionFactory 对象,并将该 MapperFactoryBean 实例化对象返回。
此时,就可以在 Service 类中使用 @Autowired 注解注入 UserMapper 实例,并在相应的方法中使用 UserMapper 实例调用 BaseMapper<User> 接口中定义的方法,例如:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Long id) {
return userMapper.selectById(id);
}
@Override
public boolean saveUser(User user) {
return userMapper.insert(user) > 0;
}
// 其他方法
}
```
在上述代码中,使用 @Autowired 注解注入 UserMapper 实例,并在 getUserById() 和 saveUser() 方法中使用 userMapper.selectById() 和 userMapper.insert() 方法操作数据库。由于 UserMapper 接口继承了 BaseMapper<User> 接口,因此可以使用 userMapper 实例调用 BaseMapper<User> 接口中定义的方法。
阅读全文