当前位置: 首页 > news >正文

Spring Boot + MyBatis 实现用户登录功能详解(基础)

一、项目概述

        做了几个项目发现有人问到怎么使用springboot+HTML+js+CSS开发一个项目呢所以本文将介绍如何使用Spring Boot和MyBatis实现一个完整的用户登录功能。系统包含前端登录页面、后端控制器、服务层、数据访问层以及数据库交互。

 

二、技术栈

  • Spring Boot 2.x

  • MyBatis 持久层框架

  • MySQL 数据库

  • jQuery 前端交互

  • HTML/CSS 页面展示

三、核心实现

1. 实体类设计(BookUser.java)

public class BookUser {private Integer id;private String phone;private String name;private String password;private Integer role;private Integer money;private String address;@JsonProperty("username")private String loginName;// Getter和Setter方法// toString方法
}

2. 数据访问层(DAO)

接口定义(LoginUserDao.java):

public interface LoginUserDao {List<LoginUser> findAll();BookUser findUser(BookUser bookUser);
}

MyBatis映射文件(LoginUserMapper.xml):(这里仅仅是做了一个动态查询,跟实际的不一样 想动态查询的可以去学一下mybatis基础非常的简单

<select id="findUser" resultType="com.qcby.springboot0712.entity.BookUser"parameterType="com.qcby.springboot0712.entity.BookUser">SELECT * FROM user<where><if test="id != null">id=#{id}</if><if test="phone != null and phone != ''">AND phone=#{phone}</if><if test="password != null and password != ''">AND password=#{password}</if><if test="loginName != null and loginName != ''">AND loginName=#{loginName}</if></where>
</select>

3. 服务层(Service)

服务接口(LoginUserService.java):

public interface LoginUserService {List<LoginUser> findAll();BookUser findUser(BookUser bookUser);
}

服务实现(LoginUserServiceImpl.java)(实现了spring 的Ioc 单例 :

@Service
public class LoginUserServiceImpl implements LoginUserService {@Autowiredprivate LoginUserDao loginUserDao;@Overridepublic BookUser findUser(BookUser bookUser) {System.out.println("查询用户: " + bookUser);return loginUserDao.findUser(bookUser);}
}

4. 控制器层(Controller)

@Controller
@Api(tags = "登录测试")
public class LoginUserController {@Autowiredprivate LoginUserService loginUserService;@RequestMapping("/tologin")public String tologin() {return "login";}@RequestMapping("/login")@ResponseBodypublic BookUser login(BookUser user1) {System.out.println("登录请求参数: " + user1);return loginUserService.findUser(user1);}
}

5. 前端实现

登录页面(login.html):

<div class="auth-container"><h2 class="text-2xl font-bold text-center mb-4">用户登录</h2><form id="loginForm"><div class="form-group"><label for="userid">ID</label><input type="text" id="userid" class="userid" required></div><div class="form-group"><label for="username">账号</label><input type="text" id="username" class="username" required></div><div class="form-group"><label for="password">密码</label><input type="password" id="password" class="password" required></div><input type="button" class="btn" value="立即登录"></form>
</div>

登录交互(login.js)(这里是仅仅查询是否有这个用户,并没有其他的验证功能  想要其他的验证功能自己可以做一下

$(document).ready(function() {$(".btn").on("click", function() {const id = $('.userid').val();const username = $('.username').val();const password = $('.password').val();$.ajax({url: "login",type: "GET",data: {id: id,loginName: username,password: password},success: function(response) {if(response && response.id) {console.log("登录成功,用户信息:", response);alert(`登录成功!欢迎 ${response.name}`);} else {alert("登录失败,用户名或密码错误");}},error: function(error) {console.log("登录失败:", error);alert("登录失败,请检查控制台");}});});
});

四、关键点解析

  1. 前后端数据映射

    • 使用@JsonProperty("username")注解解决前后端字段名不一致问题

    • MyBatis动态SQL处理不同查询条件组合

  2. 登录流程

    前端输入 → AJAX请求 → Spring MVC控制器 → 服务层 → MyBatis查询 → 返回结果 → 前端处理
  3. 安全考虑

    • 实际项目中应对密码进行加密存储(如BCrypt)

    • 添加验证码防止暴力破解

    • 使用HTTPS保护数据传输

五、总结

本文实现了一个完整的Spring Boot登录功能,涵盖了从前端页面到数据库查询的全流程。核心在于:

  • Spring Boot的高效开发模式

  • MyBatis灵活的SQL映射

  • 前后端分离的交互方式

  • RESTful风格的接口设计

http://www.dtcms.com/a/277433.html

相关文章:

  • PaperPel
  • Oracle SQL - 使用行转列PIVOT减少表重复扫描(实例)
  • AI驱动的软件工程(上):人机协同的设计与建模
  • 【读书笔记】《C++ Software Design》第六章深入剖析 Adapter、Observer 和 CRTP 模式
  • 实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
  • fatal: active `post-checkout` hook found during `git clone`
  • mapstruct与lombok冲突原因及解决方案
  • 【Linux 学习指南】网络基础概念(一):从协议到分层,看透计算机通信的底层逻辑
  • LeetCode|Day9|976. 三角形的最大周长|Python刷题笔记
  • 通过反射,提取 Cat 类 泛型 父类 接口 属性 的具体类型参数
  • 【一起来学AI大模型】部署优化推理加速:TensorRT-LLM
  • 华为交换机 undo negotiation auto功能(华为交换机端口接光纤两端起不来)
  • Jvm优化高手-笔记
  • Cursor精准上下文指定
  • 印度纱丽变革:传统靛蓝工艺在无性别斗篷中的延续
  • TensorFlow深度学习实战(24)——变分自编码器详解与实现
  • 基于Springboot+UniApp+Ai实现模拟面试小工具三:后端项目基础框架搭建上
  • AI 助力:如何批量提取 Word 表格字段并导出至 Excel
  • React强大且灵活hooks库——ahooks入门实践之生命周期类hook(lifecycle)详解
  • vite---环境变量和模式配置(.env 文件)
  • 【论文阅读】Think Only When You Need with Large Hybrid-Reasoning Models
  • Linux进程状态实战指南:转换关系、监控命令与状态解析
  • 【Linux | 网络】应用层(HTTP)
  • html-input 系列
  • 二进制、八进制、十进制、十六进制的转换
  • 用 Node.js 构建模块化的 CLI 脚手架工具,从 GitHub 下载远程模板
  • HarmonyOS-ArkUI Web控件基础铺垫1-HTTP协议-数据包内容
  • 【基于开源大模型(如deepseek)开发应用及其发展趋势的一点思考】
  • 早期 CNN 的经典模型—卷积神经网络(LeNet)
  • 在Linux文件写入软件设计中,直接写入SSD时磁盘写入抖动(I/O延迟波动)的解决方案