MybatisPlus之listObjs来自于IService接口

该方法用于取出通过MybatisPlus查询到的数据并放入List中,其中取出的数据并不包括对象所有的字段,最多只能返回一个字段。

源码如下:

default <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {
return (List)this.getBaseMapper().selectObjs(queryWrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
}

对于Function入参,其中通过实现apply接口,进行类型转换,其中Object类型的参数是我们实体类中使用Mp的@TableId注解标注的属性。

如果没有标注注解,则根据属性名对应数据库表的字段进行匹配查找(参数一般都是主键id,除非你使用@TableId注解标注了其他字段)。

第一种情况,查询主键。此时会将查询到的所有主键id放入list中。 

第二种情况,select *。默认查询数据库的主键,查询结果为主键(id),并将其放入list中。

第三种情况,查询非主键的其他字段,将查询字段放入list中。

第四种情况,查询多个字段,默认查询传入的第一个字段,并将第一个字段的查询结果放入list中。
案例:goodsService继承Mybatis Plus的IService接口,Goods::getId字段类型为Long,listObjs默认把Long转成BigInteger

List<Integer> integerList = goodsService.listObjs(Wrappers<Goods>lambdaQuery().select(Goods::getId).eq(Goods::getDelFlag, 0),s -> Integer.valueOf(s.toString()));
//方法一:
List<Long> longList = goodsService.listObjs(Wrappers.<Goods>lambdaQuery().select(Goods::getId).eq(Goods::getDelFlag, 0),s -> Long.parseLong(s.toString()));
//方法二:
List<Object> objectList = goodsService.listObjs(Wrappers.<Goods>lambdaQuery().select(Goods::getId).eq(Goods::getDelFlag, 0));
//默认是BigInteger,需要先转成String,再转成Long
List<String> stringList =objectList.stream().map(String::valueOf).collect(Collectors.toList());
List<Long> longList2 = stringList.stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
### MyBatisPlus 中 `IService` 接口的使用说明 #### 1. `IService` 接口概述 `IService` 是 MyBatis-Plus 提供的一个通用服务接口,旨在简化 CRUD 操作。通过继承该接口并实现相应的业务逻辑,可以快速构建高效的服务层[^4]。 #### 2. 定义 Service 接口 为了创建一个基于 `IService` 的自定义服务接口,通常会扩展 `IService<T>` 泛型接口,其中 T 表示实体类类型: ```java public interface UserService extends IService<UserEntity> { } ``` 这段代码声明了一个名为 `UserService` 的接口,并指定了它处理的是 `UserEntity` 实体对象[^2]。 #### 3. 创建 Service 实现类 接下来需要编写具体的实现类来完成实际的数据访问操作。这里可以通过继承 `ServiceImpl<Mapper, Entity>` 来自动获得基本功能的支持: ```java @Slf4j @Service public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements UserService { } ``` 上述代码片段展示了如何利用 Lombok 注解 (`@Slf4j`) 和 Spring Bean 注入 (`@Service`) 构建一个实现了 `UserService` 接口的具体实例 `UserServiceImpl`。 #### 4. 使用 `IService` 执行查询操作 一旦完成了上面两步配置工作之后就可以像下面这样轻松地执行各种数据库交互命令了: ```java @Autowired private UserService userService; @Test void testGetById() { // 调用 IService 提供的方法获取 ID=5 的记录 User user = userService.getById(5); System.out.println(user); } ``` 此测试方法演示了怎样借助于注入好的 `userService` 对象调用其内置的 `getById()` 方法来进行单条数据检索[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值