当前位置: 首页 > news >正文

青岛网站建设 上流网络广告营销典型案例

青岛网站建设 上流,网络广告营销典型案例,江苏 做网站,免费推广中文黄页网本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作,帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询,还是复杂的多表联动,甚至是大数据量的批量操作…

本文将介绍 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依赖

        <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

然后配置swagger信息

knife4j:enable: trueopenapi:title: 用户管理接口文档description: "用户管理接口文档"email: zhanghuyi@itcast.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 List<UserVO> queryUserByIds(@ApiParam("用户id集合 ") @RequestParam("ids") List<Long> ids) {//查询用户List<User> users = userService.listByIds(ids);//把PO拷贝到VOList<UserVO> 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 IService<User> {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 ServiceImpl<UserMapper, User> implements IUserService {@Overridepublic void deductBalance(Long id, Integer money) {//查询用户User user = this.getById(id);//校验用户状态if(user==null || 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 id="queryUsers" resultType="com.itheima.mp.domain.po.UserSELECT *FROM tb_user<where><if test="name != null">AND username LIKE #{name]</if><if test="status != null">ANDstatus`=#{status}</if><if test="minBalance != null and maxBalance != null">AND balance BETWEEN #{minBalance}AND #{maxBalance}</if></where>
</select>

 UserController类

    @ApiOperation("根据复杂条件查询用户接口")@GetMapping("/list")public List<UserVO> queryUsers(UserQuery userQuery) {//查询用户poList<User> users = userService.queryUsers(userQuery.getName(),userQuery.getStatus(),userQuery.getMinBalance(),userQuery.getMaxBalance());List<UserVO> userVOS = BeanUtil.copyToList(users, UserVO.class);return userVOS;}

IService接口 

List<User> queryUsers(String name, Integer status, Integer minBalance, Integer maxBalance);

UserServiceImpl实现类 

    @Overridepublic List<User> queryUsers(String name, Integer status, Integer minBalance, Integer maxBalance) {List<User> 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(user==null || 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条List<User> 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文件中加入rewriteBatchedStatements=true

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true

总结

通过本文的讲解,我们深入探讨了 MyBatis-Plus 中 IService 接口的多种常见用法。首先,IService 的基本业务方法简化了常见的 CRUD 操作,开发者无需编写冗长的 SQL 语句,便能实现数据库的增、删、改、查等操作。其次,借助 MyBatis-Plus 强大的 Lambda 功能,开发者可以更加灵活和简洁地构建查询条件,避免了传统 SQL 中条件拼接的复杂性。接着,我们介绍了如何通过 IService 实现复杂业务逻辑,尤其是多表操作的处理,进一步增强了应用的可扩展性和灵活性。最后,批量操作作为大数据量处理中的一项重要优化方法,saveBatch 使得批量插入变得更加简单高效,减少了数据库访问的次数。

通过充分掌握 IService 接口的使用,你可以大幅提升开发效率,减少代码重复度,并且能够灵活应对各种复杂的业务场景。希望本文所介绍的内容能够帮助你更好地理解并应用 MyBatis-Plus 的强大功能,提升你的开发水平与应用性能。

http://www.zhongyajixie.com/news/51083.html

相关文章:

  • 充值选建设银行打不开网站网站网络营销
  • 怎么验证网站备案密码是否正确北京营销公司排行榜
  • 建设部网站公示钦州公租房摇号查询营销型网站定制
  • 做h5的网站页面推广营销方案
  • 中国菲律宾冲突最新消息新闻太原seo计费管理
  • 月嫂网站模板宁德市人民政府
  • 网站开发的调研内容提升关键词
  • 招工做的网站搜索引擎技术
  • 有做公司网站的吗郑州网站营销推广公司
  • 综合性门户网站有seo没什么作用了
  • 有了域名后怎么做网站网络营销策略优化
  • 上海网站设制作网站需要什么软件
  • 网站设计建设合同教育培训机构排名
  • 深圳做网站最好的公司宁波seo哪家好
  • 怎么做网站注册登入页面百度推广费用一年多少钱
  • 网站开发费属于无形资产那部分全渠道营销管理平台
  • 做百度网站临沂森拓网络科技有限公司
  • 自己怎么免费做网站最新地址
  • 国外做mg动画的网站大全网络营销策略分析报告
  • 泉州有哪些做网站的头条新闻
  • 定州网站建设微信运营工具
  • 上海市住房和城乡建设管理委员会门户网站网站权重查询
  • ps2017做网站windows优化大师要会员
  • github搭建wordpress网络优化工程师主要做什么
  • 网站如何做h5动态页面设计互联网营销师证
  • 网站建设的策划文案企业短视频推广
  • 网站备案信息安全承诺书网站服务器查询工具
  • 聊城网站建设招聘外贸高端网站设计公司
  • wordpress 做图片站百度教育app
  • 先做网站后付款百度搜索推广产品