好家伙,

 

代码已开源(Gitee)

PH-planewar: 个人开发的全栈小游戏 前端:vue2 + element-ui 后端: Springboot + mybatis-plus 数据库: mysql 目前实现功能: 1.注册登陆 2.游戏数据保存 3.游戏运行 (gitee.com)

后端这边update方法改了一下

controller类:

package com.wulaoda.loginhouduan.controller;

import com.wulaoda.loginhouduan.entity.SysUserEntity;
import com.wulaoda.loginhouduan.req.SysUserLoginReq;
import com.wulaoda.loginhouduan.req.SysUserSaveReq;
import com.wulaoda.loginhouduan.req.SysUserUpdateReq;
import com.wulaoda.loginhouduan.resp.CommonResp;
import com.wulaoda.loginhouduan.resp.SysUserLoginResp;
import com.wulaoda.loginhouduan.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*; @RestController
//绑定数据库表名
@RequestMapping("/sys-user")
public class SysUserController { @Autowired
private SysUserService sysUserService; @PostMapping("register")
// zxcv1234
//@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);
public CommonResp register(@RequestBody SysUserSaveReq req){
//对密码进行md5加密
req.setPassword(DigestUtils.md5DigestAsHex(req.getPassword().getBytes()));
//resp为返回数据
CommonResp resp = new CommonResp<>();
//真正的注册
SysUserEntity saveResp = sysUserService.register(req);
if(saveResp ==null){
resp.setSuccess(false);
}
return resp;
} @PostMapping("login")
public CommonResp login(@RequestBody SysUserLoginReq req){
// zxcv1234
req.setPassword(DigestUtils.md5DigestAsHex(req.getPassword().getBytes()));
CommonResp resp = new CommonResp<>();
SysUserLoginResp loginResp = sysUserService.login(req);
if (loginResp == null) {
resp.setSuccess(false);
}
resp.setContent(loginResp);
return resp;
} @PostMapping("update")
public CommonResp update(@RequestBody SysUserUpdateReq req){
CommonResp resp = new CommonResp<>();
sysUserService.update(req);
return resp;
}
@GetMapping("getallscore")
public CommonResp getallscore(){
CommonResp resp = new CommonResp<>();
sysUserService.getallscore();
return resp;
} }

service类

package com.wulaoda.loginhouduan.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wulaoda.loginhouduan.entity.SysUserEntity;
import com.wulaoda.loginhouduan.mapper.SysUserMapper;
import com.wulaoda.loginhouduan.req.SysUserLoginReq;
import com.wulaoda.loginhouduan.req.SysUserSaveReq;
import com.wulaoda.loginhouduan.req.SysUserUpdateReq;
import com.wulaoda.loginhouduan.resp.SysUserLoginResp;
import com.wulaoda.loginhouduan.resp.SysUserUpdateResp;
import com.wulaoda.loginhouduan.service.SysUserService;
import com.wulaoda.loginhouduan.utils.CopyUtil;
import com.wulaoda.loginhouduan.utils.SnowFlake;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import javax.annotation.Resource;
import java.util.List; @Service
//implements表示接口的实现,必须实现接口中的所有方法
//此处继承SysUserService的方法并改写
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity> implements SysUserService { @Resource
@Autowired
private SysUserMapper sysUserMapper; @Autowired
private SnowFlake snowFlake; //注册
@Override
public SysUserEntity register(SysUserSaveReq req) {
//
SysUserEntity user = CopyUtil.copy(req, SysUserEntity.class);
//ObjectUtils.isEmpty判断对象是否为空
if(ObjectUtils.isEmpty(req.getId())){
//查看用户名是否已注册
SysUserEntity userDb = selectByLoginName(req.getLoginName());
//用户名未被注册
if(ObjectUtils.isEmpty(userDb)){
//用算法给帮它设置一个新id
user.setId(snowFlake.nextId());
//这步是真正的往数据库里插数据了
sysUserMapper.insert(user);
//哈哈,没东西返回了
}else{
//用户名已被注册,返回null
return null;
}
}
//无用返回
return user;
}
//登陆
@Override
public SysUserLoginResp login(SysUserLoginReq req) {
SysUserEntity userDb = selectByLoginName(req.getLoginName());
QueryWrapper<SysUserEntity> wrapper = new QueryWrapper<>();
if(ObjectUtils.isEmpty(userDb)){
//用户不存在
return null;
}else {
String s1 = userDb.getPassword();
String s2 = req.getPassword();
//进行字符串校验
if(s1.equals(s2)){
//密码验证成功
int a = userDb.getLife(); SysUserLoginResp userLoginResp = CopyUtil.copy(userDb, SysUserLoginResp.class);
return userLoginResp;
}else {
//密码校验失败
return null;
}
}
}
//数据更新
@Override
public SysUserUpdateResp update(SysUserUpdateReq req){
// SysUserEntity userDb = selectByLoginName(req.getLoginName());
// QueryWrapper<SysUserEntity> wrapper = new QueryWrapper<>();
// LambdaUpdateWrapper<SysUserEntity> wrapper1 = new LambdaUpdateWrapper<>();
// wrapper1.set(SysUserEntity::getLife, req.getLife());
// sysUserMapper.update(userDb,wrapper1);
//重写
//网上的例子
// LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
// lambdaUpdateWrapper.eq(User::getName, "rhb").set(User::getAge, 18);
// Integer rows = userMapper.update(null, lambdaUpdateWrapper);
//以下版本只能修改单项数据
// LambdaUpdateWrapper<SysUserEntity> wrapper1 = new LambdaUpdateWrapper<>();
// wrapper1.eq(SysUserEntity::getLoginName, req.getLoginName()).set(SysUserEntity::getLife, req.getLife());
// sysUserMapper.update(null,wrapper1);
LambdaUpdateWrapper<SysUserEntity> wrapper1 = new LambdaUpdateWrapper<>();
wrapper1.eq(SysUserEntity::getLoginName, req.getLoginName()).set(SysUserEntity::getLife, req.getLife());
wrapper1.eq(SysUserEntity::getLoginName, req.getLoginName()).set(SysUserEntity::getScore, req.getScore());
sysUserMapper.update(null,wrapper1);
return null;
}
//获取所有分数getallscore
// @Override
// public void getallscore(){
// // 查询多个字段,其它不需要查询的字段则为null
//// List<Object> objects = sysUserMapper.selectObjs(new QueryWrapper<SysUserEntity>()
//// .lambda().select(SysUserEntity::getLoginName, SysUserEntity::getScore));
// // 查询单个字段
//// List<String> strings = adminService.listObjs(new QueryWrapper<Admin>()
//// .lambda().select(Admin::getAdminMobile), Object::toString);
//// 查询多个字段,其它不需要查询的字段则为null
//// QueryWrapper<SysUserLoginResp> userQueryWrapper = Wrappers.query();
////
//// userQueryWrapper.select(SysUserLoginResp.class , e -> !e.getColumn().equals("loginName")).lt("score" , 50);
//// List<SysUserLoginResp> userList = sysUserMapper.selectList(userQueryWrapper);
//// userList.forEach(System.out::println);
////// return (SysUserLoginResp) userList;
//// return null;
//
// QueryWrapper<SysUserLoginResp> userQueryWrapper = new QueryWrapper<>();
// userQueryWrapper.select(SysUserLoginResp.class , e->!e.getColumn().equals("password"))
// .like("username" , "k")
// .between("age" , 25 , 35)
// .isNotNull("password");
// List<SysUserLoginResp> userList = sysUserMapper.selectList(userQueryWrapper);
// userList.forEach(System.out::println);
// }
//查询loginName是否被注册
public SysUserEntity selectByLoginName(String loginName){
//QueryWrapper<>()
QueryWrapper<SysUserEntity> wrapper = new QueryWrapper<>();
//wrapper.lambda().eq()单表查询,在"SysUserEntity::getLoginName"找一个指定的"loginName"
wrapper.lambda().eq(SysUserEntity::getLoginName,loginName);
//BaseMapper的selectList()方法,根据id批量查询
List<SysUserEntity> userEntityList = sysUserMapper.selectList(wrapper);
//CollectionUtils.isEmpty()判断集合是否为空
if(CollectionUtils.isEmpty(userEntityList)){
//若判断为空,则返回null,意思是没被注册过
return null;
}else {
//查到了,将这条数据返回
return userEntityList.get(0);
}
}
}

对象实体类:

package com.wulaoda.loginhouduan.resp;

public class SysUserUpdateResp {
private String LoginName; private int life; private int score; public String getLoginName() {
return LoginName;
} public void setLoginName(String loginName) {
LoginName = loginName;
} public int getLife() {
return life;
} public void setLife(int life) {
this.life = life;
} public int getScore() {
return score;
} public void setScore(int score) {
this.score = score;
} @Override
public String toString() {
return "SysUserUpdateReq{" +
"LoginName='" + LoginName + '\'' +
", life=" + life +
", score=" + score +
'}';
}
}

我的第一个项目(十五) :完成数据保存功能(后端,改update)的更多相关文章

  1. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

  2. Django笔记二十五之数据库函数之日期函数

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十五之数据库函数之日期函数 日期函数主要介绍两个大类,Extract() 和 Trunc() Extract() 函数作用是提取日期,比 ...

  3. 第一百六十五节,jQuery,过滤选择器

    jQuery,过滤选择器 学习要点: 1.基本过滤器 2.内容过滤器 3.可见性过滤器 4.子元素过滤器 5.其他方法 过滤选择器简称:过滤器.它其实也是一种选择器,而这种选择器类似与 CSS3 (h ...

  4. 我的第一个项目(十二) :分数和生命值的更新(后端增删查改的"改")

    好家伙,写后端,这多是一件美逝. 关于这个项目的代码前面的博客有写  我的第一个独立项目 - 随笔分类 - 养肥胖虎 - 博客园 (cnblogs.com) 现在,我们登陆进去了,我开始和敌人战斗,诶 ...

  5. 第一章-第十五题(谈谈你对压力的看法,以及怎么和别人合作, 帮助别人,把压力转化为动力,在互相帮助的环境中成长。)--By林培文

    压力是一把双刃剑,有害也有利,重点是如何看待压力,从而做到趋利避害,化压力为动力.对于当前的我来说,压力利大于弊.形成这一想法,我经历了好几个阶段.第一个阶段是小学时代,那会整天就知道玩,也没什么压力 ...

  6. 第一百二十五节,JavaScript,XML

    JavaScript,XML 学习要点: 1.IE中的XML 2.DOM2中的XML 3.跨浏览器处理XML 随着互联网的发展,Web应用程序的丰富,开发人员越来越希望能够使用客户端来操作XML技术. ...

  7. 第一百七十五节,jQuery,工具函数

    jQuery,工具函数 学习要点: 1.字符串操作 2.数组和对象操作 3.测试操作 4.URL 操作 5.浏览器检测 6.其他操作 工具函数是指直接依附于 jQuery 对象,针对 jQuery 对 ...

  8. 第一百三十五节,JavaScript,封装库--拖拽

    JavaScript,封装库--拖拽 封装库新增1个拖拽方法 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:一般需要在css文件将元素里的某一个区块光标设置成提示可以拖拽, ...

  9. 第一百八十五节,jQuery,Ajax 表单插件

    jQuery,Ajax 表单插件 学习要点: 1.核心方法 2.option 参数 3.工具方法 传统的表单提交,需要多次跳转页面,极大的消耗资源也缺乏良好的用户体验.而这款 form.js 表单的 ...

  10. (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)

    一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...

随机推荐

  1. [转帖]关于 AREX

    https://arextest.github.io/website/zh-Hans/docs/intro/ AREX 介绍​ 背景​ 对于一个初上线的简单服务,只需通过常规的自动化测试加上人工即可解 ...

  2. expect 的简单学习与使用

    背景 最近工作中总有很多重复的事项. 比较繁琐,想着能够简单一点是一点的角度 准备采用expect来建华部分工作量. 其实还可以使用其他方式来处理. 但是感觉expect还是能够简单明了的. 所以暂时 ...

  3. with(上下文管理器)的用法

    with语句可以自动管理上下文资源,不论什么原因(成功或失败)跳出with语句,都能保证文件正确关闭,并 释放资源,不用手动去close掉资源 1.with语句中有两个内置方法__enter__和__ ...

  4. 【小优化】golang中取两个字符串的公共前缀的长度

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在VM的merge部分的代码中发现这样一个函数: func ...

  5. 根据TxID获取上链数据

    根据TxID获取上链信息 前段时间应甲方爸爸的要求,需要在现有的业务系统中新增一个根据TxID来查询上链信息的接口.搜了一圈发现相关的信息很少,最后只能祭出终极大招:Read Source Code. ...

  6. Fabric-sdk-go操作Chaincode

    因为工作的需要,最近了解了下如何通过sdk来操作Chaincode,本文是sdk使用时的一些操作总结. 在fabric网络启动过程中,一般分为"启动网络 -> 创建通道 -> 加 ...

  7. mac接入两根网线

    mac机接了USB扩展槽之后,扩展槽可以接入一根网线,机器自带一个网线口,这样就可以同时接入两根网线,为什么要这样做? 因为我所在的公司是分内外网的,研发的机器是内网环境,而打包机有时候需要联网,那么 ...

  8. 虚拟IP绑定公网IP访问

    绑定公网 IP 我们目前的虚拟 IP,还不能通过公网的形式进行访问,我们首先,来使用内部的 IP 进行访问看看效果如下: curl 虚拟IP 如上图我访问了两次,第一次访问返回的是 2222 的 ng ...

  9. 深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

    深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述.常用CRNN识别方法.DBNet.CTPN检测方法等.评估指标.应用场景 1.OCR综述 OCR(Optical Character ...

  10. Metasploit 生成带SSL加密载荷

    1.下载证书.Impersonate_SSL模块,下载指定网站的证书. msf6> use auxiliary/gather/impersonate_ssl msf6 auxiliary(gat ...