MyBatisPlus之CRUD接口(IService与BaseMapper)

MyBatisPlus(MP)的核心优势之一是提供了开箱即用的CRUD接口,通过BaseMapper(DAO层)和IService(Service层)封装了单表操作的常用方法,无需编写SQL即可完成大部分数据库操作。

一、BaseMapper与IService的关系

在MyBatisPlus中,BaseMapperIService是实现CRUD操作的两大核心接口,二者分工明确又相互配合:

  • BaseMapper:位于DAO层,直接与数据库交互,提供基础的CRUD方法(如insertselectById),需由用户自定义的Mapper接口继承。
  • IService:位于Service层,基于BaseMapper封装了更丰富的业务方法(如批量操作、分页查询),并提供事务支持,需由用户自定义的Service接口继承。

调用关系IService的实现类(如ServiceImpl)会注入BaseMapper实例,通过调用BaseMapper的方法完成数据库操作,同时添加业务逻辑和事务控制。

使用建议

  • 简单查询直接使用BaseMapper
  • 复杂业务(如批量操作、事务管理)优先使用IService
  • 自定义SQL通过BaseMapper的方法扩展。

二、BaseMapper核心方法详解

BaseMapper<T>是MP的基础接口,泛型T为实体类类型。所有自定义Mapper接口只需继承它,即可获得17个基础CRUD方法。

2.1 新增操作(Insert)

方法签名 功能描述 示例
int insert(T entity) 插入一条记录 userMapper.insert(user)

说明

  • 插入时会根据实体类的注解(如@TableId)自动处理主键生成;
  • 若字段未设置值,会插入null(除非配置了自动填充);
  • 返回值为受影响的行数(成功插入返回1)。

示例

User user = new User();
user.setUsername("张三");
user.setAge(20);
user.setEmail("zhangsan@example.com");
int rows = userMapper.insert(user); // 插入成功后,user.getId()会自动回填主键
System.out.println("插入行数:" + rows + ",生成ID:" + user.getId());

2.2 查询操作(Select)

BaseMapper提供了7种查询方法,覆盖单条查询、批量查询、条件查询等场景:

方法签名 功能描述 适用场景
T selectById(Serializable id) 根据ID查询 已知主键的单条查询
List<T> selectBatchIds(Collection<?> ids) 批量查询(根据ID集合) 批量获取多条记录
List<T> selectByMap(Map<String, Object> map) 根据Map条件查询 简单条件查询(键为字段名)
T selectOne(@Param("ew") Wrapper<T> queryWrapper) 根据条件查询单条 确保结果唯一的查询(如唯一索引)
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper) 条件查询总数 统计符合条件的记录数
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper) 条件查询列表 复杂条件的多条查询
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper) 条件查询(返回Map) 只需要部分字段,无需实体类

示例1:根据ID查询

User user = userMapper.selectById(1L); // ID为1的用户

示例2:批量查询

List<Long> ids = Arrays.asList(1L, 2L, 3L);
List<User> users = userMapper.selectBatchIds(ids); // 查询ID为1、2、3的用户

示例3:条件查询(使用QueryWrapper)

// 查询年龄≥20且用户名包含"张"的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 20) // 年龄≥20
           .like("username", "张"); // 用户名含"张"
List<User
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值