Skip to content

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层的接口及实现类中。比如上述的分页查询操作。