mysql - 如何确保帐户是唯一的
问题描述
我正在用spring-boot和mysql和mybatis开发一个账户系统。
我在表字段上使用了唯一索引,当有新请求到来时,我使用 try catch 来处理它。
我认为这不好。
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("query/{id}")
public String query(@PathVariable int id){
return userService.query(id).toString();
}
@RequestMapping("insert")
public String addUser(){
User user = new User();
user.setAccount("aaa");
user.setPassword("password");
try {
userService.insert(user);
}catch (Exception e){
if (e.getLocalizedMessage().contains("Duplicate entry")){
// Duplicate entry index
user.setId(-1);
}else{
// other Exception
user.setId(-2);
}
}
return user.toString();
}
}
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account` varchar(255) NOT NULL DEFAULT '',
`password` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `iacc` (`account`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8
解决方案
考虑到您正在使用 Spring-Boot,myBatis 您可以在注册用户之前对存储库进行额外调用以检查用户是否存在
@Select("select * from user where account= #{accountVar}")
User findById(@Param("accountVar") String accountName);
如果您的用户存在具有相同的帐户名,您应该抛出自定义异常和/或提及用户已存在或类似内容的响应消息
请记住遵守 Spring Boot 或更确切地说基于 HTTP 的标准来响应端点
- 如果成功,您应该返回 200 OK 以及消息或任何最适合您的情况
- 如果发生故障/异常,您应该返回 400 Bad Request 以及消息
推荐阅读
- html - 如何将背景图像添加到引导卡,以便在悬停时显示?
- swift - 快速添加自定义按钮 UISearchController
- c++ - 我如何在每 2-3 个循环后更改变量?
- javascript - 当用户按下搜索所需地址时,React Google Map API 不会放大
- sql - 如何在日期范围之间进行查询
- blazor - Blazor WebAssembly:无法为属性“AuthenticationStateProvider”提供值
- google-admin-sdk - 是否可以使用 Google Admin SDK 远程更改电子邮件路由设置(高级 gmail 设置)
- git - 自动变基以删除修改文件的提交?
- php - 如何在无序列表中列出多个表结果
- android - 如何从 kotlin 的 json 文件中读取 Uri 和 double 值?