96SEO 2026-02-19 10:46 10
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version/dependencyMapper

userMapper.selectList(wrapper);//3.
遍历打印users.forEach(System.out::println);}Testvoid
User();user.setBalance(2000);//
QueryWrapperUser().eq(username,jack);//
执行更新userMapper.update(user,wrapper);}Testvoid
UpdateWrapperUser().setSql(balance
200).in(id,ids);userMapper.update(null,wrapper);}
testLambdaQueryWrapper(){LambdaQueryWrapperUser
LambdaQueryWrapperUser().select(User::getId,User::getUsername,User::getInfo,User::getBalance).like(User::getUsername,o).ge(User::getBalance,1000);ListUser
userMapper.selectList(wrapper);users.forEach(System.out::println);}自定义SQL
我们的自定义接口UserService需要去继承IService接口我们的实现类UserServiceImpl也要继承他的实现类ServiceImpl
com.baomidou.mybatisplus.extension.service.IService;
com.i***ima.mp.domain.po.User;public
com.i***ima.mp.service.impl;import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
com.i***ima.mp.mapper.UserMapper;
com.i***ima.mp.service.IUserService;
org.springframework.stereotype.Service;Service
org.springframework.beans.factory.annotation.Autowired;
org.springframework.boot.test.context.SpringBootTest;import
org.junit.jupiter.api.Assertions.*;SpringBootTest
user.setId(5L);user.setUsername(Lilei);user.setPassword(123);user.setPhone(18688990011);user.setBalance(200);user.setInfo({\age\:
\female\});user.setCreateTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());userService.save(user);}Testvoid
userService.listByIds(Arrays.asList(1L,
3L));users.forEach(System.out::println);}
com.i***ima.mp.controller;import
com.i***ima.mp.domain.dto.UserFormDTO;
com.i***ima.mp.domain.query.UserQuery;
com.i***ima.mp.domain.vo.UserVO;
com.i***ima.mp.service.IUserService;
io.swagger.annotations.ApiOperation;
io.swagger.annotations.ApiParam;
lombok.RequiredArgsConstructor;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.web.bind.annotation.*;import
final搭配lombok的RequiredArgsConstructor注解//
实现根据需要自动注入不需要注入的不加lombok注解就行了private
userService;ApiOperation(新增用户接口)PostMappingpublic
BeanUtil.copyProperties(userDto,
新增userService.save(user);}ApiOperation(删除用户接口)DeleteMapping({id})public
id){userService.removeById(id);}ApiOperation(根据id查询用户)GetMapping({id})public
BeanUtil.copyProperties(user,UserVO.class);}ApiOperation(根据id批量查询用户)GetMappingpublic
userService.listByIds(ids);return
BeanUtil.copyToList(users,UserVO.class);}ApiOperation(扣减用户余额接口)DeleteMapping({id}/deduction/{money})public
money){userService.deductBalance(id,
ApiOperation(根据复杂条件查询用户)GetMapping(/list)public
userService.queryUsers(query.getName(),query.getStatus(),query.getMinBalance(),query.getMaxBalance());//
maxBalance).list();}OverrideTransactionalpublic
我们继承了ServiceImpl爸爸的就是我的已经有UserService了不用注入this一下看看哦//
baseMapper.deductBalance(id,money);int
money;lambdaUpdate().set(User::getBalance,remainBalance).set(remainBalance
0,User::getStatus,0).eq(User::getId,id).eq(User::getBalance,user.getBalance())
ApiOperation(根据id查询用户)GetMapping({id})public
BeanUtil.copyProperties(user,UserVO.class);return
userService.queryUserAndAddressById(id);}实现方法
Db.lambdaQuery(Address.class).eq(Address::getUserId,
转地址VOif(CollUtil.isNotEmpty(addresses)){userVO.setAddresses(BeanUtil.copyToList(addresses,
ApiOperation(根据id批量查询用户)GetMappingpublic
BeanUtil.copyToList(users,UserVO.class);return
userService.queryUserAndAddressByIds(ids);}实现
queryUserAndAddressByIds(ListLong
listByIds(ids);if(CollUtil.isEmpty(users)){return
users.stream().map(User::getId).collect(Collectors.toList());//
Db.lambdaQuery(Address.class).in(Address::getUserId,
用户地址集合分组处理相同的用户放入一个集合组中MapLong,
HashMap(0);if(CollUtil.isNotEmpty(addressVOList)){addressMap
addressVOList.stream().collect(Collectors.groupingBy(AddressVO::getUserId));}//
转换地址VOvo.setAddresses(addressMap.get(user.getId()));list.add(vo);}return
com.baomidou.mybatisplus.annotation.EnumValue;
com.fasterxml.jackson.annotation.JsonValue;
{NORML(1,正常),FROZEN(2,冻结),;EnumValueprivate
前端默认返回枚举项的名字不友好设置返回desc由spring控制private
com.i***ima.mp.domain.po;import
com.i***ima.mp.domain.po;import
com.baomidou.mybatisplus.annotation.IdType;
com.baomidou.mybatisplus.annotation.TableField;
com.baomidou.mybatisplus.annotation.TableId;
com.baomidou.mybatisplus.annotation.TableName;
com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
com.i***ima.mp.enums.UserStatus;
JacksonTypeHandler.class)private
com.i***ima.mp.domain.vo;import
com.i***ima.mp.domain.po.UserInfo;
com.i***ima.mp.enums.UserStatus;
io.swagger.annotations.ApiModel;
io.swagger.annotations.ApiModelProperty;
id;ApiModelProperty(用户名)private
username;ApiModelProperty(详细信息)private
status;ApiModelProperty(账户余额)private
balance;ApiModelProperty(用户的收货地址)private
com.baomidou.mybatisplus.annotation.DbType;
com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.Configuration;Configuration
mybatisPlusInterceptor(){MybatisPlusInterceptor
MybatisPlusInterceptor();//创建分页插件PaginationInnerInterceptor
PaginationInnerInterceptor(DbType.MYSQL);paginationInnerInterceptor.setMaxLimit(1000L);//
添加分页插件interceptor.addInnerInterceptor(paginationInnerInterceptor);return
p.getRecords();records.forEach(System.out::println);}通用分页实体
com.i***ima.mp.domain.query;import
io.swagger.annotations.ApiModel;
io.swagger.annotations.ApiModelProperty;
pageNo;ApiModelProperty(页码)private
pageSize;ApiModelProperty(排序字段)private
sortBy;ApiModelProperty(是否升序)private
com.i***ima.mp.domain.query;import
io.swagger.annotations.ApiModel;
io.swagger.annotations.ApiModelProperty;
lombok.EqualsAndHashCode;EqualsAndHashCode(callSuper
PageQuery{ApiModelProperty(用户名关键字)private
name;ApiModelProperty(用户状态1-正常2-冻结)private
status;ApiModelProperty(余额最小值)private
minBalance;ApiModelProperty(余额最大值)private
ApiOperation(根据分页查询用户接口)GetMapping(/page)public
userService.queryUsersPage(query);}service层
排序条件if(StrUtil.isNotBlank(query.getSortBy())){//
OrderItem(query.getSortBy(),query.getIsAsc()));}else{//
OrderItem(update_time,false));}//
User::getStatus,status).page(page);//
总条数dto.setTotal(p.getTotal());//
总页数dto.setPages(p.getPages());//
p.getRecords();if(CollUtil.isEmpty(records)){dto.setList(Collections.emptyList());return
UserVO.class);dto.setList(vos);//
com.i***ima.mp.domain.query;import
com.baomidou.mybatisplus.core.metadata.OrderItem;
com.baomidou.mybatisplus.extension.plugins.pagination.Page;
io.swagger.annotations.ApiModel;
io.swagger.annotations.ApiModelProperty;
5;ApiModelProperty(排序字段)private
sortBy;ApiModelProperty(是否升序)private
排序条件if(StrUtil.isNotBlank(sortBy)){//
为空默认排序page.addOrder(items);}return
OrderItem(defaultSortBy,defaultAsc));}public
toMpPageDefaultSortByCreateTime(){return
OrderItem(create_time,false));}public
toMpPageDefaultSortByUpdateTime(){return
OrderItem(update_time,false));}}package
com.i***ima.mp.domain.dto;import
cn.hutool.core.collection.CollUtil;
com.baomidou.mybatisplus.extension.plugins.pagination.Page;
io.swagger.annotations.ApiModel;
io.swagger.annotations.ApiModelProperty;
java.util.stream.Collectors;Data
total;ApiModelProperty(总页数)private
pages;ApiModelProperty(集合)private
总条数dto.setTotal(p.getTotal());//
总页数dto.setPages(p.getPages());//
p.getRecords();if(CollUtil.isEmpty(records)){dto.setList(Collections.emptyList());return
拷贝user的VOdto.setList(records.stream().map(convertor).collect(Collectors.toList()));//
query.toMpPageDefaultSortByUpdateTime();//
User::getStatus,status).page(page);//
处理特殊逻辑vo.setUsername(vo.getUsername().substring(0,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback