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.pswp.cn/pingmian/88712.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb 简介与常用命令

1. adb 简介adb 的全称为 Android Debug Bridge&#xff0c;就是起到调试桥的作用。借助 adb 工具&#xff0c;我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作&#xff0c;如安装软件、系统升级、运行 shell 命令等等。其实简而言说&#xff0c;adb 就是连接 And…

阿里云-跨账号同步OSS Bucket

说明 阿里云A账号的OSS BUCKET同步到B账号的指定OSS BUCKET。 账号Bucket NamesRAM角色A{源buctket}OSS-SYNCERB{目标buctket} 步骤 在阿里云A,B账号分别建上表buckets, 最好是相同地域的在A号-RAM控制台建立角色OSS-SYNCER&#xff0c;并赋权AliyunOSSFullAccess&#xff…

uniapp小程序无感刷新token

request.js // request.js import {getApptoken,getStoredApptoken } from ./tokenRequest // 从合并模块导入// 全局配置 const MAX_RETRIES 1 // 最大重试次数 const baseURL https://your-api.com// 请求队列和刷新状态 let requestsQueue [] let isRefreshing false// …

MySQL优化高手笔记

语雀完整版&#xff1a;https://www.yuque.com/g/mingrun/embiys/dv3btw/collaborator/join?tokenzMBwPzSMfSGINLuv&sourcedoc_collaborator# 《MySQL优化高手笔记》MySQL优化高手一、MySQL架构01 天天写CRUD,你知道你的系统是如何跟MySQL打交道的吗通过驱动连接数据库&am…

Git 详解:从概念,常用命令,版本回退到工作流

本文将从 Git 的核心概念讲起&#xff0c;详细介绍常用命令、各阶段版本回退、分支控制以及企业内常见的 Git 工作流。 Git 与 GitHub 简介 Git 简介 Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年开发。它与集中式版本控制系统&#xff08;…

CMSIS(Cortex Microcontroller Software Interface Standard)ARM公司为 Cortex-M 系列处理器

CMSIS&#xff08;Cortex Microcontroller Software Interface Standard&#xff09;是ARM公司为 Cortex-M 系列处理器&#xff08;如 M0/M3/M4/M7/M23/M33 等&#xff09;定义的一套硬件抽象层标准&#xff0c;旨在简化嵌入式开发&#xff0c;提高代码的可移植性和复用性。 核…

[特殊字符] 扫描式处理:Python 自动提取 PDF 中关键词相关表格并导出为 Excel

本文演示如何利用 pdfplumber 批量处理指定文件夹下 PDF 文档&#xff1a;定位关键词&#xff08;如“主要会计数据”&#xff09;出现的页码及下一页&#xff0c;提取其中的表格并保存为独立 Excel 文件。适用于财务报告、审计表格、统计报表等场景。 1️⃣ 第一步&#xff1a…

python3的返回值能返回多个吗?

在Python中&#xff0c;函数可以通过返回一个元组&#xff08;tuple&#xff09; 来间接实现返回多个值的效果。以下是具体说明&#xff1a; 实现方式&#xff1a;直接返回逗号分隔的值 Python会自动将这些值打包成一个元组&#xff1a; def multiple_return():a 1b "he…

UE5 Secondary Materials

首先放入材质A材质B放入Secondary Materials两个效果就能融合到一起了动态设置secondary material

AUTOSAR进阶图解==>AUTOSAR_SWS_FlashTest

AUTOSAR Flash Test模块详解与分析 基于AUTOSAR标准的Flash Test模块架构、功能与应用分析目录 1. Flash Test模块概述 1.1 模块作用与功能1.2 适用范围 2. Flash Test模块架构 2.1 模块位置2.2 组件关系 3. 状态管理 3.1 状态定义3.2 状态转换 4. 后台测试执行流程 4.1 测试间…

msf复现永恒之蓝

永恒之蓝&#xff08;EternalBlue&#xff09;是利用 Windows 系统的 SMB 协议漏洞&#xff08;MS17-010&#xff09;来获取系统最高权限的漏洞&#xff0c;利用 Metasploit 框架&#xff08;MSF&#xff09;复现该漏洞是一个复杂且具有一定风险的操作&#xff0c;必须在合法合…

格密码--LWE,DLWE和ss-LWE

格密码–LWE&#xff0c;DLWE和ss-LWE 0.数学符号数学符号含义备注Zq\mathbb{Z}_qZq​模qqq的整数集合&#xff0c;即{0,1,2,...,q−1}\{0,1,2,...,q-1\}{0,1,2,...,q−1}用于定义LWE、DLWE、ss-LWE等问题中矩阵和向量的元素取值范围&#xff0c;是基础整数环x∈RSx \in_R Sx∈…

【闭包】前端的“保护神”——闭包详解+底层原理

目录 一、闭包是什么&#xff1f;概念 二、闭包为什么存在&#xff1f;作用 1. 创建私有变量 2. 实现数据封装与信息隐藏 3. 模拟私有方法 4. 保存函数执行时的状态 5. 回调函数和事件处理 6. 模块化编程 7. 懒加载与延迟执行 三、闭包怎么用&#xff1f;实践业务场景 …

算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题

牛顿迭代法&#xff08;Newtons Method&#xff09;是一种强大的数值计算方法&#xff0c;由英国数学家艾萨克・牛顿提出。它通过不断迭代逼近方程的根&#xff0c;具有收敛速度快、适用范围广的特点&#xff0c;在科学计算、工程模拟、计算机图形学等领域有着广泛应用。牛顿迭…

小白学Python,操作文件和文件夹

目录 前言 一、操作文件路径 1.获取当前路径 2.创建文件夹 &#xff08;1&#xff09;mkdir()函数 &#xff08;2&#xff09;makedirs() 函数 3.拼接路径 4.跳转路径 5.判断相对路径和绝对路径 6.获取文件路径和文件名 二、操作文件和文件夹 1.查询文件大小 2.删除…

015_引用功能与信息溯源

引用功能与信息溯源 目录 引用功能概述支持的模型引用类型API使用方法引用格式应用场景最佳实践 引用功能概述 什么是引用功能 Claude的引用功能允许在回答基于文档的问题时提供详细的信息来源引用&#xff0c;帮助用户追踪和验证信息的准确性。这个功能特别适用于需要高可…

ROS2中的QoS(Quality of Service)详解

ROS2中的QoS&#xff08;Quality of Service&#xff09;详解1. 主要QoS参数2. 为什么需要设置QoS3. QoS兼容性规则4. 选择QoS策略的建议5. 调试QoS问题的方法6. 踩坑&#xff1a;订阅话题没有输出可能的原因&#xff1a;调试方法QoS是ROS2中用于控制通信质量和行为的机制。它定…

Cursor三大核心AI功能

一&#xff1a;Tab键&#xff1a;智能小助手 1.1 单行/多行代码补全 在代码中写出要实现的功能&#xff0c;第一次按Tab生成代码&#xff0c;第二次按Tab接受代码。1.2 智能代码重写 对已有代码重新编写。 写个注释告诉AI重构方法&#xff0c;然后鼠标点到方法内部&#xff0c;…

cesium添加原生MVT矢量瓦片方案

项目中需要基于cesium接入mvt格式的服务并支持属性拾取查询&#xff0c;通过一系列预研测试&#xff0c;最后选择cesium-mvt-imagery-provider开源插件完成&#xff0c;关键源码信息如下&#xff1a; npm i cesium cesium-mvt-imagery-provider //安装依赖包// 加载图层import…

AI金融风控:识别欺诈,量化风险的新利器

AI金融风控&#xff1a;识别欺诈&#xff0c;量化风险的新利器深度学习算法穿透海量交易数据&#xff0c;92.5%的不良贷款识别率宣告了金融风险防控新时代的来临。深圳桑达银络科技有限公司在2025年6月申请的“基于人工智能的金融交易反欺诈系统”专利&#xff0c;揭示了金融风…