Service

103 阅读1分钟

Service

通常来说,我们会将具体的业务逻辑封装在 service层中(一般会有个 interface类以及具体的实现)。而 MyBatis-Plus 为我们提供了个 IService 接口,里面封装了通用 Service CRUD 操作。

Service与Mapper 的 CRUD 方法前缀的区别

  1. Mapper 的方法前缀是:select(查询)、insert(插入)、update(更新)、delete(删除)
  2. Service 的方法前缀是:get(查询单行)、list(查询集合)、page(分页查询)、save(插入)、update(更新)、remove(删除)
  3. Service 还提供了一些批量方法(批量插入、批量更新数据),这是 Mapper 没有的。

Service的一些方法

getMap(使用查询构造器,查询一条记录,返回的是 Map)

getMap 的用法和 getOne 很像,都是传入一个查询构造器进行查询。不同的是 getMap 返回的是一个 Map,而不是实体类对象:

注意: Map 里的 key 为表字段名,而不是对应实体类的属性名。

// 查询条件:名字中包含'ha'并且年龄小于40 
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<(); queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40); 
// 开始查询符合的单条记录 
Map<String, Object> user = userInfoService.getMap(queryWrapper); 
//查询结果: 1,二虎,12,男 
//结果{"id":1 ,"name":"二虎","age":12,"sex":男}

getObj(使用查询构造器,查询一条记录,返回这条记录的第一个字段值)

getObj 的用法和上面的 getOne 很像,都是传入一个查询构造器进行查询。不同的是 getObj 返回的是一个字段值(该方法第二个参数是转换函数,必填):

// 查询条件:名字中包含'ha'并且年龄小于40 
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<(); queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40); 
// 开始查询符合的单条记录 
Integer id = userInfoService.getObj(queryWrapper, (o) -> { return Integer.parseInt(o.toString()); 
}); 
//查询结果: 1,二虎,12,男 
//结果 id = 1 如果查其他的 可以使用wrapper.select(列) 选择某一列进行查询