Springboot+Thymeleaf+Jpa实现登录功能(附源码)

下面我将详细讲解“Spring Boot+Thymeleaf+JPA实现登录功能(附源码)”的完整攻略。

一、环境准备

1.安装JDK

首先要确保你的系统上已经安装了JDK。可以通过执行以下命令来检查是否已经安装成功:

java -version

2.安装Maven

Maven是一个项目管理工具,用于构建和管理Java项目。你可以从Maven官网下载安装包并进行安装。完成后,可以执行以下命令来检查是否已经安装成功:

mvn -version

二、创建工程

1.使用IDEA创建项目

使用IDEA的Spring Initializr功能创建一个新的Maven项目,确保选择Web、Thymeleaf和JPA依赖。创建成功后,你会发现项目的目录结构如下:

demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   ├── resources/
│   │   └── webapp/
│   └── test/
│       └── java/
└── pom.xml

2.添加必要的依赖

在pom.xml文件中添加以下依赖:

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Thymeleaf -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

其中,MySQL Connector和Spring Security是新增的依赖。

三、编写代码

1.创建数据表

在MySQL中创建一个名为users的表,包含id、username和password三个字段。可以使用以下的SQL语句来创建表:

CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL
);

2.编写实体类

在src/main/java目录下创建一个package,命名为com.example.demo.entity。在这个包下创建一个名为User的Java类,该类与数据库中的users表对应。代码如下:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;

    //省略getter和setter方法
    //......

}

3.编写DAO层

在src/main/java目录下创建一个package,命名为com.example.demo.repository。在这个包下创建一个名为UserRepository的Java接口,该接口继承了JpaRepository。代码如下:

public interface UserRepository extends JpaRepository<User, Long>{
    User findByUsername(String username);
}

4.编写Service层

在src/main/java目录下创建一个package,命名为com.example.demo.service。在这个包下创建一个名为UserService的Java类。代码如下:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User findUserByUsername(String username) {
        return userRepository.findByUsername(username);
    }
}

5.编写控制器

在src/main/java目录下创建一个package,命名为com.example.demo.controller。在这个包下创建一个名为LoginController的Java类。代码如下:

@Controller
public class LoginController {
    @Autowired
    private UserService userService;

    @GetMapping("/login")
    public String login() {
        return "login";
    }

    @PostMapping("/login")
    public String login(String username, String password, Model model) {
        User user = userService.findUserByUsername(username);
        if (user == null) {
            model.addAttribute("msg", "用户不存在");
            return "login";
        }

        if (!user.getPassword().equals(password)) {
            model.addAttribute("msg", "密码错误");
            return "login";
        }

        return "index";
    }
}

6.编写视图层

在src/main/resources目录下创建一个名为templates的文件夹,该文件夹存放所有的HTML模板。在templates文件夹下创建一个名为login.html的HTML文件,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <h2>登录</h2>
    <form action="#" method="post">
        用户名:<input type="text" name="username">
        <br>
        密码:<input type="password" name="password">
        <br>
        <input type="submit" value="登录">
        <div style="color: red" th:text="${msg}"></div>
    </form>
</body>
</html>

在templates文件夹下创建一个名为index.html的HTML文件,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>欢迎</title>
</head>
<body>
    <h2>欢迎</h2>
</body>
</html>

四、运行项目

1.配置数据库信息

在src/main/resources目录下创建一个名为application.properties的配置文件。在文件中添加以下内容:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

其中,spring.datasource.url、spring.datasource.username、spring.datasource.password是需要根据自己的数据库情况进行修改的。

2.运行项目

在IDEA中,单击Run按钮启动项目。在浏览器中输入http://localhost:8080/login即可看到登录页面。输入用户名和密码,点击登录按钮,即可跳转到首页。

三、示例说明

1.在UserService中添加注解@Transactional。说明如下:

@Service
@Transactional
public class UserService {

在Service层加上@Transactional注解后,可以使方法在执行时开启一个事务,并且在方法结束后自动执行提交或回滚操作,可以有效地简化编程工作。

2.在LoginController中使用@RequestParam注解获取参数。说明如下:

@PostMapping("/login")
public String login(@RequestParam("username") String username, 
    @RequestParam("password") String password, Model model) {
    //...
}

使用@RequestParam注解来获取参数可以让代码更加简洁,而且可以设置参数的默认值、是否必须传入等属性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot+Thymeleaf+Jpa实现登录功能(附源码) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery中toggle()函数的使用实例

    以下是关于“jQuery中toggle()函数的使用实例”的详细攻略。 什么是toggle()函数? toggle()是jQuery中的一个函数,主要用于切换元素的显示和隐藏。toggle()函数的语法如下: $(selector).toggle(speed,easing,callback) 其中,selector是选择器,可选;speed是动画的速度,也可…

    jquery 2023年5月27日
    00
  • jQWidgets jqxSplitter render()方法

    下面是针对”jQWidgets jqxSplitter render()方法”的完整攻略。 什么是jqxSplitter jqxSplitter是jQWidgets的一个组件,它允许开发者在Web应用中创建可分割的、可调整大小和位置的窗口。 官方文档地址:https://www.jqwidgets.com/documentation/jqxsplitter/…

    jquery 2023年5月11日
    00
  • 如何使用jQuery将任何段落的颜色在鼠标移动事件中改为红色

    以下是两个示例,演示如何使用jQuery将任何段落的颜色在鼠标移动事件中改为红色: 示例1:使用.mousemove()函数 以下是一个示例,演示如何使用.mousemove()函数来在鼠标移动事件中改变段落的颜色: <!DOCTYPE html> <html> <head> <title>jQuery .mo…

    jquery 2023年5月9日
    00
  • js检测离开或刷新页面时表单数据是否更改的方法

    为了检测用户是否更改了表单数据,并提醒用户是否需要保存,我们可以使用JavaScript来检测用户是否即将离开页面或刷新页面。以下是两条示例说明。 使用beforeunload事件 当用户离开页面或刷新页面时,浏览器会触发一个名为beforeunload的事件。我们可以通过在该事件的监听器中编写代码来检测表单数据是否更改,并给出相应的提示。 window.a…

    jquery 2023年5月27日
    00
  • jQuery中getJSON跨域原理的深入讲解

    下面我将详细讲解“jQuery中getJSON跨域原理的深入讲解”的完整攻略。 一、什么是跨域 在浏览器中,每个页面都有一个域,例如 http://www.example.com,这被称为来源(origin)。源的定义包括 URI 方案、主机名和端口号。如果一个资源的来源与当前页面的来源相同,则该资源被认为是“同源”的。 否则,它被认为是“跨域”的。 跨域是…

    jquery 2023年5月28日
    00
  • jQuery UI Datepicker onChangeMonthYear选项

    jQuery UI的日期选择器小部件提供了许多选项,可以自定义日期选择器的外观和行为。其中,onChangeMonthYear选项用于在选择中更改月份或年份时触发回调函数。本文将详细介绍onChangeMonthYear选项的语法和用,并提两个示例说明。 语法 以下是onChangeMonthYear选项的基本语法: $(selector).datepick…

    jquery 2023年5月9日
    00
  • 在jQuery中处理XML数据的大致方法

    在jQuery中处理XML数据有以下大致方法: 使用jQuery的$.ajax()函数加载XML文件 我们可以使用$.ajax()函数来加载XML文件,然后使用回调函数处理数据。其中,dataType选项需要设置为”xml”,表示我们要加载的是XML文件。 下面是一个加载XML数据并处理的示例代码: $.ajax({ type: "GET&quot…

    jquery 2023年5月27日
    00
  • jquery中获取元素的几种方式小结

    下面是详细讲解“jquery中获取元素的几种方式小结”的完整攻略: 一、jQuery获取元素的方法 1.通过元素标签名获取 可以使用元素标签名来获取元素,通过$(“标签名”)的方式获取。例如获取页面上所有的p标签并将它们的内容改为“hello world!”: $("p").text("hello world!"); …

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部