Skip to content

Mybatis Plus CRUD 接口

TIP

MyBatis-Plus 提供了丰富的 CRUD 方法,无需编写 XML 即可完成大部分数据库操作。

Mapper 层 CRUD

java
public interface UserMapper extends BaseMapper<User> {
    // 已继承以下方法
}

// 增
int insert(T entity);

// 删
int deleteById(Serializable id);
int deleteByMap(Map<String, Object> columnMap);
int delete(Wrapper<T> wrapper);
int deleteBatchIds(Collection<? extends Serializable> idList);

// 改
int updateById(T entity);
int update(T entity, Wrapper<T> updateWrapper);

// 查
T selectById(Serializable id);
List<T> selectBatchIds(Collection<? extends Serializable> idList);
List<T> selectByMap(Map<String, Object> columnMap);
T selectOne(Wrapper<T> queryWrapper);
List<T> selectList(Wrapper<T> queryWrapper);
Page<T> selectPage(Page<T> page, Wrapper<T> queryWrapper);
long selectCount(Wrapper<T> queryWrapper);

Service 层 CRUD

借助 IService 和 ServiceImpl 实现:

java
public interface UserService extends IService<User> {
    // 继承通用 Service 方法
}

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
        implements UserService {
    // 继承的方法可覆盖或补充
}

// 使用通用 Service
@Service
public class OrderService {
    @Autowired
    private UserService userService;

    public void businessMethod() {
        // 批量操作
        List<User> users = userService.list();

        // 链式查询
        User user = userService.lambdaQuery()
            .eq(User::getName, "张三")
            .ge(User::getAge, 18)
            .one();

        // 链式更新
        userService.lambdaUpdate()
            .eq(User::getId, 1L)
            .set(User::getAge, 30)
            .update();

        // 分页查询
        Page<User> page = userService.page(
            new Page<>(1, 10),
            Wrappers.lambdaQuery(User.class)
                .orderByDesc(User::getCreateTime)
        );
    }
}

常用查询示例

java
// 1. 根据 ID 查询
User user = userMapper.selectById(1L);

// 2. 根据名称查询
User user = userMapper.selectOne(
    new QueryWrapper<User>().eq("name", "张三")
);

// 3. 模糊查询
List<User> users = userMapper.selectList(
    new QueryWrapper<User>()
        .like("name", "张")
        .between("age", 18, 30)
        .orderByDesc("create_time")
);