Roma
世界已黑白,此人已成仙。

年少轻狂,总以为天下事竭力有为。人事尽时,终感力不能及。

将项目运行起来,点击左侧系统工具——》代码生成——》导入选择用户表导入即可

 点击预览,将domain的代码复制到IDEA中,单机domain包直接ctrl+V就行

 导入依赖,在pom文件中导入rome-common

 service,controller,mapper照理

xml文件在main包中与java包同级建一个resources包放对应的xml文件

 

运行之后

 搜索条件这一块只留账号、姓名、电话号码搜,将其余条件代码删除,新增或修改对话框不要注册

 

1.新增功能

1.1前端数据规范

账号为字母或数字或符号任其组合,不为空且唯一,长度不超过30

密码为字母或数字或符号任其组合,不为空,长度不超过30

年龄不能是负的且为整型,年龄不超过300

电话号码规范以"1"开始,第二位是3、4、5、7或8,然后是9个数字(总计11位数字)的字符串

邮箱规范长度不超过30

余额为整型

昵称,头像,姓名,性别,职业任意且合法

 

先做前端的校验

账号和密码不能出现汉字和空格这是条件,两个可以一起做

 

 

 

 年龄不能是负的且为整型

 

 rules中加入

 

电话号码和邮箱规范

rules中加入

在data中 定义规则

 金额规则

 

 

 

 

1.2新增中的性别调整

将性别改为单选框可选男女的那种,在页面中修改如下代码

 然后在后台管理系统中打开系统管理>字典管理->新增

添加一个名为gender的字典名称

 

 找到刚才添加的字典单机它

 再点击新增,添加两个标签分别为男女

 前端页面引入刷新即可看到效果

 

1.3新增中的头像调整

点击上传选择图片,回显图片

 先改前端样式

 

 引入token

定义文件上传参数

 

 url为服务器地址

 

接着 后端实现

创建utilsFileLoad工具类

 

package com.rome.hotel.data.utils;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

public class FileLoad {
public static String imgName = null;
public static String fileUp(MultipartFile file,String dirName){
//参数名和前端input名一样
//file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除
//获取当前项目路径进行拼接
String url = System.getProperty("user.dir")+"\\rome-ui\\src\\assets\\"+dirName+"\\";
//使用uuid重新生成文件名防止文件名重复造成覆盖,uuid+原始文件名
String uuid = UUID.randomUUID().toString();
// uuid+原始文件名
String fileName = uuid.concat(file.getOriginalFilename());

// 将文件转存
try {
file.transferTo(new File(url+fileName));
} catch (IOException e) {
throw new RuntimeException(e);
}
imgName = fileName;
// 返回文件名存在数据库
return imgName;
}
}

  只需要传入文件和要保存的目录即可

在创建一个公共的Controller用来接收前端传进来的文件

 

package com.rome.hotel.data.controller;


import com.rome.hotel.common.core.domain.AjaxResult;
import com.rome.hotel.data.utils.FileLoad;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;




@RestController
@RequestMapping("/file")
public class CommonFileUpOrDown {

/**
* 头像上传
* @param file
* @return
*/

@PostMapping("/avatar/upload")
public AjaxResult upload(MultipartFile file){
String dir = "avatar";
return AjaxResult.success(FileLoad.fileUp(file,dir));
}

}

将头像的地址存储到实体类中

 

 1.4 完善会员的新增功能

在utils包中创建RegexUtils类用来书写正则表达式

 

package com.rome.hotel.data.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 验证规则
 */
public class RegexUtils {


    public static void main(String[] args) {

    }
    /**
     * 账号和密码为字母或数字或符号任其组合
     */
    public static boolean testUsernameOrPassword(String username){
        Pattern pattern = Pattern.compile("^[a-zA-Z0-9!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]{1,30}$");
        Matcher matcher = pattern.matcher(username);
        boolean matches = matcher.matches();
        return  matches;
    }


    /**
     * 年龄大于0小于300且为整数
     */
    public static boolean testAge(String age){
        Pattern pattern = Pattern.compile("^(?:\\d{1,3}(?:\\,\\d{3})*|[1-9]\\d{0,2})$");
        Matcher matcher = pattern.matcher(age);
        boolean matches = matcher.matches();
        return  matches;
    }

    /**
     * 手机号以"1"开始,第二位是3、4、5、7或8,然后是9个数字(总计11位数字)的字符串
     */
    public static boolean testPhoneNumber(String phoneNumber){
        Pattern pattern = Pattern.compile("^1[34578][0-9]{9}$");
        Matcher matcher = pattern.matcher(phoneNumber);
        boolean matches = matcher.matches();
        return  matches;
    }



    /**
     * 验证邮箱,邮箱长度不能超过30位
     */
    public static boolean testEmail(String email){
        Pattern pattern = Pattern.compile("^([a-zA-Z0-9]+[_|\\_|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\_|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$");
        Matcher matcher = pattern.matcher(email);
        boolean matches = matcher.matches();
        return  matches;
    }
/**
* 验证金额
*/
public static boolean testBalance(String balance){
Pattern pattern = Pattern.compile("^[0-9]+(\\.[0-9]+)*$");
Matcher matcher = pattern.matcher(balance);
boolean matches = matcher.matches();
return matches;
}
}

新增一个查询方法根据账号实现他

 

 在mapper中添加这个方法

 xml中书写sql语句

 接着写新增方法

 /**
* 新增酒店会员
*
* @param hotelUser 酒店会员
* @return 结果
*/
@Override
public int insertHotelUser(HotelUser hotelUser)
{

// 防御性编程
Assert.notNull(hotelUser,"参数异常");
Assert.notNull(hotelUser.getUsername(),"账号不能为空");
Assert.notNull(hotelUser.getPassword(),"密码不能为空");
Assert.notNull(hotelUser.getNickname(),"昵称不能为空");
Assert.state(RegexUtils.testUsernameOrPassword(hotelUser.getUsername()),"账号长度不能超过30");
Assert.state(RegexUtils.testUsernameOrPassword(hotelUser.getPassword()),"密码长度不能超过30");
// 判断是否传入年龄参数
if(hotelUser.getAge()!=null){
Assert.state(RegexUtils.testAge(hotelUser.getAge().toString()),"年龄大于0小于300且为数字");
}
// 判断是否传入手机号参数
if(hotelUser.getPhoneNumber()!=null){
Assert.state(RegexUtils.testPhoneNumber(hotelUser.getPhoneNumber()),"请输入规范的手机号");
}
// 判断是否传入邮箱参数
if(hotelUser.getEmail()!=null){
Assert.state(hotelUser.getEmail().length()<30,"邮箱长度不能超过30");
Assert.state(RegexUtils.testEmail(hotelUser.getEmail()),"请输入规范的邮箱");
}
// 判断是否传入金额参数
if(hotelUser.getBalance()!=null){
Assert.state(RegexUtils.testBalance(hotelUser.getBalance().toString()),"请输入规范的金额");
}
// 根据账号来查询数据库中是否已存在此账号
HotelUser queryUsername = hotelUserMapper.selectHotelUserByUsername(hotelUser.getUsername());
Assert.state(queryUsername==null,"账号已存在");
// 将头像地址存储实体类中
hotelUser.setAvatar(FileLoad.imgName);
// 将地址清空
FileLoad.imgName=null;
return hotelUserMapper.insertHotelUser(hotelUser);
}

新增暂时写完了

posted on 2023-12-06 19:06  罗|马  阅读(11)  评论(0编辑  收藏  举报

Live2D