mybatisplus继承mapper和service后,常用的方法有哪些,比如,传入字段查询,多条件查询,获取数据和条数等等,将常用的方法列出
时间: 2025-06-21 07:20:58 浏览: 7
<think>嗯,用户想了解MyBatis-Plus继承Mapper和Service后常用的方法,特别是涉及字段查询、多条件查询、获取数据和条数等。首先,我需要回忆MyBatis-Plus的基本结构,Mapper层和Service层的继承类。
Mapper接口通常会继承BaseMapper,而Service接口则继承IService,实现类继承ServiceImpl。BaseMapper提供了很多基础的CRUD方法,比如selectById、selectBatchIds等。IService则扩展了一些批量操作和链式查询方法。
用户可能需要常用的查询方法,比如根据字段查询,这可以用QueryWrapper或者LambdaQueryWrapper来构建条件。比如eq方法对应等于,like对应模糊查询。多条件查询的话,可以用and或者or来连接多个条件。
分页查询也是一个重点,需要配置分页插件,然后使用Page对象进行查询,返回的结果包含数据和总条数。此外,Service层中的list、page等方法也是常用的,可能还需要提到getOne获取单个结果,count获取数量。
要注意用户可能对Lambda表达式更感兴趣,因为这样更类型安全,比如使用LambdaQueryWrapper的写法。同时,可能需要提醒他们在使用分页功能前要配置分页拦截器,否则分页可能不生效。
另外,用户可能还关心如何组合多个条件,比如同时满足多个条件或者其中一个,这时候需要解释and和or的使用方式。还有selectList返回列表,selectCount返回条数,这些方法在Wrapper构建后调用。
需要把这些方法分门别类,可能分成Mapper常用方法、Service常用方法,以及Wrapper常用条件构造。每个部分举几个例子,比如selectByMap对应字段查询,selectPage用于分页。在Service层,list、page、getOne、count等方法比较常用。
可能还需要提到一些链式调用,比如lambdaQuery().eq().list()这样的写法,让代码更简洁。最后,确保给出的示例代码正确,比如使用$...$包裹代码中的方法名,符合用户给的系统级指令中的格式要求。
总结一下,应该先介绍Mapper和Service继承的结构,然后分别列出各自的方法,再讲Wrapper的条件构造,最后给出一些组合使用的例子,比如多条件查询和分页查询的结合使用。同时要提醒配置分页插件和Lambda表达式的优势。</think>以下为MyBatis-Plus继承`BaseMapper`和`IService`后的常用方法整理,按使用场景分类说明:
---
### 一、**Mapper层常用方法**
(需继承`BaseMapper<T>`)
```java
// 1. 根据ID查询
T selectById(Serializable id);
// 2. 根据字段条件查询(Map传参)
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
// 3. 多条件查询(Wrapper构建条件)
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
// 4. 分页查询(需配置分页插件)
IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
// 5. 查询总记录数
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
```
---
### 二、**Service层常用方法**
(需继承`IService<T>`,实现类继承`ServiceImpl<M, T>`)
```java
// 1. 根据ID查询
T getById(Serializable id);
// 2. 查询所有数据
List<T> list();
// 3. 条件查询列表
List<T> list(Wrapper<T> queryWrapper);
// 4. 分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 5. 获取记录数
long count(Wrapper<T> queryWrapper);
// 6. 链式查询(返回Lambda条件构造器)
LambdaQueryChainWrapper<T> lambdaQuery();
```
---
### 三、**Wrapper条件构造器**
(核心方法配合`QueryWrapper`或`LambdaQueryWrapper`使用)
```java
// 1. 精确匹配
eq("column", value) // WHERE column = value
ne("column", value) // WHERE column != value
// 2. 范围查询
between("column", v1, v2) // WHERE column BETWEEN v1 AND v2
gt("column", value) // WHERE column > value
lt("column", value) // WHERE column < value
// 3. 模糊查询
like("column", value) // WHERE column LIKE '%value%'
likeLeft("column", value) // WHERE column LIKE '%value'
likeRight("column", value) // WHERE column LIKE 'value%'
// 4. 多条件组合
and(wrapper -> wrapper.eq(...).or().gt(...)) // AND (条件1 OR 条件2)
or(wrapper -> wrapper.eq(...).ne(...)) // OR (条件1 AND 条件2)
// 5. 指定返回字段
select("id", "name") // 仅查询id和name字段
```
---
### 四、**典型使用示例**
#### 1. 单字段查询
```java
// 查询name为"John"的记录
List<User> users = userMapper.selectList(
new QueryWrapper<User>().eq("name", "John")
);
```
#### 2. 多条件AND查询
```java
// 查询age>18且status=1的记录
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.gt(User::getAge, 18)
.eq(User::getStatus, 1);
List<User> users = userService.list(wrapper);
```
#### 3. 分页+排序查询
```java
// 分页查询第2页(每页10条),按create_time倒序
Page<User> page = new Page<>(2, 10);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("create_time");
IPage<User> result = userService.page(page, wrapper);
// 获取数据列表和总条数
List<User> data = result.getRecords();
long total = result.getTotal();
```
#### 4. 统计数量
```java
// 统计status=0的记录数
Long count = userService.count(
new LambdaQueryWrapper<User>().eq(User::getStatus, 0)
);
```
---
### 五、**注意事项**
1. **分页插件配置**:需在SpringBoot配置类中添加`PaginationInterceptor`
2. **Lambda表达式**:推荐使用`LambdaQueryWrapper`避免硬编码字段名
3. **链式调用**:Service层的`lambdaQuery()`可直接链式构建条件
```java
userService.lambdaQuery()
.gt(User::getAge, 18)
.like(User::getName, "张")
.list();
```
阅读全文
相关推荐


















