MyBatis-Plus(九)Service的CRUD接口1:基本查询

Service的CRUD接口1:基本查询

1、准备工作

  1. 假设我们有如下用户信息表 user_info

在这里插入图片描述

  1. 首先创建对应的实体类 UserInfo
@Data
public class UserInfo {
    private Integer id;
    private String userName;
    private String passWord;
    private Integer age;
}
  1. 接着创建 UserInfoMapper 接口,并继承 BaseMapper 接口,就可以使用 Mapper 的各种 CRUD 方法了。
public interface UserInfoMapper extends BaseMapper<UserInfo> {}
  1. 最后我们继承 IService 创建 Service 接口,并创建对应的实现类,这样便可以使用 Service 的各种 CRUD 方法了:
  • UserInfoService 接口代码如下:
public interface UserInfoService extends IService<UserInfo> {}
  • UserInfoServiceImpl 实现类代码如下:
@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo>
        implements UserInfoService {}

2、getById(根据 id 查询一条记录)

@RestController
public class HelloController {
 
    @Autowired
    UserInfoService userInfoService;
 
    @RequestMapping("/test")
    public UserInfo test(){
        // 根据id查询数据
        UserInfo user = userInfoService.getById(1);
        return user;
    }
}

3、getOne(使用查询构造器,查询一条记录)

// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 开始查询符合的单条记录(如果满足条件的记录有多条,那就不能用这个方法,会报错。)
UserInfo user = userInfoService.getOne(queryWrapper);
  • 前面编写完条件构造语句后需要要将对象传递给 servicegetOne 方法,比较麻烦。我们同样可以通过链式编程的方式进行调用:
UserInfo user = userInfoService.lambdaQuery()
        .like(UserInfo::getUserName,"ha")
        .lt(UserInfo::getAge,40)
        .one();

4、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);

5、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());
});
System.out.println(id);

6、listByIds(根据 ID 批量查询,返回一个 List)

List<UserInfo> users = userInfoService.listByIds(Arrays.asList(1,2,3));

7、listByMap(通过 Map 封装的条件查询,返回一个 List)

注意map 写的是数据表中的列名,而非实体类的属性名。比如属性名为 userName,数据表中字段为 user_name,这里应该写的是 user_name

Map<String,Object> columnMap = new HashMap<>();
columnMap.put("user_name", "hangge");
columnMap.put("age", 22);
List<UserInfo> users = userInfoService.listByMap(columnMap);

8、list(使用查询构造器,返回一个 List)

  1. list 方法如果参数为空,则查询所有的数据:
// 查询所有数据
List<UserInfo> users = userInfoService.list();

  1. list 方法也可以传入查询条件构造器进行查询:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 开始查询
List<UserInfo> users = userInfoService.list(queryWrapper);

  • 前面编写完条件构造语句后需要要将对象传递给 servicelist 方法,比较麻烦。我们同样可以通过链式编程的方式进行调用:
List<UserInfo> users = userInfoService.lambdaQuery()
        .like(UserInfo::getUserName,"ha")
        .lt(UserInfo::getAge,40)
        .list();

9、listMaps(使用查询构造器,返回一个 List)

listMaps 的用法和上面的 list 很像,都是传入一个查询构造器进行查询,然后返回一个 List。不同在于 listMaps 返回的 List 里面是 Map
注意Map 里的 key 为表字段名,而不是对应实体类的属性名。

  1. listMaps 方法如果参数为空,则查询所有的数据:
List<Map<String, Object>> users = userInfoService.listMaps();
System.out.println(users);

  1. listMaps 方法也可以传入查询条件构造器进行查询:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 开始查询
List<Map<String, Object>> users = userInfoService.listMaps(queryWrapper);

10、listObjs(使用查询构造器,返回一个 List< object>)

listObjs 的用法和前面的 list 很像,都是传入一个查询构造器进行查询,然后返回一个 List。不同在于 listObjs 返回的 List 里面只有返每条结果的第一个字段值。

  1. listObjs 方法如果参数为空,则查询所有的数据:
List<Object> users = userInfoService.listObjs();
System.out.println(users);

  • 我们还可以传入个自定义的转换函数:
List<Object> users = userInfoService.listObjs((o) -> {
    return "用户" + o.toString();
});

  1. listObjs 方法也可以传入查询条件构造器进行查询:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 开始查询
List<Object> users = userInfoService.listObjs(queryWrapper);

  • 我们同样可以再传入个自定义的转换函数:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
// 开始查询
List<String> users = userInfoService.listObjs(queryWrapper,(o) -> {
    return "用户" + o.toString();
});

11、count(使用查询构造器,查询总记录数)

  1. count 方法如果参数为空,则查询所有数据的记录数:
Integer count = userInfoService.count();
System.out.println(count);

  1. count 方法也可以传入查询条件构造器进行查询:
// 查询条件:名字中包含'ha'并且年龄小于40
LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,"ha").lt(UserInfo::getAge,40);
//开始根据条件查询总记录
Integer count = userInfoService.count(queryWrapper);
System.out.println(count);

12、添加自己定义的方法

  1. 假设我们 UserInfoService 接口中需要增加一个返回所有年轻人的方法:
public interface UserInfoService extends IService<UserInfo> {
    List<UserInfo> getAllYoungPeople();
}

  1. 对应的实现类 UserInfoServiceImpl 中内容如下。注意:由于该 Service 本身对应的 Mapper 就是 UserInfoMapper,我们直接使用 baseMapper 接口进行查询即可:
@Service("userInfoService")
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo>
        implements UserInfoService {
    public List<UserInfo> getAllYoungPeople() {
        return new LambdaQueryChainWrapper<>(baseMapper)
                .lt(UserInfo::getAge,40)
                .list();
    }
}

  1. 如果需要使用其他的 Mapper 的话,我们就需要先注入在使用了:
@Service("bookService")
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo>
        implements UserInfoService {
 
    @Resource
    private AreaMapper areaMapper;
 
    public List<UserInfo> getAllYoungPeople() {
        return new LambdaQueryChainWrapper<>(baseMapper)
                .lt(UserInfo::getAge,40)
                .list();
    }
}

点击跳转至原文地址

--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------

在这里插入图片描述

--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------

### 回答1: Mybatis-Plus是一个基于Mybatis的增强工具,提供了许多实用的功能,如自动生成代码、分页查询、条件构造器、性能分析等。Mybatis-Plus ServiceMybatis-Plus的一个模块,提供了一些常用的Service接口和实现类,如IServiceServiceImpl等,方便开发者快速构建Service层。 ### 回答2: Mybatis-Plus是一个开源的、能够和Mybatis无缝衔接并扩展出更多实用功能的框架。在实际项目开发中,通常会使用到基于Mybatis-PlusService层,以下是关于Mybatis-Plus Service的一些介绍。 Mybatis-PlusService层是基于Mybatis-Plus框架进行封装的,旨在简化开发者编写Service层代码的流程。使用Mybatis-Plus Service可以有效地减少重复代码的编写,提高开发效率。 在Mybatis-Plus Service中,通常包含了一些常见的CRUD方法,如查询列表、根据ID查询、插入、更新和删除等。我们可以通过继承BaseService或者IService来使用这些方法。同时,Mybatis-Plus Service还提供了一些强大的查询构建器,如LambdaQueryWrapper和QueryWrapper等,可以快速构建复杂的查询条件。 另外,Mybatis-Plus Service还支持事务管理。它提供了一种@Transactional注解来实现声明式事务,我们只需在Service层的方法上添加该注解,即可完成事务的配置。 除了基本CRUD操作和事务管理外,Mybatis-Plus Service还具有其他扩展的功能,例如分页查询、批量操作、逻辑删除等。这些功能都能够极大地简化开发者的编码工作。 总而言之,Mybatis-Plus Service是一种基于Mybatis-Plus框架的封装,用于简化Service层代码的编写。它提供了一系列的CRUD方法、事务管理以及其他实用功能,可以提高开发效率并减少冗余代码的编写。使用Mybatis-Plus Service,开发者能够更加专注于业务逻辑的实现,提高开发效率和代码质量。 ### 回答3: MyBatis-Plus是一个在MyBatis基础上的增强工具,提供了更加便捷的CRUD操作方式。其中的ServiceMyBatis-Plus提供的一层封装,主要用于处理业务逻辑和数据库操作之间的关系。 MyBatis-PlusService主要有以下几个功能: 1. 提供通用的CRUD方法:Service提供了常见的增删改查方法,如save、remove、update等,可以直接调用这些方法来操作数据库,无需手写SQL语句。 2. 封装条件构造器:Service的方法中可以使用MyBatis-Plus提供的条件构造器来进行查询条件的组装,例如可以使用eq、like、in等方法来构建查询条件。 3. 支持分页查询Service提供了分页查询的方法,可以方便地进行数据分页查询操作。可以设置每页的数量、当前页码等参数来实现分页效果。 4. 支持事务控制:Service可以通过注解的方式来对方法添加事务控制,保证在业务逻辑中的多个操作要么全部成功,要么全部失败。可以使用@Transactional注解来标记需要进行事务控制的方法。 总的来说,MyBatis-PlusService提供了一种更加便捷的数据库操作方式,简化了开发过程中的数据库操作代码,提高了开发效率。同时,它还具备一些高级功能,如条件构造器、分页查询和事务控制,使得开发者可以更加灵活和方便地进行业务逻辑的处理和数据库操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值