(free)史上最全springboot连接postpresql创建登陆注册系统
├── static/# 静态资源目录(HTML/CSS/JS)上面这一行代码注意,如果用户直接打开创建上述的表,那么会储存在默认的postgres中,如果不是请换成你的数据库。│├── controller/# 控制器类(处理路由)│└── DemoApplication.java# 启动类。│└── 你的项目名/首先是文件目录,读者自己创建好相应的文件。
我用的是vscode
首先是文件目录,读者自己创建好相应的文件
读者可以把springboot项目文件夹名称命名为demo2完全照搬
如果自己命名的文件要改相应的import引入
src/
└── main/
├── java/
│ └── com/
│ └── example/
│ └── 你的项目名/
│ ├── controller/ # 控制器类(处理路由)
│ │ └── GreetingController.java
├── entities/
│ │ └── user1.java
├── config/
│ │ └── SecurityConfig.java
├── Mapper/
│ │ └── UserMapper.java
├── service/
│ └── userService.java
│ └── DemoApplication.java # 启动类
└── resources/
├── static/ # 静态资源目录(HTML/CSS/JS)
│ ├── index.html
│ └── login.html
├── templates/ # 模板引擎文件(如 Thymeleaf)
└── application.properties # 配置文件
1.首先是login.html文件(路由 /one)
如果用户用的是idea可以直接运行看相应的效果
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"> <!-- 添加此行 -->
<title>登录</title>
</head>
<body>
<h1>登录</h1>
<form action="/one" method="post">
<div>
<label>用户名:</label>
<input type="text" name="username" required>
</div>
<div>
<label>密码:</label>
<input type="password" name="password" required>
</div>
<button type="submit">登录</button>
</form>
<p>没有账号?<a href="/register.html">去注册</a></p>
</body>
</html>
register对应路由two
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"> <!-- 添加此行 -->
<title>注册</title>
</head>
<body>
<h1>注册</h1>
<form action="/two" method="post">
<div>
<label>用户名:</label>
<input type="text" name="username" required>
</div>
<div>
<label>密码:</label>
<input type="password" name="password" required>
</div>
<div>
<label>邮箱:</label>
<input type="email" name="email" required>
</div>
<button type="submit">注册</button>
</form>
<p>已有账号?<a href="/login.html">去登录</a></p>
</body>
</html>
2. 修改你的pom.xml文件加入依赖
<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>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</dependency>
</dependencies>
3.在pgadmin 4中创建用户表
这里记住你创建表的所在数据库
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4.application.properties的配置
我的端口设置为1234
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
上面这一行代码注意,如果用户直接打开创建上述的表,那么会储存在默认的postgres中,如果不是请换成你的数据库
spring.datasource.password=后面加你的数据库密码
spring.application.name=demo2
# 服务器配置
server.port=1234
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=
spring.datasource.driver-class-name=org.postgresql.Driver
#mybatis.mapper-locations=classpath:/*.xml
mybatis.mapper-locations=classpath:/*.xml
# Spring Boot配置
mybatis.type-aliases-package=com.example.demo2.entities
5.创建实体类entities\user1.java
package com.example.demo2.entities;
import java.time.LocalDateTime;
public class user1 {
private Integer id;
private String username;
private String password;
private String email;
private LocalDateTime createdAt;
// 无参构造方法(MyBatis 反射需要)
public user1() {}
// Getters 和 Setters
public Integer getId() { return id; }
public void setId(Integer 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; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public LocalDateTime getCreatedAt() { return createdAt; }
public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
// 可选:toString 方法(调试用)
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
", createdAt=" + createdAt +
'}';
}
}
6.创建接口Mapper\UserMapper(MyBatis接口)
package com.example.demo2.Mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import com.example.demo2.entities.user1;
@Mapper
public interface UserMapper {
// 注册:插入用户
@Insert("INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(user1 user);
// 登录:根据用户名查询用户
@Select("SELECT * FROM users WHERE username = #{username}")
user1 selectByUsername(String username);
}
7.service\user1Service服务层
package com.example.demo2.service;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.demo2.Mapper.UserMapper;
import com.example.demo2.entities.user1;
@Service
public class user1Service {
@Autowired
private UserMapper userMapper;
@Autowired
private PasswordEncoder passwordEncoder; // 使用 BCrypt
// 注册逻辑
@Transactional
public void register(user1 user) {
// 检查用户名是否重复
user1 existingUser = userMapper.selectByUsername(user.getUsername());
if (existingUser != null) {
throw new RuntimeException("用户名已存在");
}
// 加密密码
user.setPassword(passwordEncoder.encode(user.getPassword()));
userMapper.insertUser(user);
}
// 登录逻辑
public user1 login(String username, String password) {
user1 user = userMapper.selectByUsername(username);
if (user == null || !passwordEncoder.matches(password, user.getPassword())) {
throw new RuntimeException("用户名或密码错误");
}
return user;
}
}
8.控制器controller\GreetingController
package com.example.demo2.controller;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import com.example.demo2.entities.ResterLayer;
import com.example.demo2.entities.User;
import com.example.demo2.entities.user1;
import com.example.demo2.entities.FeatureLayer;
import com.example.demo2.service.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@RestController
public class GreetingController {
@Autowired
private user1Service user1Service;
// 登录接口(路由 /one)
@PostMapping("/one")
public ResponseEntity<?> login(
@RequestParam String username,
@RequestParam String password
) {
try {
user1 user = user1Service.login(username, password);
return ResponseEntity.ok("登录成功");
} catch (RuntimeException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
}
// 注册接口(路由 /two)
@PostMapping("/two")
public ResponseEntity<?> register(
@RequestParam String username,
@RequestParam String password,
@RequestParam String email
) {
try {
user1 user = new user1();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user1Service.register(user);
return ResponseEntity.ok("注册成功");
} catch (RuntimeException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
}
}
9.config\Security
package com.example.demo2.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
10.在网页栏搜索http://localhost:1234/login.html即可
效果如下,可以自行添加css优化页面

我在文件创建步骤时打乱了,如果有报错先不管,最终有问题再逐步解决
三连
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)