广告页面模板网站,肇庆建设银行招聘网站,网站备案查询验证码错误,商丘的互联网公司本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作#xff0c;帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询#xff0c;还是复杂的多表联动#xff0c;甚至是大数据量的批量操作… 本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询还是复杂的多表联动甚至是大数据量的批量操作IService 都能为你提供便利的解决方案。 文章目录 前言 Iservice接口基本业务 Iservice接口复杂业务 IService的Lambda方法 IService的批量新增 总结 前言
现代 Java 开发中Spring 框架和 MyBatis-Plus 已成为开发高效、灵活的企业级应用程序的重要工具。MyBatis-Plus 作为 MyBatis 的增强工具提供了丰富的功能来简化数据库操作其中 IService 接口是其核心之一。IService 不仅为我们提供了常见的 CRUD 操作还支持 Lambda 查询、批量操作等高级功能极大地提高了开发效率。
本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询还是复杂的多表联动甚至是大数据量的批量操作IService 都能为你提供便利的解决方案。 Iservice接口基本业务 首先引入依赖swagger依赖和web依赖 dependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-openapi2-spring-boot-starter/artifactIdversion4.1.0/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency
然后配置swagger信息
knife4j:enable: trueopenapi:title: 用户管理接口文档description: 用户管理接口文档email: zhanghuyiitcast.cnconcat: 虎哥url: https://www.itcast.cnversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-rule-resources:- com.itheima.mp.controller
UserController类
新增用户
package com.itheima.mp.controller;import cn.hutool.core.bean.BeanUtil;
import com.itheima.mp.domain.dto.UserFormDTO;
import com.itheima.mp.domain.po.User;
import com.itheima.mp.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;Api(tags用户管理接口)
RestController
RequestMapping(/user)
public class UserController {Autowiredprivate IUserService userService;ApiOperation(新增用户接口)PostMapping//往往会传送json格式数据所以加RequestBodypublic void saveUseer(RequestBody UserFormDTO userFormDTO) {//把DTO拷贝到poUser user BeanUtil.toBean(userFormDTO, User.class);//新增userService.save(user);}
}删除用户 ApiOperation(删除用户接口)DeleteMapping({id})//往往会传送json格式数据所以加RequestBodypublic void deleteUserById(ApiParam(用户id) PathVariable(id) Long id) {userService.removeById(id);}
根据id查询用户接口 ApiOperation(根据id查询用户)GetMapping({id})public UserVO getUserById(ApiParam(用户id) PathVariable(id) Long id) {//查询用户User user userService.getById(id);//把po拷贝到voUserVO userVO BeanUtil.copyProperties(user, UserVO.class);return userVO;} 根据id批量查询用户 ApiOperation(根据id批量查询用户)GetMappingpublic ListUserVO queryUserByIds(ApiParam(用户id集合 ) RequestParam(ids) ListLong ids) {//查询用户ListUser users userService.listByIds(ids);//把PO拷贝到VOListUserVO userVOS BeanUtil.copyToList(users, UserVO.class);return userVOS;}
Iservice接口复杂业务
根据id扣减用户余额 ApiOperation(根据id扣除余额)PutMapping(/{id}/deduction/{money})public void deductMoneyById(ApiParam(用户id) PathVariable(id) Long id,ApiParam(扣减的金额) PathVariable(money) Integer money){userService.deductBalance(id,money);}
IUserService接口
public interface IUserService extends IServiceUser {void deductBalance(Long id,Integer money);
}
UserServiceImpl类
package com.itheima.mp.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.mp.domain.po.User;
import com.itheima.mp.mapper.UserMapper;
import com.itheima.mp.service.IUserService;
import org.springframework.stereotype.Service;Service
public class UserServiceImpl extends ServiceImplUserMapper, User implements IUserService {Overridepublic void deductBalance(Long id, Integer money) {//查询用户User user this.getById(id);//校验用户状态if(usernull || user.getStatus() 2){throw new RuntimeException(用户状态异常);}//校验余额是否充足if(user.getBalance() money){throw new RuntimeException(用户余额不足);}//扣减余额baseMapper.deductBalance(id,money);}
}userMapperr类 Update(update user set balance balance - #{money} where id id)void deductBalance(Param(id)Long id,Param(money)Integer money); 通过localhost:8080/doc.html就可以访问接口文档 IService的Lambda方法 select idqueryUsers resultTypecom.itheima.mp.domain.po.UserSELECT *FROM tb_userwhereif testname ! nullAND username LIKE #{name]/ifif teststatus ! nullANDstatus#{status}/ifif testminBalance ! null and maxBalance ! nullAND balance BETWEEN #{minBalance}AND #{maxBalance}/if/where
/select UserController类 ApiOperation(根据复杂条件查询用户接口)GetMapping(/list)public ListUserVO queryUsers(UserQuery userQuery) {//查询用户poListUser users userService.queryUsers(userQuery.getName(),userQuery.getStatus(),userQuery.getMinBalance(),userQuery.getMaxBalance());ListUserVO userVOS BeanUtil.copyToList(users, UserVO.class);return userVOS;}
IService接口
ListUser queryUsers(String name, Integer status, Integer minBalance, Integer maxBalance);
UserServiceImpl实现类 Overridepublic ListUser queryUsers(String name, Integer status, Integer minBalance, Integer maxBalance) {ListUser users lambdaQuery().like(name ! null, User::getUsername, name).eq(status ! null, User::getStatus, status).ge(minBalance ! null, User::getBalance, minBalance).le(maxBalance ! null, User::getBalance, maxBalance).list();return users;} Overridepublic void deductBalance(Long id, Integer money) {//查询用户User user this.getById(id);//校验用户状态if(usernull || user.getStatus() 2){throw new RuntimeException(用户状态异常);}//校验余额是否充足if(user.getBalance() money){throw new RuntimeException(用户余额不足);}//余额int remain user.getBalance() - money;lambdaUpdate().set(User::getBalance, remain).set(remain 0, User::getStatus, 2).eq(User::getId, id)//防止多线程引发.eq(User::getBalance, user.getBalance()).update();}
IService的批量新增 Testvoid testSaveBatch(){long b System.currentTimeMillis();//每次批量处理1000条ListUser list new ArrayList(1000);for(int i 1;i 100000;i){list.add(buildUser(i));if(i % 10000 0){//每1000条批量处理一次userService.saveBatch(list);list.clear();}}long e System.currentTimeMillis();System.out.println(耗时(e - b));} 在application.yml文件中加入rewriteBatchedStatementstrue
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneAsia/ShanghairewriteBatchedStatementstrue 总结
通过本文的讲解我们深入探讨了 MyBatis-Plus 中 IService 接口的多种常见用法。首先IService 的基本业务方法简化了常见的 CRUD 操作开发者无需编写冗长的 SQL 语句便能实现数据库的增、删、改、查等操作。其次借助 MyBatis-Plus 强大的 Lambda 功能开发者可以更加灵活和简洁地构建查询条件避免了传统 SQL 中条件拼接的复杂性。接着我们介绍了如何通过 IService 实现复杂业务逻辑尤其是多表操作的处理进一步增强了应用的可扩展性和灵活性。最后批量操作作为大数据量处理中的一项重要优化方法saveBatch 使得批量插入变得更加简单高效减少了数据库访问的次数。
通过充分掌握 IService 接口的使用你可以大幅提升开发效率减少代码重复度并且能够灵活应对各种复杂的业务场景。希望本文所介绍的内容能够帮助你更好地理解并应用 MyBatis-Plus 的强大功能提升你的开发水平与应用性能。