java接口注册_spring boot+mybatis 实现用户注册接口

上一次写了怎么用IDEA建立spring boot项目,接下来从0开始实现添加用户的接口

先来看一下最终的目录结构

07184349738a

目录结构

创建数据库和准备用户表

CREATE TABLE `user` (

`id` int(8) NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

`password` varchar(255) NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `user_name_uindex` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

添加 fastjson 依赖 和 spring boot dev tool 依赖

打开 pom.xml, 在 dependencies 节点下面添加

com.alibaba

fastjson

1.2.22

org.springframework.boot

spring-boot-devtools

编写User.java

目前 User 只有 id,name,password 三个属性

public class User {

private Integer id;

private String name;

private String password;

// 下面是 getter 和 setter 方法。。。

}

注意 id 用 Integer 而不用 int, 因为 int 自动初始化为0,mybatis mapper 文件 就不能使用 了,而 Integer 可以为 null

编写 UserApi.java

@RestController

@RequestMapping("/api/user")

public class UserApi {

private UserService userService;

@Autowired

public UserApi(UserService userService) {

this.userService = userService;

}

@PostMapping("")

public Object add(@RequestBody User user) {

if (userService.findByName(user.getName()) != null) {

JSONObject jsonObject = new JSONObject();

jsonObject.put("message","用户名已被使用");

return jsonObject;

}

return userService.add(user);

}

}

api这一层主要是调用service层的方法, 返回JSON数据。我用 @RestController 代替了 @Controller,表示该类里面的方法都是返回 JSON 数据, 而不用再给每个方法添加@ResponseBody注解。add 方法 @PostMapping("") 对应的路由为

POST /api/user

编写 UserService.java

@Service

public class UserService {

private UserMapper userMapper;

@Autowired

public UserService(UserMapper userMapper) {

this.userMapper = userMapper;

}

public User add(User user) {

userMapper.add(user);

return findById(user.getId());

}

public User findById(int id) {

User user = new User();

user.setId(id);

return userMapper.findOne(user);

}

public User findByName(String name) {

User param = new User();

param.setName(name);

return userMapper.findOne(param);

}

}

service这一层处理主要的业务逻辑,比如说添加用户, api层传过来了一个 user对象, 具体怎么添加在这里处理。目前逻辑比较简单,直接调用mapper层的方法,保存到数据库即可。

编写 UserMapper.java

public interface UserMapper {

int add(User user);

User findOne(User user);

}

一个添加接口和一个查询接口

编写 UserMapper.xml

insert into user(name, password) values (#{name},#{password})

select * from user

id=#{id}

and name=#{name}

insert 标签中的 useGeneratedKeys 作用是获取由数据库生成的id,注意mapper xml文件要和mapper java文件同名, 并且包名一致,不同的是xml文件要放在 resource目录之下。xml文件所在的包是一个多级目录结构,要建完一个目录再建另外一个,不能一下子新建一个名为xxx.yyy.zzz的目录。到这里, 我们的代码基本写完了。

编写Mybatis配置文件

在 resource目录下面新建一个名为mybatis.xml 的文件

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

打开application.yml文件, 添加以下内容

mybatis:

type-aliases-package: com.hpm.blog.model

config-location: classpath:mybatis.xml

type-aliases-package, 根据你的包结构修改为User.java文件所在的包

使spring boot扫描 mapper文件。打开SpringBootBlogApplication.java, 添加mybatis扫描注解,参数为mapper文件所在的包名

@MapperScan("com.hpm.blog.mapper")

SpringBootBlogApplication.java内容最终如下

@SpringBootApplication

@MapperScan("com.hpm.blog.mapper")

public class SpringBootBlogApplication {

public static void main(String[] args) {

SpringApplication.run(SpringBootBlogApplication.class, args);

}

}

测试访问接口

代码编写完毕,接下来运行项目,添加一个用户试试。下面使用curl发起一个POST请求。(如果你用的是Windows系统,没有curl这个命令,那么我推荐你安装一个git客户端,用软件带的git bash代替 cmd,将拥有Linux系统下面的包括curl在内的很多有用的命令)。

curl -X POST -H "Content-Type: application/json" -d '{"name": "xiaohong","password": "123456"}' "http://localhost:8080/api/user/"

windows系统下 curl 不能用单引号,要用双引号转义

curl -X POST -H "Content-Type: application/json" -d "{\"name\": \"xiaohong\",\"password\": \"123456\"}" "http://localhost:8080/api/user/"

得到如下输出,添加用户成功。

{"id":10,"name":"xiaohong","password":"123456"}

使用 hash 来保存用户密码

目前为止,数据库中的用户密码还是原文存储的,很不安全,改用 hash 值来存储用户密码。哈希算法很多种,以下使用 SHA-256

打开 UserService.java 文件

修改 add 方法

public User add(User user) {

String passwordHash = passwordToHash(user.getPassword());

user.setPassword(passwordHash);

userMapper.add(user);

return findById(user.getId());

}

添加 passwordToHash 方法

private String passwordToHash(String password) {

try {

MessageDigest digest = MessageDigest.getInstance("SHA-256");

digest.update(password.getBytes());

byte[] src = digest.digest();

StringBuilder stringBuilder = new StringBuilder();

// 字节数组转16进制字符串

// https://my.oschina.net/u/347386/blog/182717

for (byte aSrc : src) {

String s = Integer.toHexString(aSrc & 0xFF);

if (s.length() < 2) {

stringBuilder.append('0');

}

stringBuilder.append(s);

}

return stringBuilder.toString();

} catch (NoSuchAlgorithmException ignore) {

}

return null;

}

重启服务器,再测试一下

curl -X POST -H "Content-Type: application/json" -d "{\"name\": \"xiaoming\",\"password\": \"123456\"}" "http://localhost:8080/api/user/"

输出:

{"id":11,"name":"xiaoming","password":"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"}

好了,密码已经由原文存储变为hash存储了。

查看项目完整代码

git clone https://github.com/hyrijk/spring-boot-blog.git

checkout 到当前版本

git checkout 324933e88dbf22368b8cc250c57f895fd836e0d8

完。

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值