MybatisPlus之BaseMapper和IService
一.BaseMapper
1. BaseMapper简介
BaseMapper 接口的全限定名称为:com.baomidou.mybatisplus.core.mapper.BaseMapper
该接口提供了插入、修改、删除和查询接口.
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);
int deleteById(Serializable id);
int deleteById(T entity);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> queryWrapper);
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectById(Serializable id);
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
default T selectOne(@Param("ew") Wrapper<T> queryWrapper) {
List<T> ts = this.selectList(queryWrapper);
if (CollectionUtils.isNotEmpty(ts)) {
if (ts.size() != 1) {
throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records", new Object[0]);
} else {
return ts.get(0);
}
} else {
return null;
}
}
Long selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
<P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);
<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
}
从BaseMapper接口可以看到,里面包含了诸多的增删改查的方法,包括分页和部分批量操作接口,基本能满足我们日常开的的需要。但是细心看一下就会发现关于批量操作的接口并不多,像批量插入和批量更新就没有,像这样的业务BaseMappe就不满足了。
2. BaseMapper使用
BaseMapper的使用很简单,我们只需要创建一个xxx.Mapper接口,然后继承BaseMapper接口并且指定他的泛型就可以了。
@Repository
public interface UserMapper extends BaseMapper<UserInfo> {
}
然后通过@Autowired注入到我们的业务类中就可以了
@Service
public class UserServiceImpl{
@Autowired
UserMapper userMapper;
public UserInfo queryUserById(String id){
return userMapper.selectById(id);
}
}
二. IService
1. Iservice简介
MyBatis-Plus除了通用的Mapper还是通用的Servcie层,这也减少了相对应的代码工作量,把通用的接口提取到公共。其实按照MyBatis-Plus的这种思想,可以自己也实现一些通用的Controller。
IService里面的方法特别多,几乎能满足我们日常中的所有增删改查需求,包括批量操作等一系列方法,感兴趣的话可以进到接口里面详细看一下。
public interface IService<T> {
......
2. Iservice的使用
service层需要继承IService,当然实现层也要继承对应的实现类。
public interface UserService extends IService<UserInfo> {
}
IService 的默认实现类为ServiceImpl.java,这里需要注意的是ServiceImpl中要依赖BassMapper的子类(UserMapper)
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,UserInfo> implements UserService {
}
使用的时候我们注入实现类就可以了
@RestController
public class UserInfoController {
@Autowired
UserServiceImpl userServiceImpl;
public void userFun(){
List<UserInfo> userInfos = new ArrayList<>();
// 下面这两个批量操作的方法是BaseMapper中没有的
userServiceImpl.saveBatch(userInfos);
userServiceImpl.updateBatchById(userInfos);
}
}