spring boot 、maven、mybatis-plus、postman
需要安装idea、jvm、maven、mysql
采用调用接口的形式返回给前端
纯接口,没有.jsp,没有.html
接口功能:
1、登陆:
1)输入用户名密码登陆
2)使用md5加密与数据库的密文做验证
2、注册:
1)输入用户名、密码、性别、年龄、电话号码
2)用户名、密码、年龄、电话号码均采用正则校验规范
3、通过用户名获取用户数据
1)输入用户名
4、获取所有用户的所有数据
参考我的另一篇博客新建spring boot项目
https://blog.csdn.net/obitosbb/article/details/116002990
ApiRest.class
-
package com.example.demo02.commom.resp;
-
-
import lombok.AllArgsConstructor;
-
import lombok.Builder;
-
import lombok.Data;
-
import lombok.NoArgsConstructor;
-
-
@Data
-
@AllArgsConstructor
-
@NoArgsConstructor
-
@Builder
-
public
class ApiResp <T> {
-
-
/**
-
* true: 成功的
-
* false: 失败的
-
*/
-
private
boolean success;
-
-
/**
-
* 错误码
-
*/
-
private String code;
-
-
/**
-
* 错误信息
-
*/
-
private String msg;
-
-
/**
-
* 数据
-
*/
-
private T data;
-
-
/**
-
* 单纯返回成功响应
-
* @return
-
*/
-
-
-
-
public
static <T>
ApiResp repuestMessage(boolean success,String code,String msg,T data){
-
ApiResp apiResp = ApiResp.builder().success(
true).code(code).msg(msg).data(data).build();
-
return apiResp;
-
}
-
-
-
-
-
-
public static ApiResp successResp(){
-
ApiResp apiResp = ApiResp.builder().success(
true).build();
-
return apiResp;
-
}
-
-
public
static <T>
ApiResp successResp(String msg,T data){
-
ApiResp apiResp = ApiResp.builder().success(
true).msg(msg).data(data).build();
-
return apiResp;
-
}
-
-
public
static <T>
ApiResp successResp(String code,String msg,T data){
-
ApiResp apiResp = ApiResp.builder().success(
true).code(code).msg(msg).data(data).build();
-
return apiResp;
-
}
-
-
-
-
-
-
-
public static ApiResp failResp(){
-
ApiResp apiResp = ApiResp.builder().success(
false).build();
-
return apiResp;
-
}
-
-
public static ApiResp failResp(String msg){
-
ApiResp apiResp = ApiResp.builder().success(
false).code(
"1111").msg(msg).build();
-
return apiResp;
-
}
-
-
public static ApiResp failResp(String code, String msg){
-
ApiResp apiResp = ApiResp.builder().success(
false).code(code).msg(msg).build();
-
return apiResp;
-
}
-
-
public
static <T>
ApiResp failResp(String code,String msg,T data){
-
ApiResp apiResp = ApiResp.builder().success(
false).code(code).msg(msg).data(data).build();
-
return apiResp;
-
}
-
-
-
public
static <T>
ApiResp inputSpecification(String msg){
-
ApiResp apiResp = ApiResp.builder().msg(msg).build();
-
return apiResp;
-
}
-
}
Demo01Controller.class
-
package com.example.demo02.controller;
-
-
-
import com.example.demo02.commom.resp.ApiResp;
-
import com.example.demo02.model.Demo01;
-
import com.example.demo02.service.IDemo01Service;
-
import lombok.extern.slf4j.Slf4j;
-
import org.springframework.web.bind.annotation.*;
-
-
import javax.annotation.Resource;
-
import java.util.HashMap;
-
import java.util.Scanner;
-
import java.util.List;
-
import java.util.Map;
-
-
/**
-
* <p>
-
* 用户信息表 前端控制器
-
* </p>
-
*
-
* @author AutoCoder
-
* @since 2021-04-10
-
*/
-
@RestController
-
@RequestMapping("/test")
-
@Slf4j
-
public
class Demo01Controller {
-
-
@Resource
-
private IDemo01Service demo01Service;
-
-
@GetMapping("/message")
-
public List<Demo01> message(){
-
-
List<Demo01> demo01 = demo01Service.message();
-
return demo01;
-
}
-
-
@PostMapping("/userMessage")
-
public ApiResp userMessage(@RequestBody Demo01 demo01){
-
-
demo01 = demo01Service.selectMessage(demo01.getUsername());
-
return demo01 ==
null ? ApiResp.failResp(
"查询失败"):ApiResp.successResp(
"查询成功",demo01);
-
}
-
-
-
@PostMapping("/login")
-
public ApiResp login(@RequestBody Demo01 demo01){
-
-
Demo01 demo011 = demo01Service.isRegistration(demo01.getUsername(),demo01.getPassword());
-
//log.info("[Demo01Controller.serverStart] demo011 = {}",JSON.toJSONString(demo011));
-
-
if(
null == demo011){
-
//log.info("[Demo01Controller.serverStart] 登陆失败");
-
return ApiResp.failResp(
"登陆失败");
-
}
-
-
demo011.setPassword(
"");
-
return ApiResp.successResp(
"登陆成功",demo011);
-
}
-
-
-
@PostMapping("/registration")
-
public ApiResp registration(@RequestBody Demo01 demo01){
-
-
//int demo011 = demo01Service.addUser(demo01.getUsername(),demo01.getPassword(), demo01.isSex(), demo01.getPhone(),demo01.getAge());
-
//return demo011 == 0 ? ApiResp.repuestMessage(false,"400","注册失败",demo011):ApiResp.repuestMessage(true,"200","注册成功",demo011);
-
-
ApiResp demo011 = demo01Service.addUser(demo01.getUsername(),demo01.getPassword(), demo01.isSex(), demo01.getPhone(),demo01.getAge());
-
-
return demo011;
-
}
-
-
}
Demo01Mapper.interface
-
package com.example.demo02.mapper;
-
-
import com.example.demo02.commom.resp.ApiResp;
-
import com.example.demo02.model.Demo01;
-
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
import org.apache.ibatis.annotations.Insert;
-
import org.apache.ibatis.annotations.Param;
-
import org.apache.ibatis.annotations.Select;
-
-
import java.util.List;
-
-
/**
-
* <p>
-
* 用户信息表 Mapper 接口
-
* </p>
-
*
-
* @author AutoCoder
-
* @since 2021-04-10
-
*/
-
public
interface Demo01Mapper extends BaseMapper<Demo01> {
-
-
@Select("select * from demo01 where username = #{username} and password = #{password}")
-
public Demo01 isRegistration(@Param("username") String Username,@Param("password") String password);
-
-
@Insert("insert into demo01(username,password,sex,phone,age) values(#{username},#{password},#{sex},#{phone},#{age})")
-
public int addUser(@Param("username") String username, @Param("password") String password, @Param("sex") boolean sex, @Param("phone") String phone, @Param("age") int age);
-
-
@Select("select * from demo01 where username=#{username}")
-
public Demo01 selectMessage(@Param("username") String username);
-
-
@Select("select * from demo01")
-
public List<Demo01> message();
-
}
Demo01.class
-
package com.example.demo02.model;
-
-
import com.baomidou.mybatisplus.annotation.IdType;
-
import com.baomidou.mybatisplus.extension.activerecord.Model;
-
import com.baomidou.mybatisplus.annotation.TableId;
-
import lombok.Data;
-
import lombok.EqualsAndHashCode;
-
import lombok.NoArgsConstructor;
-
import lombok.experimental.Accessors;
-
import org.springframework.beans.factory.annotation.Autowired;
-
-
-
-
/**
-
* <p>
-
* 用户信息表
-
* </p>
-
*
-
* @author AutoCoder
-
* @since 2021-04-10
-
*/
-
@Data
-
@EqualsAndHashCode(callSuper = true)
-
@Accessors(chain = true)
-
public
class Demo01 extends Model {
-
-
private
static
final
long serialVersionUID =
1L;
-
-
@TableId(value = "userid", type = IdType.AUTO)
-
private Integer userid;
-
-
//@Resource
-
@Autowired
-
private String username;
-
@Autowired
-
private String password;
-
@Autowired
-
private
int age;
-
@Autowired
-
private
boolean sex;
-
@Autowired
-
private String phone;
-
-
}
Demo01ServiceImpl.class
-
package com.example.demo02.service.impl;
-
-
-
import com.example.demo02.commom.resp.ApiResp;
-
import com.example.demo02.model.Demo01;
-
import com.example.demo02.mapper.Demo01Mapper;
-
import com.example.demo02.service.IDemo01Service;
-
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
import org.springframework.stereotype.Service;
-
import java.util.regex.Matcher;
-
import java.util.regex.Pattern;
-
import java.util.List;
-
/**
-
* <p>
-
* 用户信息表 服务实现类
-
* </p>
-
*
-
* @author AutoCoder
-
* @since 2021-04-10
-
*/
-
-
@Service
-
public
class Demo01ServiceImpl extends ServiceImpl<Demo01Mapper, Demo01> implements IDemo01Service {
-
-
//帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
-
public boolean isUsername(String username){
-
String pattern =
"^[a-zA-Z][a-zA-Z0-9_]{4,15}$";
-
Pattern r = Pattern.compile(pattern);
-
Matcher m = r.matcher(username);
-
-
return m.matches();
-
}
-
-
//强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间)
-
public boolean isPassword(String password){
-
String pattern =
"^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$";
-
Pattern r = Pattern.compile(pattern);
-
Matcher m = r.matcher(password);
-
-
return m.matches();
-
}
-
-
//手机号码
-
public boolean isPhone(String phone){
-
String pattern =
"^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";
-
Pattern r = Pattern.compile(pattern);
-
Matcher m = r.matcher(phone);
-
-
return m.matches();
-
}
-
-
public boolean isAge(int age){
-
if(age>
1&&age>
150){
-
return
false;
-
}
-
return
true;
-
}
-
-
public List<Demo01> message(){
-
return baseMapper.message();
-
}
-
-
//是否已经注册
-
public Demo01 isRegistration(String username,String password){
-
-
password=MessageDigest5.interfaceMd5(password,
"utf-8");
-
return baseMapper.isRegistration(username, password);
-
}
-
-
//增加用户
-
public ApiResp addUser(String username, String password, boolean sex, String phone, int age){
-
-
password=MessageDigest5.interfaceMd5(password,
"utf-8");
-
String inputSpecification;
-
-
if(!isUsername(username)){
-
System.out.println(
"-------------用户名规范-------------");
-
return ApiResp.inputSpecification(
"用户名不符合规范");
-
}
-
// if(!isPassword(password)){
-
// return ApiResp.inputSpecification("密码不符合规范");
-
// }
-
if(!isPhone(phone)){
-
return ApiResp.inputSpecification(
"电话号码不符合规范");
-
}
-
if(!isAge(age)){
-
return ApiResp.inputSpecification(
"年龄不符合规范");
-
}
-
else{
-
baseMapper.addUser(username,password,sex,phone,age);
-
return ApiResp.inputSpecification(
"注册信息符合规范");
-
}
-
}
-
-
//查询用户信息
-
public Demo01 selectMessage(String username){
-
return baseMapper.selectMessage(username);
-
}
-
-
-
}
-
MessageDigest5.class
-
package com.example.demo02.service.impl;
-
-
import java.security.MessageDigest;
-
-
public
class MessageDigest5 {
-
private
static
final String hexDigits[] = {
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"a",
"b",
"c",
"d",
"e",
"f" };
-
-
/**
-
* 将1个字节(1 byte = 8 bit)转为 2个十六进制位 1个16进制位 = 4个二进制位 (即4 bit)
-
* 转换思路:最简单的办法就是先将byte转为10进制的int类型,然后将十进制数转十六进制
-
*/
-
private static String byteToHexString(byte b) {
-
// byte类型赋值给int变量时,java会自动将byte类型转int类型,从低位类型到高位类型自动转换
-
int n = b;
-
// 将十进制数转十六进制
-
if (n <
0)
-
n +=
256;
-
int d1 = n /
16;
-
int d2 = n %
16;
-
// d1和d2通过访问数组变量的方式转成16进制字符串;比如 d1 为12 ,那么就转为"c";
-
// 因为int类型不会有a,b,c,d,e,f等表示16进制的字符
-
return hexDigits[d1] + hexDigits[d2];
-
}
-
-
/**
-
* 将字节数组里每个字节转成2个16进制位的字符串后拼接起来
-
*/
-
private static String byteArrayToHexString(byte b[]) {
-
StringBuffer resultSb =
new StringBuffer();
-
for (
int i =
0; i < b.length; i++) {
-
resultSb.append(byteToHexString(b[i]));
-
}
-
return resultSb.toString();
-
}
-
-
/**
-
* MD5算法 默认固定长度是 128bit 即 32个16进制位 String origin :需要进行MD5计算的字符串 String
-
* charsetname :MD5算法的编码
-
*/
-
private static String MD5_32(String origin, String charsetname) {
-
String resultString =
null;
-
try {
-
// 1,创建MessageDigest对象
-
MessageDigest md = MessageDigest.getInstance(
"MD5");
-
// 2,向MessageDigest传送要计算的数据;传入的数据需要转化为指定编码的字节数组
-
md.update(origin.getBytes(charsetname));
-
// 3,计算摘要
-
byte[] bytesResult = md.digest();
-
-
// 第2步和第3步可以合并成下面一步
-
// byte[] bytesResult = md.digest(origin.getBytes(charsetname));
-
-
// 4,将字节数组转换为16进制位
-
resultString = byteArrayToHexString(bytesResult);
-
}
catch (Exception e) {
-
e.printStackTrace();
-
}
-
return resultString;
-
-
}
-
-
public static String interfaceMd5(String origin, String charsetname){
-
return MD5_32(origin,charsetname);
-
}
-
-
}
IDemo01Service.interface
-
package com.example.demo02.service;
-
-
import com.example.demo02.commom.resp.ApiResp;
-
import com.example.demo02.model.Demo01;
-
import com.baomidou.mybatisplus.extension.service.IService;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import java.util.List;
-
-
/**
-
* <p>
-
* 用户信息表 服务类
-
* </p>
-
*
-
* @author AutoCoder
-
* @since 2021-04-10
-
*/
-
-
public
interface IDemo01Service extends IService<Demo01> {
-
//int addUser(String username,String password,String sex,String phone,int age);
-
Demo01 isRegistration(String username,String password);
-
-
ApiResp addUser(String username, String password, boolean sex, String phone, int age);
-
-
Demo01 selectMessage(String username);
-
-
boolean isUsername(String username);
-
boolean isPassword(String password);
-
boolean isPhone(String phone);
-
boolean isAge(int age);
-
-
List<Demo01> message();
-
}
数据库表
postman展示-注册功能
postman展示-登陆功能
postman展示-获取所有用户的所有数据
可能会遇到的问题和解决方案
1、不会新建Spring boot工程
解决:参看这篇文章开头的链接里的文章
2、新建的Spring boot工程跑不起来
解决:文件夹是否建错地方,数据库名、表名、密码、驱动是否修改
3、pom.xml一堆红线
解决:Spring boot自动加载,编译即可
4、直接复制有些类名就标红
解决:直接复制idea不自动加载,手打出来类名,标红的变黑后再删掉自己打的
欢迎交流讨论
转载:https://blog.csdn.net/obitosbb/article/details/116003854
查看评论