package com.nirvana.demo.factory.module.sdm.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nirvana.demo.common.mybatis.base.PageData; import com.nirvana.demo.common.mybatis.utils.PageUtil; import com.nirvana.demo.factory.module.sdm.entity.SdmCustomer; import com.nirvana.demo.factory.module.inv.service.IInvWarehouseService; import com.nirvana.demo.factory.module.sdm.mapper.SdmCustomerMapper; import com.nirvana.demo.factory.module.sdm.service.ISdmCustomerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /** * <p> * 客户信息 服务实现类 * </p> * * @author gino * @since 2023-07-17 */ @Service public class SdmCustomerServiceImpl extends ServiceImpl<SdmCustomerMapper, SdmCustomer> implements ISdmCustomerService { @Autowired IInvWarehouseService invWarehouseService; /** * 构建查询 * @param params * @return */ public QueryWrapper<SdmCustomer> getWrapper(Map<String, Object> params) { QueryWrapper<SdmCustomer> wrapper = new QueryWrapper<>(); Map whereFields = (HashMap) params.get("whereFields"); if (whereFields != null) { Set<String> keys = whereFields.keySet(); for (String key : keys) { Object value = whereFields.get(key); if (value != null) { if (key.equals("customer_name")) { wrapper.like(key, value); } else { wrapper.likeRight(key, value); } } } } return wrapper; } /** * 分页查询 * @param params * @return */ @Override // public PageData page(Map<String, Object> params) { // IPage page = PageUtil.getPage(params); // QueryWrapper wrapper = this.getWrapper(params); // this.page(page, wrapper); // PageData pageData = PageUtil.getPageData(page); // return pageData; // } public PageData page(Map<String, Object> params) { IPage page = PageUtil.getPage(params); QueryWrapper<SdmCustomer> wrapper = null; if (params.get("keywords") != null) { String keywords = (String) params.get("keywords"); if (keywords != null) { boolean fuzzySearch = false; if (params.get("fuzzySearch") != null) { fuzzySearch = Boolean.parseBoolean((String)params.get("fuzzySearch")); } wrapper = new QueryWrapper<>(); // TODO like是否为 %keywords% likeRight 性能 if (fuzzySearch) { //模糊查询 wrapper.like("customer_no", keywords).or().like("customer_name", keywords).orderByAsc("customer_no"); } else { //定位查询 wrapper.ge("customer_no", keywords).orderByAsc("customer_no"); } } } else { //条件查询 wrapper = this.getWrapper(params); } this.page(page, wrapper); PageData pageData = PageUtil.getPageData(page); return pageData; } // /** // * 销售单信息 // * TODO // * @param customerId // */ // public SdmCustomer getCustomerInfo(Long customerId) { // LambdaQueryWrapper<SdmCustomer> lqw = Wrappers.lambdaQuery(); // lqw.eq(SdmCustomer::getId, customerId); // SdmCustomer customer = this.getOne(lqw); // // return customer; // } } 逐行解释
时间: 2025-07-19 17:32:15 浏览: 12
<think>我们正在分析一个Spring Boot服务实现类,它负责客户信息的数据库操作。这个类使用了MyBatis-Plus来简化数据库访问。
注意:用户要求逐行解释,因此我们需要对代码进行详细注释,并解释关键逻辑。
同时,按照要求,在最后提出3-5个相关问题。</think>### 逐行解释客户信息服务实现类
```java
package com.nirvana.demo.factory.module.sdm.service.impl; // 服务实现类包路径
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; // MyBatis-Plus查询条件构造器
import com.baomidou.mybatisplus.core.metadata.IPage; // MyBatis-Plus分页接口
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; // MyBatis-Plus服务实现基类
import com.nirvana.demo.common.mybatis.base.PageData; // 自定义分页数据封装类
import com.nirvana.demo.common.mybatis.utils.PageUtil; // 分页工具类
import com.nirvana.demo.factory.module.sdm.entity.SdmCustomer; // 客户实体类
import com.nirvana.demo.factory.module.inv.service.IInvWarehouseService; // 仓库服务接口
import com.nirvana.demo.factory.module.sdm.mapper.SdmCustomerMapper; // 客户数据访问接口
import com.nirvana.demo.factory.module.sdm.service.ISdmCustomerService; // 客户服务接口
import org.springframework.beans.factory.annotation.Autowired; // Spring依赖注入注解
import org.springframework.stereotype.Service; // Spring服务层注解
import java.util.*; // 导入Java集合工具
/**
* <p>客户信息 服务实现类</p> // 类功能说明
* @author gino // 作者
* @since 2023-07-17 // 创建日期
*/
@Service // Spring注解:声明为服务层组件
public class SdmCustomerServiceImpl extends ServiceImpl<SdmCustomerMapper, SdmCustomer>
implements ISdmCustomerService { // 继承MyBatis-Plus服务基类并实现自定义接口
@Autowired // Spring依赖注入:自动装配仓库服务
IInvWarehouseService invWarehouseService; // 仓库服务实例(当前类中未使用)
/**
* 构建查询条件包装器
* @param params 查询参数Map
* @return 查询条件包装器
*/
public QueryWrapper<SdmCustomer> getWrapper(Map<String, Object> params) {
QueryWrapper<SdmCustomer> wrapper = new QueryWrapper<>(); // 创建空查询条件
Map whereFields = (HashMap) params.get("whereFields"); // 获取条件字段Map
if (whereFields != null) {
Set<String> keys = whereFields.keySet(); // 获取所有字段名
for (String key : keys) {
Object value = whereFields.get(key); // 获取字段值
if (value != null) {
if (key.equals("customer_name")) { // 客户名称特殊处理
wrapper.like(key, value); // 使用LIKE %value% 模糊查询
} else {
wrapper.likeRight(key, value); // 使用LIKE value% 右模糊查询
}
}
}
}
return wrapper; // 返回构建的查询条件
}
/**
* 分页查询实现
* @param params 查询参数Map
* @return 分页数据对象
*/
@Override
public PageData page(Map<String, Object> params) {
IPage<SdmCustomer> page = PageUtil.getPage(params); // 创建分页对象
QueryWrapper<SdmCustomer> wrapper = null; // 初始化查询条件
// 关键词查询模式
if (params.get("keywords") != null) {
String keywords = (String) params.get("keywords"); // 获取关键词
if (keywords != null) {
boolean fuzzySearch = false; // 默认非模糊查询
if (params.get("fuzzySearch") != null) {
// 解析模糊查询标志
fuzzySearch = Boolean.parseBoolean((String)params.get("fuzzySearch"));
}
wrapper = new QueryWrapper<>();
if (fuzzySearch) {
// 模糊查询:客户编号或名称包含关键词
wrapper.like("customer_no", keywords)
.or()
.like("customer_name", keywords)
.orderByAsc("customer_no"); // 按编号升序
} else {
// 定位查询:客户编号大于等于关键词(用于范围查询)
wrapper.ge("customer_no", keywords)
.orderByAsc("customer_no"); // 按编号升序
}
}
} else {
// 条件字段查询模式
wrapper = this.getWrapper(params); // 调用条件构造方法
}
this.page(page, wrapper); // 执行分页查询
PageData pageData = PageUtil.getPageData(page); // 转换分页结果
return pageData; // 返回分页数据
}
// 注释掉的获取客户详情方法(预留扩展)
/*
public SdmCustomer getCustomerInfo(Long customerId) {
LambdaQueryWrapper<SdmCustomer> lqw = Wrappers.lambdaQuery();
lqw.eq(SdmCustomer::getId, customerId);
return this.getOne(lqw);
}
*/
}
```
### 核心功能解析
1. **查询条件构建策略**
- `getWrapper()`方法:根据`whereFields`参数动态构建查询条件
- `customer_name`字段使用全模糊查询(`LIKE %value%`)
- 其他字段使用右模糊查询(`LIKE value%`),优化索引性能
2. **分页查询实现**
- 支持三种查询模式:
- **关键词模式**:通过`keywords`参数搜索
- 模糊查询:同时匹配客户编号和名称
- 定位查询:使用`ge`(大于等于)进行范围查询
- **条件字段模式**:通过`whereFields`参数构建精确条件
- 统一使用`PageUtil`工具处理分页参数和结果转换
3. **性能优化点**
- 右模糊查询(`likeRight`)比全模糊查询(`like`)更利于索引优化
- 定位查询使用`ge`代替`like`提升范围查询效率
- 排序字段明确指定避免全表扫描
4. **待扩展功能**
- 注释的`getCustomerInfo`方法预留客户详情查询
- 注入的`invWarehouseService`仓库服务当前未使用
阅读全文
相关推荐

















