(舊)springboot 快速實現登入、註冊功能(附Demo原始碼)
1.直接跑通Demo,修改配置檔案。匯入資料庫sql檔案即可。
2.跟著一步一步實現。
當然你也可以先跑通Demo,在嘗試自己跟著來一遍
1.跑通Demo
需要原始碼和Demo 跳轉新專案 跳轉新專案
Demo地址: https://github.com/wangzhifengroot/login
只需要兩步
1.修改這裡的IP地址、資料庫名稱、使用者和密碼
2.建立資料庫和表
匯入下面sql檔案
user.sql
2. 一步一步實現。
環境
需要安裝一下開發工具
1.IDEA https://www.jetbrains.com/zh-cn/idea/
2.mysql https://www.mysql.com/downloads/
3.maven
4.Navicat mysql
選擇spring initializr
選擇1.8的JDK,當然你可以選擇更高的。(推薦使用和我一樣的)
選default 點選net
修改artifact 為login、type修改為maven 、語言選擇java、版本依然選8,點選net
這一步我們可以直接跳過,後面新增就行.
下一步直接finish
完善程式碼
找到pom.xml 檔案
修改pom.xml
<dependencies> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- myBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies>
完整pom.xml 參考使用
<?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.4.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example.login</groupId> <artifactId>login</artifactId> <version>0.0.1-SNAPSHOT</version> <name>login</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- myBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
找到下面的application檔案, 修改後綴為.yml和圖一樣
修改yml 替換你的mysql地址+username、密碼
server:
port: 9090
spring:
datasource:
url: jdbc:mysql://mysql地址/sanguo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: 使用者
password: 密碼
新增4個包
bean 為資料類、controller 對外提供呼叫、dao 資料庫操作、serivce 對資料操作
在bean包下建立User 資料類
/**
* 使用者Data類
*/
public class User {
// 用於資料庫主鍵
private long id;
// 使用者名稱,不能重複
private String account_number;
// 使用者密碼
private String password;
// 手機號
private String phone;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getAccount_number() {
return account_number;
}
public void setAccount_number(String account_number) {
this.account_number = account_number;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
建立資料庫的表,如果有mysql基礎的可以直接按上面的User類建立。
沒有基礎的可以使用Navicat mysql 來建立,避免深陷sql語句中。
下載sql檔案,在Navicat mysql 點選資料庫選擇執行sql檔案。
或者複製我這個sql到mysql中
CREATE TABLE `user` (
`id` bigint(32) NOT NULL AUTO_INCREMENT,
`account_number` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`phone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
建立Result類,用於規範資料返回。方便前端和Android同學。(很重要)
public class Result<T> {
// 返回資訊
private String msg;
// 返回code -1等於失敗 200成功
private int code;
// 具體返回的資料
private T detail;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getDetail() {
return detail;
}
public void setDetail(T detail) {
this.detail = detail;
}
public void setCode(int code) {
this.code = code;
}
public int getCode() {
return code;
}
@Override
public String toString() {
return "Result{" +
"msg='" + msg + '\'' +
", code=" + code +
", detail=" + detail +
'}';
}
}
建立UserController類
// 相當於@Controller+@RequestBody
@RestController
// 訪問目錄
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 註冊
*
* @param user 引數封裝
* @return Result
*/
@PostMapping(value = "/register")
public Result register(User user) {
Result regist = userService.register(user);
return regist;
}
/**
* 登入
*
* @param user 引數封裝
* @return Result
*/
@PostMapping(value = "/login")
public Result login(User user) {
return userService.login(user);
}
}
建立HelloController 這個可以不建立,只是為了test使用的。
@RestController
public class HelloController {
@GetMapping(value = "/hello")
public String hello() {
return "hello";
}
}
建立UserMapper 這個是操作資料庫的
@Mapper
@Repository
public interface UserMapper {
/**
* 查詢使用者名稱是否存在,若存在,不允許註冊
* 註解@Param(value) 若value與可變引數相同,註解可省略
* 註解@Results 列名和欄位名相同,註解可省略
*
* @param account_number
* @return
*/
@Select(value = "select u.account_number,u.password from user u where u.account_number=#{account_number}")
@Results({@Result(property = "account_number", column = "account_number"),
@Result(property = "password", column = "password")})
User findUserByName(@Param("account_number") String account_number);
/**
* 註冊 插入一條user記錄
*
* @param user
* @return
*/
@Insert("insert into user values(#{id},#{account_number},#{password},#{phone})")
// 加入該註解可以儲存物件後,檢視物件插入id
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
void register(User user);
/**
* 登入
*
* @param user
* @return
*/
@Select("select u.id from user u where u.account_number = #{account_number} and password = #{password}")
Long login(User user);
}
建立UserService用於邏輯操作
@Service
@Transactional(rollbackFor = RuntimeException.class)
public class UserService {
@Autowired
private UserMapper userMapper;
/**
* 註冊
*
* @param user 引數封裝
* @return Result
*/
public Result register(User user) {
Result result = new Result();
result.setCode(-1);
result.setDetail(null);
try {
User existUser = userMapper.findUserByName(user.getAccount_number());
if (existUser != null) {
//如果使用者名稱已存在
result.setCode(-1);
result.setMsg("使用者名稱已存在");
} else {
userMapper.register(user);
result.setMsg("註冊成功");
result.setCode(200);
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.setCode(-1);
result.setDetail(null);
try {
Long userId = userMapper.login(user);
if (userId == null) {
result.setCode(-1);
result.setMsg("使用者名稱或密碼錯誤");
} else {
result.setCode(200);
result.setMsg("登入成功");
user.setId(userId);
result.setDetail(user);
}
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
return result;
}
}
在resources建立resources檔案
複製html
登入 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用者登入</title>
</head>
<body>
<form action="/user/login" method="post">
賬 號:<input name="account_number" type="text"/><br>
密 碼:<input name="password" type="password"> <br>
<input type="submit" value="登入">
</form>
</body>
</html>
註冊 register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用者註冊</title>
</head>
<body>
<form action="/user/register" method="post">
賬 號:<input name="account_number" type="text"/><br>
密 碼:<input name="password" type="password"> <br>
<input type="submit" value="註冊">
</form>
</body>
</html>
一切準備就緒了
執行專案
訪問 http://localhost:9090/regist.html
試試能否註冊成功