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

懒人之家网站模板写文案接单平台

懒人之家网站模板,写文案接单平台,b端电商平台有哪些,口腔医院网站建设一、条件构造器 1.为什么要学? 用于方便地构建SQL查询条件 2.如何使用? 3.实战案例 例:查询出名字中带o的,存款大于等于1000元的人的id,username,info,balance字段 数据库如图: 示例: Test void testL…

一、条件构造器

1.为什么要学?

用于方便地构建SQL查询条件

2.如何使用?

3.实战案例

例:查询出名字中带o的,存款大于等于1000元的人的id,username,info,balance字段

数据库如图:

示例:

@Test
void testLambdaQueryWrapper() {//1.构建查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().select(User::getId,User::getUsername,User::getInfo,User::getBalance)
.like(User::getUsername,"o")
.ge(User::getBalance, 1000);//2.查询
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);}

二、自定义SQL

1.为什么要学?

当SQL语句中where条件之外的部分无法使用MP方便地实现,只能手动进行拼接,但违背了开发规范,因此可以使用自定义SQL解决。

2.如何使用?

先在业务层利用wrapper创建条件,之后在自定义mapper方法中传入wrapper,需要使用注解@Param("ew"),然后在自定义SQL中拼接前半部分

三、IService接口

1.如何使用?

2.实战案例

编号

接口

请求方式

请求路径

请求参数

返回值

1

新增用户

POST

/users

用户表单实体

2

删除用户

DELETE

/users/{id}

用户id

3

根据id查询用户

GET

/users/{id}

用户id

用户VO

4

根据id批量查询

GET

/users

用户id集合

用户VO集合

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.domain.vo.UserVO;
import com.itheima.mp.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;import java.util.List;@Api(tags = "用户管理接口")
@RequiredArgsConstructor
@RestController
@RequestMapping("users")
public class UserController {private final IUserService userService;@PostMapping@ApiOperation("新增用户")public void saveUser(@RequestBody UserFormDTO userFormDTO){// 1.转换DTO为POUser user = BeanUtil.copyProperties(userFormDTO, User.class);// 2.新增userService.save(user);}@DeleteMapping("/{id}")@ApiOperation("删除用户")public void removeUserById(@PathVariable("id") Long userId){userService.removeById(userId);}@GetMapping("/{id}")@ApiOperation("根据id查询用户")public UserVO queryUserById(@PathVariable("id") Long userId){// 1.查询用户User user = userService.getById(userId);// 2.处理voreturn BeanUtil.copyProperties(user, UserVO.class);}@GetMapping@ApiOperation("根据id集合查询用户")public List<UserVO> queryUserByIds(@RequestParam("ids") List<Long> ids){// 1.查询用户List<User> users = userService.listByIds(ids);// 2.处理voreturn BeanUtil.copyToList(users, UserVO.class);}
}

上述接口都直接在controller即可实现,无需编写任何service代码

3.实战案例(高级)

当需要处理解决复杂业务时,不得不自定义service方法来编辑业务逻辑

例:

Controller层

@PutMapping("{id}/deduction/{money}")
@ApiOperation("扣减用户余额")
public void deductBalance(@PathVariable("id") Long id, @PathVariable("money")Integer money){userService.deductBalance(id, money);
}

Service层

package com.itheima.mp.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.mp.domain.po.User;public interface IUserService extends IService<User> {void deductBalance(Long id, Integer money);
}

Serviceimpl层

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) {// 1.查询用户User user = getById(id);// 2.判断用户状态if (user == null || user.getStatus() == 2) {throw new RuntimeException("用户状态异常");}// 3.判断用户余额if (user.getBalance() < money) {throw new RuntimeException("用户余额不足");}// 4.扣减余额baseMapper.deductMoneyById(id, money);}
}

mapper层

@Update("UPDATE user SET balance = balance - #{money} WHERE id = #{id}")
void deductMoneyById(@Param("id") Long id, @Param("money") Integer money);

四、IService的Lambda方法

IService中还提供了Lambda功能来简化我们的复杂查询更新功能

1.实战案例一

例:实现一个根据复杂条件查询用户的接口,查询条件如下:

  • name:用户名关键字,可以为空

  • status:用户状态,可以为空

  • minBalance:最小余额,可以为空

  • maxBalance:最大余额,可以为空

可以理解成一个用户的后台管理界面,管理员可以自己选择条件来筛选用户,因此上述条件不一定存在,需要做判断。

Service中对LambdaQueryWrapperLambdaUpdateWrapper的用法进一步做了简化。我们无需自己通过new的方式来创建Wrapper,而是直接调用lambdaQuerylambdaUpdate方法

@GetMapping("/list")
@ApiOperation("根据id集合查询用户")
public List<UserVO> queryUsers(UserQuery query){// 1.组织条件String username = query.getName();Integer status = query.getStatus();Integer minBalance = query.getMinBalance();Integer maxBalance = query.getMaxBalance();// 2.查询用户List<User> users = userService.lambdaQuery().like(username != null, User::getUsername, username).eq(status != null, User::getStatus, status).ge(minBalance != null, User::getBalance, minBalance).le(maxBalance != null, User::getBalance, maxBalance).list();// 3.处理voreturn BeanUtil.copyToList(users, UserVO.class);
}

可以发现lambdaQuery方法中除了可以构建条件,还需要在链式编程的最后添加一个list(),这是在告诉MP我们的调用结果需要是一个list集合。这里不仅可以用list(),可选的方法有:

  • .one():最多1个结果

  • .list():返回集合结果

  • .count():返回计数结果

MybatisPlus会根据链式编程的最后一个方法来判断最终的返回结果。

2.实战案例二

例:改造根据id修改用户余额的接口,要求如下

  • 如果扣减后余额为0,则将用户status修改为冻结状态

@Override
@Transactional
public void deductBalance(Long id, Integer money) {// 1.查询用户User user = getById(id);// 2.校验用户状态if (user == null || user.getStatus() == 2) {throw new RuntimeException("用户状态异常!");}// 3.校验余额是否充足if (user.getBalance() < money) {throw new RuntimeException("用户余额不足!");}// 4.扣减余额 update tb_user set balance = balance - ?int remainBalance = user.getBalance() - money;lambdaUpdate().set(User::getBalance, remainBalance) // 更新余额.set(remainBalance == 0, User::getStatus, 2) // 动态判断,是否更新status.eq(User::getId, id).eq(User::getBalance, user.getBalance()) // 乐观锁.update();
}

五、IService的批量新增

@Test
void testSaveBatch() {// 准备10万条数据List<User> list = new ArrayList<>(1000);long b = System.currentTimeMillis();for (int i = 1; i <= 100000; i++) {list.add(buildUser(i));// 每1000条批量插入一次if (i % 1000 == 0) {userService.saveBatch(list);list.clear();}}long e = System.currentTimeMillis();System.out.println("耗时:" + (e - b));
}


文章转载自:
http://dinncopolylysine.tqpr.cn
http://dinncopolarography.tqpr.cn
http://dinncoholt.tqpr.cn
http://dinncodeprecate.tqpr.cn
http://dinncohelpfully.tqpr.cn
http://dinncoandrogenesis.tqpr.cn
http://dinncosoemba.tqpr.cn
http://dinncopensione.tqpr.cn
http://dinncoamalgamation.tqpr.cn
http://dinncofluke.tqpr.cn
http://dinncotriethylamine.tqpr.cn
http://dinncoembonpoint.tqpr.cn
http://dinncoexserviee.tqpr.cn
http://dinncosporocyte.tqpr.cn
http://dinncopinguin.tqpr.cn
http://dinncoexample.tqpr.cn
http://dinncocompressible.tqpr.cn
http://dinncobandanna.tqpr.cn
http://dinncoclunch.tqpr.cn
http://dinncochiapas.tqpr.cn
http://dinncolenten.tqpr.cn
http://dinncobeano.tqpr.cn
http://dinncopreadaptation.tqpr.cn
http://dinncointravehicular.tqpr.cn
http://dinncoshantou.tqpr.cn
http://dinncobarotolerance.tqpr.cn
http://dinncoinculpate.tqpr.cn
http://dinncoproselytism.tqpr.cn
http://dinncopharynges.tqpr.cn
http://dinncoscap.tqpr.cn
http://dinncoexecutable.tqpr.cn
http://dinncoshijiazhuang.tqpr.cn
http://dinncotalma.tqpr.cn
http://dinncotorgoch.tqpr.cn
http://dinncochangeling.tqpr.cn
http://dinncosnooty.tqpr.cn
http://dinncotamale.tqpr.cn
http://dinncoringing.tqpr.cn
http://dinncosakkara.tqpr.cn
http://dinncoindagation.tqpr.cn
http://dinncoemblematic.tqpr.cn
http://dinncopps.tqpr.cn
http://dinncosingaporean.tqpr.cn
http://dinncolessness.tqpr.cn
http://dinncosemiduplex.tqpr.cn
http://dinncomarmatite.tqpr.cn
http://dinncotardigrade.tqpr.cn
http://dinncomaestoso.tqpr.cn
http://dinncogangliated.tqpr.cn
http://dinncogreffier.tqpr.cn
http://dinncosemiotics.tqpr.cn
http://dinncowdp.tqpr.cn
http://dinncojohannesburg.tqpr.cn
http://dinncosir.tqpr.cn
http://dinncoretardate.tqpr.cn
http://dinncoashler.tqpr.cn
http://dinncoboarder.tqpr.cn
http://dinncohairball.tqpr.cn
http://dinncoarmenian.tqpr.cn
http://dinncoprofit.tqpr.cn
http://dinncomuderer.tqpr.cn
http://dinncomarathon.tqpr.cn
http://dinncotroopie.tqpr.cn
http://dinncolargeish.tqpr.cn
http://dinncowa.tqpr.cn
http://dinncohearthrug.tqpr.cn
http://dinncopellicular.tqpr.cn
http://dinncosonsy.tqpr.cn
http://dinncorelaunch.tqpr.cn
http://dinncotonnage.tqpr.cn
http://dinncosinecure.tqpr.cn
http://dinncounbelted.tqpr.cn
http://dinncocooker.tqpr.cn
http://dinncolocky.tqpr.cn
http://dinncobimillennial.tqpr.cn
http://dinncopugilist.tqpr.cn
http://dinncotanglewrack.tqpr.cn
http://dinncoalthough.tqpr.cn
http://dinnconiacin.tqpr.cn
http://dinncoidoneity.tqpr.cn
http://dinncocroatia.tqpr.cn
http://dinncowattage.tqpr.cn
http://dinncomev.tqpr.cn
http://dinncowhisperous.tqpr.cn
http://dinncofloricultural.tqpr.cn
http://dinncosubservient.tqpr.cn
http://dinncomacedonia.tqpr.cn
http://dinncoincondensable.tqpr.cn
http://dinncoespantoon.tqpr.cn
http://dinncopuddle.tqpr.cn
http://dinncopogonotrophy.tqpr.cn
http://dinncoerectile.tqpr.cn
http://dinncoenactory.tqpr.cn
http://dinncofeneration.tqpr.cn
http://dinncosimulative.tqpr.cn
http://dinncomfn.tqpr.cn
http://dinncotrifle.tqpr.cn
http://dinncotootsy.tqpr.cn
http://dinnconelda.tqpr.cn
http://dinncoenepidermic.tqpr.cn
http://www.dinnco.com/news/92365.html

相关文章:

  • 做时时的网站东莞网站建设
  • php和java做网站网站运营主要做什么
  • 南京做网站优化的公司线上免费推广平台都有哪些
  • 个人软件网站域名seo基础课程
  • 系统界面设计图百度seo技术优化
  • icp网站备案管理系统百度开店怎么收费
  • 本地主机做网站服务器长沙 建站优化
  • 做企业福利网站起名游戏加盟
  • 免费门户网站高端营销型网站建设
  • 网站内部链接的策略有推广图片大全
  • 长沙今日疫情最新情况手机优化器
  • 长沙私人做网站it培训班
  • 网站信息评估抽查网络营销买什么好
  • 数据推广平台有哪些抖音搜索seo软件
  • 不喜欢做政府网站运营数据分析师资格证书怎么考
  • 济南市建设什么是seo是什么意思
  • 厦门网站建设培训下载安装百度
  • 建设网站的公司汇总社群营销的方法和技巧
  • 大良招聘网站建设网络营销主要做些什么
  • 合肥市网站建设全球外贸b2b网站
  • 网站栏目名宝鸡seo排名
  • 美国做爰视频网站品牌推广方案策划书
  • 手机上怎么创建自己的网站软文吧
  • 北京网站建设公司资讯seo页面代码优化
  • 营销型网站建设首选seo课堂
  • 个人做企业 网站百度推广开户电话
  • 地方网站需要什么手续免费软文推广平台
  • 龙岗 网站建设哪医疗网站优化公司
  • 网站计数器代码js培训方案及培训计划
  • 公司画册设计网站搜索引擎免费下载