Mybatis框架解读-BaseMapper接口

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.baomidou.mybatisplus.core.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;

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<?> 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;
        }
    }

    default boolean exists(Wrapper<T> queryWrapper) {
        Long count = this.selectCount(queryWrapper);
        return null != count && count > 0L;
    }

    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);
}

这是 MyBatis-Plus 框架中的 `BaseMapper` 接口,它定义了一系列数据库操作的方法,这些方法通常用于数据访问对象(DAO)中。以下是这些方法的注释和简要说明:

1. `int insert(T entity)`:
   - 插入一条记录。
   
2. `int deleteById(Serializable id)`:
   - 根据主键 ID 删除一条记录。

3. `int deleteById(T entity)`:
   - 根据主键 ID 删除一条记录。
   
4. `int deleteByMap(@Param("cm") Map<String, Object> columnMap)`:
   - 根据列条件删除记录。

5. `int delete(@Param("ew") Wrapper<T> queryWrapper)`:
   - 根据条件删除记录。

6. `int deleteBatchIds(@Param("coll") Collection<?> idList)`:
   - 根据一批主键 ID 批量删除记录。

7. `int updateById(@Param("et") T entity)`:
   - 根据主键 ID 更新一条记录的数据。

8. `int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper)`:
   - 根据条件更新记录的数据。

9. `T selectById(Serializable id)`:
   - 根据主键 ID 查询一条记录。

10. `List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList)`:
    - 根据一批主键 ID 批量查询记录。

11. `List<T> selectByMap(@Param("cm") Map<String, Object> columnMap)`:
    - 根据列条件查询记录。

12. `T selectOne(@Param("ew") Wrapper<T> queryWrapper)`:
    - 根据条件查询一条记录。如果查询结果不唯一,则抛出异常。

13. `boolean exists(Wrapper<T> queryWrapper)`:
    - 检查是否存在符合条件的记录。

14. `Long selectCount(@Param("ew") Wrapper<T> queryWrapper)`:
    - 根据条件统计记录数。

15. `List<T> selectList(@Param("ew") Wrapper<T> queryWrapper)`:
    - 根据条件查询记录列表。

16. `List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper)`:
    - 根据条件查询记录列表,并返回 Map 形式的结果。

17. `List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper)`:
    - 根据条件查询记录列表,并返回 Object 形式的结果。

18. `<P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper)`:
    - 根据条件进行分页查询,并返回分页结果。

19. `<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper)`:
    - 根据条件进行分页查询,返回 Map 形式的分页结果。

这些方法提供了对数据库的常见操作,通过继承 `BaseMapper` 接口,您可以快速构建数据访问对象(DAO),并使用 MyBatis-Plus 框架来处理数据访问,无需编写原始的 SQL 语句。这些方法的注释通常比较清晰,描述了它们的作用和用法。根据实际需求,您可以选择适合的方法来执行数据库操作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Mybatis-Plus继承BaseMapper是指Mybatis-Plus框架中的Mapper接口可以继承BaseMapper接口,从而获得一些基本的CRUD方法,如insert、update、delete、select等。这样可以减少开发人员的重复劳动,提高开发效率。同时,Mybatis-Plus还提供了一些高级功能,如分页、逻辑删除、乐观锁等,可以进一步简化开发流程。 ### 回答2: MyBatis-Plus是一款优秀的MyBatis增强工具,提供了丰富的便于开发的API和增强功能,方便我们快速完成MyBatis的CRUD操作。MyBatis-Plus中的BaseMapper是一个MyBatis中常用的Mapper接口,提供了一系列基础的CRUD方法,如:selectById(), selectBatchIds(), selectOne(), selectList(), insert(), insertBatch(), updateById(), deleteById(), deleteBatchIds()等。 在基于MyBatis-Plus进行开发时,我们可以直接继承BaseMapper接口,然后通过@Repository注解将其注入到Service层中,实现一些基础的数据库操作。当需要自定义SQL操作时,我们只需在自定义的Mapper接口中继承BaseMapper接口即可。这样既可以简化代码,又可以减少重复工作,提高开发效率。 BaseMapper的继承使用非常简单,只需要在自定义的Mapper接口上加上一个注解@Mapper(或者@Repository),然后继承BaseMapper即可。例如: ```java @Mapper @Repository public interface UserMapper extends BaseMapper<User> { // 自定义SQL语句 } ``` 在自定义的Mapper接口中可以添加自己的SQL操作方法,BaseMapper接口中的方法也可以进行重写,但一般不建议这样做。实际开发中,我们可以通过BaseMapper提供的方法快速实现基础的CRUD操作,然后再根据业务需求逐步完善自己的Mapper接口。 总之,继承BaseMapperMyBatis-Plus优化数据库操作和减少代码冗余的好方法。将通用的CRUD操作统一处理后,我们可以更关注业务逻辑的实现,提高开发效率和代码质量。 ### 回答3: MyBatis-Plus提供了一个BaseMapper类,它已经实现了基本的CRUD操作方法,我们可以通过继承BaseMapper来进行更方便的开发。 继承BaseMapper主要有以下优点: 1. 代码复用性高:BaseMapper中已经实现了基本的CRUD操作方法,我们可以直接继承BaseMapper来使用这些方法,而不用再次编写相同的代码。 2. 提高开发效率:由于BaseMapper已经实现了基本的CRUD操作方法,我们只需要关注业务逻辑的实现,不用再花费时间编写基础的CRUD操作。 3. 易于维护:继承BaseMapper后,我们可以使用通用的CRUD操作方法来操作数据库,这使得我们的代码更加简洁、易于维护。 使用BaseMapper的步骤如下: 1. 定义实体类并添加注解 ```java @Data public class User implements Serializable { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; } ``` 2. 创建Mapper接口并继承BaseMapper<T> ```java @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 3. 使用Mapper接口 使用Mapper接口进行CRUD操作: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> listUsers() { return userMapper.selectList(null); } @Override public User getUserById(Long id) { return userMapper.selectById(id); } @Transactional @Override public boolean addUser(User user) { return userMapper.insert(user) > 0; } @Transactional @Override public boolean updateUser(User user) { return userMapper.updateById(user) > 0; } @Transactional @Override public boolean deleteUserById(Long id) { return userMapper.deleteById(id) > 0; } } ``` 继承BaseMapper可以让我们的开发更加高效,同时也可以让代码更加简洁易读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕昀hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值