2.建立数据库
CREATE TABLE `user` (
`id` bigint(32) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.新建项目
这里就不多描述了,直接新建一个,把web勾上就可以了
4.前端
login.html
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/user/login" method="post">
用户名:<input name="username" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="登录">
</form>
</body>
regist.html
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form action="/user/regist" method="post">
用户名:<input name="username" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="注册">
</form>
</body>
5.相关配置(yml)
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/users?serverTimezone=UTC&useSSL=false
username: root
password: 1
resources:
static-locations: classpath:/templates #访问静态页面
mybatis:
type_aliases-package: com.ljc.bean
6.项目结构
7.后端
1、bean(实体类)
1.User
public class User {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.Result(存放json字符)
public class Result<T> {
private String msg;
private boolean success;
private T detail;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public T getDetail() {
return detail;
}
public void setDetail(T detail) {
this.detail = detail;
}
}
2、mapper(接口)
package com.ljc.mapper;
import com.ljc.bean.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
/**
* mapper的具体表达式
*/
@Mapper //标记mapper文件位置,否则在Application.class启动类上配置mapper包扫描
@Repository
public interface UserMapper {
/**
* 查询用户名是否存在,若存在,不允许注册
* 注解@Param(value) 若value与可变参数相同,注解可省略
* 注解@Results 列名和字段名相同,注解可省略
* @param username
* @return
*/
@Select(value = "select u.username,u.password from user u where u.username=#{username}")
@Results
({@Result(property = "username",column = "username"),
@Result(property = "password",column = "password")})
User findUserByName(@Param("username") String username);
/**
* 注册 插入一条user记录
* @param user
* @return
*/
@Insert("insert into user values(#{id},#{username},#{password})")
//加入该注解可以保存对象后,查看对象插入id
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
void regist(User user);
/**
* 登录
* @param user
* @return
*/
@Select("select u.id from user u where u.username = #{username} and password = #{password}")
Long login(User user);
}
3.service层
@Service
@Transactional(rollbackFor = RuntimeException.class)
public class UserService {
@Autowired
private UserMapper userMapper;
/**
* 注册
* @param user 参数封装
* @return Result
*/
public Result regist(User user) {
Result result = new Result();
result.setSuccess(false);
result.setDetail(null);
try {
User existUser = userMapper.findUserByName(user.getUsername());
if(existUser != null){
//如果用户名已存在
result.setMsg("用户名已存在");
}else{
userMapper.regist(user);
//System.out.println(user.getId());
result.setMsg("注册成功");
result.setSuccess(true);
result.setDetail(user);
}
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
return result;
}
/**
* 登录
* @param user 用户名和密码
* @return Result
*/
public Result login(User user) {
Result result = new Result();
result.setSuccess(false);
result.setDetail(null);
try {
Long userId= userMapper.login(user);
if(userId == null){
result.setMsg("用户名或密码错误");
}else{
result.setMsg("登录成功");
result.setSuccess(true);
user.setId(userId);
result.setDetail(user);
}
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
return result;
}
}
4.controller层
@EnableAutoConfiguration
@RestController //相当于@Controller+@RequestBody
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 注册
* @param user 参数封装
* @return Result
*/
@PostMapping(value = "/regist")
public Result regist(User user){
return userService.regist(user);
}
/**
* 登录
* @param user 参数封装
* @return Result
*/
@PostMapping(value = "/login")
public Result login(User user){
return userService.login(user);
}
}
@MapperScan("com.ljc.mapper")
@SpringBootApplication
public class DemologinApplication {
public static void main(String[] args) {
SpringApplication.run(DemologinApplication.class, args);
}
}
6.pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ljc</groupId>
<artifactId>demologin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demologin</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这里参考的是https://blog.csdn.net/byteArr/article/details/80955703
但是由于这位老哥的博客年代有些久远,所以不太适合。
我也是通过百度、google才运行出来的