实现SSM简易商城项目的登录注册功能

2023-11-18

实现SSM简易商城项目的登录注册功能

项目背景介绍

在互联网时代,电商行业蓬勃发展,越来越多的人开始关注电子商务。为了实现一个简易商城项目,我们选择了SSM框架作为项目的基础架构。SSM分别代表了Spring、SpringMVC和MyBatis三个框架,它们能够很好地协同工作,大大提高了开发效率和代码质量。

在这篇博客中,我们将详细介绍如何使用SSM框架实现登录注册功能。我们从mapper层、service层、controller层和前端页面设计开始,逐步完成这个功能。

1. 数据库设计

在登录注册功能中,我们需要使用数据库存储用户信息。我们创建一个名为user的表,用于存储用户的用户名和密码。

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. Mapper层

在Mapper层,我们使用MyBatis框架来操作数据库。首先,我们创建一个名为UserMapper的接口,定义用户相关操作的方法。在UserMapper.xml中,我们将实现这些方法。

2.1 UserMapper.java

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User selectByUsername(String username);
    void insert(User user);
}

2.2 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.model.User">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="username" property="username" jdbcType="VARCHAR"/>
        <result column="password" property="password" jdbcType="VARCHAR"/>
    </resultMap>

    <select id="selectByUsername" resultMap="BaseResultMap">
        SELECT id, username, password
        FROM user
        WHERE username = #{username}
    </select>

    <insert id="insert" parameterType="com.example.model.User">
        INSERT INTO user (username, password)
        VALUES(#{username}, #{password})
    </insert>
</mapper>

3. Service层

在Service层,我们编写业务逻辑代码。首先,我们创建一个名为UserService的接口,在UserServiceImpl实现这些方法。在这个例子中,我们主要实现了用户注册和用户登录两个功能。

3.1 UserService.java

package com.example.service;

import com.example.model.User;

public interface UserService {
    boolean register(User user);
    boolean login(String username, String password);
}

3.2 UserServiceImpl.java

package com.example.service.impl;

import com.example.mapper.UserMapper;
import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public boolean register(User user) {
        User existingUser = userMapper.selectByUsername(user.getUsername());
        if (existingUser != null) {
            return false;
        }
        userMapper.insert(user);
        return true;
    }

    @Override
    public boolean login(String username, String password) {
        User user = userMapper.selectByUsername(username);
        if (user == null) {
            return false;
        }
        return user.getPassword().equals(password);
    }
}

4. Controller层

在Controller层,我们处理请求并返回视图。在这个例子中,我们提供了用户注册和用户登录的接口。

4.1 UserController.java

在 src/main/java 目录下创建 UserController.java 文件,并定义 UserController 类,用于处理前端请求。

package com.example.controller;

import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {

    private UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

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

    @PostMapping("/login")
    public String login(String username, String password, Model model) {
        // 处理登录逻辑
    }

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

    @PostMapping("/register")
    public String register(User user, Model model) {
        // 处理注册逻辑
    }
}

前端页面设计

在前端页面设计中,我们将使用HTML、CSS和JavaScript来创建用户友好且美观的登录和注册页面。以下是前端页面设计的示例代码。

登录页面设计

<!DOCTYPE html>
<html>
<head>
  <title>登录页面</title>
  <style>
    /* 样式代码省略,可根据需求进行自定义样式设计 */
  </style>
</head>
<body>
  <h1>欢迎登录</h1>
  <form action="/login" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username" required><br><br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required><br><br>
    <input type="submit" value="登录">
  </form>
</body>
</html>

注册页面设计

<!DOCTYPE html>
<html>
<head>
  <title>注册页面</title>
  <style>
    /* 样式代码省略,可根据需求进行自定义样式设计 */
  </style>
</head>
<body>
  <h1>用户注册</h1>
  <form action="/register" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username" required><br><br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required><br><br>
    <input type="submit" value="注册">
  </form>
</body>
</html>

这篇文章我们重点介绍了在SSM框架中实现登录和注册功能的步骤。首先我们设计了简洁美观的前端页面,包括登录页面和注册页面。然后通过后端代码实现了登录功能和注册功能。

在登录功能的实现中,我们使用SpringMVC框架来处理前端发送的登录请求。我们通过注入UserService来调用相应的服务方法,通过用户名从数据库中查询用户信息,然后进行密码校验,最后根据校验结果返回相应的结果信息。

在注册功能的实现中,我们同样使用SpringMVC框架来处理前端发送的注册请求。我们通过注入UserService来调用相应的服务方法,将前端传递的用户名和密码封装成User对象,然后将其插入到数据库中。

值得注意的是,后端的服务实现部分通常需要依赖于MyBatis框架来与数据库进行交互。在UserService中,我们注入了UserMapper,并通过其提供的方法来对数据库表进行操作。

通过以上步骤,我们完成了简易商城系统中的登录和注册功能的实现。可以根据实际需求,在此基础上进行扩展和优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现SSM简易商城项目的登录注册功能 的相关文章

随机推荐

  • python 日期和时间处理(time,datetime模块讲解)

    在现实生活中 我们常常遇到时间序列任务 所以今天讲解下日期和时间处理 Python 日期时间 datetime 1 获取当前时间 import datetime datetime object datetime datetime now p
  • 颜色的 HSL 表示

  • 【vue】图片加载动画效果

    加载后 一种是图片由浅到深 一种是闪光加载效果消失
  • tmux使用

    tmux使用 需求 ssh链接不稳定 若直接在ssh终端中运行某个长时间的程序 会被中断 使用tmux 即使ssh服务中断 tmux中的程序依旧运行着 常用命令汇总 开启一个tmux页面 tmux 开启一个tmux页面 自定义名字 tmux
  • Flutter Divider

    不设置高度 会在线的top和bottom占据一点空间 Divider thickness 1 h color Color 0xFF3D3D3E 设置height之后就正常了 上下没有间距了 Divider thickness 1 h hei
  • Docker未授权访问漏洞(www.hetianlab.com)

    什么是Docker Docker是一个开源的引擎 可以轻松的为任何应用创建一个轻量级的 可移植的 自给自足的容器 开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署 包括VMs 虚拟机 bare metal OpenStack 集
  • Uncaught TypeError: Cannot Read Property

    这是 JavaScript 开发人员最常遇到的错误 当你读取一个属性或调用一个未定义对象的方法时 Chrome 中就会报出这样的错误 导致这个错误发生的原因有很多 常见的一种情况是在渲染 UI 组件时 不正确地初始化状态 我们来看一个真实的
  • getifaddrs, freeifaddrs manual

    GETIFADDRS 3 Linux Programmer s Manual GETIFADDRS 3 NAME top getifaddrs freeifaddrs get interface addresses SYNOPSIS top
  • Java 结构化数据处理开源库 SPL

    现代Java应用架构越来越强调数据存储和处理分离 以获得更好的可维护性 可扩展性以及可移植性 比如火热的微服务就是一种典型 这种架构通常要求业务逻辑要在Java程序中实现 而不是像传统应用架构中放在数据库中 应用中的业务逻辑大都会涉及结构化
  • 专栏推介:《Hi3861网络编程实验》

    引言 本文是鸿蒙专栏 Hi3861网络编程实验 中的第一篇 从这个专栏的名称不难看出 这里面有三个关键词 鸿蒙 即 鸿蒙操作系统 Hi3861 海思生产的一款处理器 网络编程 也就是说 这个专栏就是带着大家做一些网络编程实验 实验代码是基于
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • 测试用例--等价类划分、边界值法

    一 测试用例 案例 test case test instance 1 定义 是在测试执行之前 由测试人员编写的指导测试过程的重要文档 主要包括 用例编号 测试目的 测试步骤 用例描述 预期结果 2 介绍编写测试用例的7种方法 1 等价类划
  • js中常见的错误

    js运行报错 首现我们要先学会查看在哪里查看错误 打开页面点击鼠标右键审查元素 检查 打开控制台 然后根据上面的提示 读取 相关信息 然后读取自己哪里错了 最后寻找相应代码进行修改 1 未定义错误 Uncaught ReferenceErr
  • this指向的一个题

    妈呀啊啊啊啊啊啊啊啊啊啊啊 真的要崩溃 看视频的时候看到了一个this指向的题 想了半个小时 真的被自己蠢到 怎么会有人这么笨啊 function a xx this x xx return this var x a 5 var y a 6
  • 尝试爬取LOL英雄技能属性--01

    首先我们找到一个LOL英雄的全部展示的页面 http lol kuai8 com hero 恕瑞玛 your king has return hah hah金克丝长得不错 点击一下http lol kuai8 com hero 3 html
  • Arduino ESP32自平衡小车制作实现(不需编码器)

    1 mpu6050陀螺仪角度方向和静态平衡角度测试 说明 1 陀螺仪补偿值的计算 试时提前用calcGyroOffsets true 函数计算出 补偿值 知道mpu6050的补偿值后用setGyroOffsets 直接设置补偿值 避免每次开
  • 生成指定长度的随机字符串(数组和字母组合)

    brief getRandomCode 生成指定长度的随机字符串 数组和字母组合 param codelength 指定字符串长度 return 生成的字符串 QString getRandomCode int codelength con
  • 通过git clone批量下载huggingface模型和数据集

    目录 前言 一 配置git全局代理 可选 1 配置http或socks5代理 2 取消代理配置 二 下载步骤 问题 前言 想要下载huggingface的模型 却发现只能一个个文件下载非常不方便 又或者官方提供的api不好用或者下载不下来
  • 浏览器有哪些进程?浏览器进程,渲染进程,网络进程,渲染进程有哪些线程?

    浏览器进程 渲染进程有哪些线程 在浏览器中打开两个页面 会开启几个进程 1个浏览器进程 1个网络进程 一个GPU进程 通常一个Tab页对应一个渲染进程 但有其它情况 1 如果页面中有iframe的话 iframe也会运行在单独的进程中 2
  • 实现SSM简易商城项目的登录注册功能

    实现SSM简易商城项目的登录注册功能 项目背景介绍 在互联网时代 电商行业蓬勃发展 越来越多的人开始关注电子商务 为了实现一个简易商城项目 我们选择了SSM框架作为项目的基础架构 SSM分别代表了Spring SpringMVC和MyBat