我们学习的springboot微服务框架已经开发了很多次项目了,不过那些大多数我们用的技术方法与思路都是之前开发ssm框架留下来的老旧的思想,已经之前没有发现的毛病都留下来,最近我在开发企业项目之余打算好好的整理一下以前各种测试留下的问题,防止给自己留坑!
如果数据库表已经设置了索引,最好通过索引搜索某一列的值,直接通过值与值的比对确定登录结果,如果数据库的数据有很大的话你又没有配置redis缓存,那么一旦有很多用户登录,那么数据库的压力就会非常大。
会不断的报出某一列user_id找不到,数据库语法异常。
自带的log日志功能可以调试提示信息
cmd命令自行网络查询
spring:
application:
name: sprintBootDemo
mvc:
static-path-pattern: /static/**
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/cop?serverTimezone=UTC
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
thymeleaf:
servlet:
content-type: text/html
cache: false
mode: HTML
prefix: /templates/
suffix: .html
server:
port: 8080
mybatis-plus:
configuration:
# 默认的驼峰转下划线的设置,该key为true表示启动转换
map-underscore-to-camel-case: false
use cop;
create table user(
`userId` int(0) auto_increment comment '用户id',
`userName` varchar(12) not null comment '姓名',
`userAccount` varchar(11) not null comment '账号',
`userAge` int not null comment '年龄',
`userSex` varchar(2) default '男' comment '年龄',
`userPhone` varchar(11) not null comment '电话',
`userAddress` varchar(32) not null comment '地址',
`password` varchar(11) not null comment '密码',
unique index (userAccount),
primary key (userId,userAccount,userPhone)
);
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private Integer userId;
private String userName;
private String userAccount;
private Integer userAge;
private String userSex;
private String userPhone;
private String userAddress;
private String password;
}
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hlc.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper {
}
import com.baomidou.mybatisplus.extension.service.IService;
import com.hlc.entity.User;
public interface UserService extends IService {
}
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hlc.entity.User;
import com.hlc.mapper.UserMapper;
import com.hlc.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl
implements UserService {
}
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hlc.common.R;
import com.hlc.entity.User;
import com.hlc.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
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;
import javax.servlet.http.HttpServletRequest;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 登录
* POST/GetMapping取决于前端请求方式
*
* @param request
* @param user
* @return R
*/
@PostMapping("/login")
public R login(HttpServletRequest request, @RequestBody User user) {
/*1.将密码进过后端的MD5加密*/
String password = user.getPassword();
DigestUtils.md5DigestAsHex(password.getBytes());
/*2.根据名称查询数据库*/
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
/*这里的索引约束唯一的就是我们的用户的账户*/
queryWrapper.eq(User::getUserAccount,user.getUserAccount());
User result = userService.getOne(queryWrapper);
/*3.判断查询数据库是否成功*/
if (result == null){
return R.error("账户不存在!登录失败!");
}
/*4.密码比对,不一致返回登录失败*/
if (!result.getPassword().equals(password)){
return R.error("密码错误!登录失败!");
}
/*5.登录验证成功,将用户账号存入session*/
request.getSession().setAttribute("user",result.getUserAccount());
return R.success(result);
}
}
port lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* 通用结果封装类
*
* @param
*/
@Data
public class R {
private Integer code;
private String msg;
private T data;
private Map map = new HashMap();
public static R success(T object) {
R r = new R();
r.data = object;
r.code = 1;
return r;
}
public static R error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
public R add(String key, Object value) {
this.map.put(key, value);
return this;
}
}
Page({
data: {
msg: "",
},
tes01(){
let th = this;
wx.request({
url: 'http://192.168.100.216:8080/user/login/',
method:"POST",
data:{
userAccount:'1234555',
password:'1234555'
},
header: {
一定要这么写,不然会报问题
"Content-Type": "application/json;charset=utf-8"
},
success(res){
console.log(res.data),
th.setData({
msg: JSON.stringify(res.data.data)
})
}
})
}
})
{{msg}}
我们发现小程序访问springboot应用程序的测试难度远远比我们的前端要简单,前几天新学的ajax之后还要结合jq学习其他的前端技术,这样对我们后端开发人员来说有点不友好。
这个项目第一步用户登录也就测试完成了,之后我们将会在一周的时间内完成一个前后端分离的企业级开发模式的项目,如果有兴趣可以持续关注我的文章!