Mybatis-Plus不仅提供了BaseMapper,还提供了通用的Service接口及默认实现,封装了一些常用的service模板方法。 通用接口为IService,默认实现为ServiceImpl。
基本的增删改查
常用的操作有下面的这些。
新增

save是新增单个元素saveBatch是批量新增saveOrUpdate是根据id判断,如果数据存在就更新,不存在则新增saveOrUpdateBatch是批量的新增或修改
修改

updateById:根据id修改update(Wrapper<T>):根据UpdateWrapper修改,Wrapper中包含set和where部分update(T,Wrapper<T>):按照T内的数据修改与Wrapper匹配到的数据updateBatchById:根据id批量修改
删除

removeById:根据id删除removeByIds:根据id批量删除removeByMap:根据Map中的键值对条件删除remove(Wrapper<T>):根据Wrapper条件删除
查询get

getById:根据id查询1条数据getOne(Wrapper<T>):根据Wrapper查询1条数据getBaseMapper:获取Service内的BaseMapper实现,某些时候需要直接调用Mapper内的自定义SQL时可以用这个方法获取到Mapper
列表List

listByIds:根据id批量查询list(Wrapper<T>):根据Wrapper条件查询多条数据list():查询所有
计数count

count():统计所有数量count(Wrapper<T>):统计符合Wrapper条件的数据数量
使用步骤
这里以role角色板块为例。
RoleMapper
java
package com.cghbh.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cghbh.entity.Role;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface RoleMapper extends BaseMapper<Role> {
}RoleService
找到RoleService接口,让它继承IService接口,并在泛型上指定实体类的类型:
java
package com.cghbh.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cghbh.common.PageResult;
import com.cghbh.dto.RolePageDto;
import com.cghbh.entity.Role;
// 这里需要继承IService,并且指定实体类的类型
public interface RoleService extends IService<Role> {
}RoleServiceImpl
继承IService的实现类ServiceImpl,指定RoleMapper和对应的实体类User,并且实现我们自定义的RoleService接口,这样我们既可以使用IService提供的方法,也可以在RoleService定义方法从而在RoleServiceImpl中实现之后使用。
java
package com.cghbh.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cghbh.common.PageResult;
import com.cghbh.dto.RolePageDto;
import com.cghbh.entity.Role;
import com.cghbh.entity.User;
import com.cghbh.exception.BusinessException;
import com.cghbh.mapper.RoleMapper;
import com.cghbh.mapper.UserMapper;
import com.cghbh.service.RoleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@RequiredArgsConstructor
@Slf4j
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
}Controller中使用
java
package com.cghbh.controller;
import com.cghbh.common.PageResult;
import com.cghbh.common.Result;
import com.cghbh.dto.RolePageDto;
import com.cghbh.entity.Role;
import com.cghbh.service.RoleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RequestMapping("/roles")
@RestController
@RequiredArgsConstructor
public class RoleController {
private final RoleService roleService;
/**
* 根据ID查询角色
*
* @param id
* @return
*/
@GetMapping("/{id}")
public Result findById(@PathVariable("id") Integer roleId) {
Role role = roleService.getById(roleId);
return role == null ? Result.error("角色信息不存在") : Result.success(role);
}
/**
* 新增角色
*
* @param role
* @return
*/
@PostMapping
public Result addRole(@RequestBody Role role) {
role.setUpdateTime(LocalDateTime.now());
role.setCreateTime(LocalDateTime.now());
boolean save = roleService.save(role);
return save ? Result.success() : Result.error("添加失败,请重试");
}
/**
* 根据id删除角色
*
* @param id
* @return
*/
@DeleteMapping("/{id}")
public Result deleteById(@PathVariable Integer id) {
boolean result = roleService.removeById(id);
return result ? Result.success() : Result.error("数据不存在,删除失败");
}
/**
* 获取全部的角色
*
* @return 角色列表
*/
@GetMapping("/list")
public Result findAll() {
List<Role> roleList = roleService.list();
return Result.success(roleList);
}
}使用总结
- 如果我们使用了MybatisPlus中提供的IService接口,那么对于一些简单的增删改查操作,我们就可以直接使用IService接口中提供的方法就可以了,就无需在我们自己的Service接口及实现类中定义对应的业务方法了。
- 而对于一些业务相对复杂一点的功能,我们还是建议,要将业务代码定义在自己编写Service层的接口及实现类中。比如上述的分页查询操作。