练习01-登录注册(简单)

一、用户登录/注册实现

综合前面学的知识来实现简单的注册登录功能

1.准备工作

  • 注册登录页面

  • 数据库,数据表

  • mybatis

    • 坐标引入,MySQL驱动

    • 配置

    • 映射文件

  • 用户实体类

  • Servlet代码

2.页面

不想手写的可以看博主IT黄大大【带源码】

【炫酷登录界面】详解5款高级的前端登录页面及实现源码(附完整源码)_好看的前端页面-CSDN博客

也可以根据需要自己仿照着改,我是直接拿来用练习了~

3.数据库

使用IDEA,Navicat等工具创建点初始数据即可

4.mybatis配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--                数据库连接信息--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///【数据库名】?useSSL=false&amp;useServerPrepStmts=true"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers>
​
<!--        包扫描,扫描mapper--><package name="com/mapper"/></mappers>
</configuration>

映射文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
​
<mapper namespace="com.mapper.UserMapper"><sql标签>sql代码...</sql标签>
</mapper>

依赖:

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version>
</dependency>
<!--        mysql驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version>
</dependency><!--单元测试-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope>
</dependency><!--Servlet-->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>

5.用户实体类

没啥要说的,下一个

6.具体

映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
​
<mapper namespace="com.mapper.UserMapper">
​<select id="selectByUsername" resultType="string">select username from user where username = #{username};</select>
​<select id="selectByEmail" resultType="string">select email from user where email = #{email};</select>
​<select id="selectInfoBy_U_P" resultType="com.pojo.User">select * from user where username = #{username} and password = #{password}</select>
​<select id="selectInfoBy_E_P" resultType="com.pojo.User">select * from user where email = #{email} and password = #{password}</select>
​<insert id="add">insert intouser(username,email,password)values(#{username},#{email},#{password});</insert>
</mapper>

封装工具类

package com.util;
​
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
​
import java.io.IOException;
import java.io.InputStream;
​
public class SqlSessionFactoryUtils {private static final SqlSessionFactory SQL_SESSION_FACTORY;
​
​static {String resource = "mybatis-config.xml";InputStream inputStream = null;try {inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {e.printStackTrace();}SQL_SESSION_FACTORY = new SqlSessionFactoryBuilder().build(inputStream);}
​public static SqlSessionFactory getSqlSessionFactory(){return SQL_SESSION_FACTORY;}
}

UserMapper

package com.mapper;
​
import com.pojo.User;
import org.apache.ibatis.annotations.Param;
​
​
public interface UserMapper {/*** 注册:根据用户名查询User对象* @param username 用户名* @return User对象,如果为null,则代表不存在该用户,该用户名可用*/String selectByUsername(String username);
​/*** 注册:根据邮箱查询User对象* @param email 用户名* @return User对象,如果为null,则代表不存在该用户,该邮箱可用*/String selectByEmail(String email);
​/*** 登录:根据用户名和密码查询User是否存在* @param username 用户名* @param password 密码* @return User对象,如果为null,则代表不存在该用户*/User selectInfoBy_U_P(@Param("username") String username,@Param("password") String password);
​/*** 登录:根据邮箱和密码查询User是否存在* @param email 邮箱* @param password 密码* @return User对象,如果为null,则代表不存在该用户*/User selectInfoBy_E_P(@Param("email") String email,@Param("password") String password);
​/*** 注册:添加用户* @param username 用户名* @param email 邮箱* @param password 密码*/void add(@Param("username") String username,@Param("email") String email,@Param("password") String password);
​
}

Servlet

login

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {User user;final String voucher = request.getParameter("voucher");final String password = request.getParameter("password");//查询//1.获取SqlSessionFactory对象final SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
​//2.获取SqlSession对象final SqlSession sqlSession = sqlSessionFactory.openSession();//3.获取Mapperfinal UserMapper mapper = sqlSession.getMapper(UserMapper.class);//4.调用方法if (voucher.contains("@")){user = mapper.selectInfoBy_E_P(voucher,password);}else{user = mapper.selectInfoBy_U_P(voucher,password);}//5.释放资源sqlSession.close();response.setContentType("text/html;charset=utf-8");final PrintWriter writer = response.getWriter();if (user != null){//成功writer.write("登录成功");}else{//失败writer.write("登录失败");}
​
}

register:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {final String username = request.getParameter("username");final String email = request.getParameter("email");final String password = request.getParameter("password");response.setContentType("text/html;charset=utf-8");//查询//1.获取SqlSessionFactory对象final SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
​//2.获取SqlSession对象final SqlSession sqlSession = sqlSessionFactory.openSession();//3.获取Mapperfinal UserMapper mapper = sqlSession.getMapper(UserMapper.class);
​final PrintWriter writer = response.getWriter();//4.调用方法
​if (mapper.selectByUsername(username) != null){System.out.println("1");writer.write("注册失败:用户名已存在");}else if (mapper.selectByEmail(email) != null){System.out.println("2");writer.write("注册失败:邮箱已使用");}else {mapper.add(username, email, password);sqlSession.commit();writer.write("注册成功");}
​//5.释放资源sqlSession.close();
​
​
}

核心就这点,结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538974.html

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

相关文章

vue2+vant2+Laravel7 实现多图上传到七牛云

后端接口 1、路由&#xff0c;在 routes/api.php 中 Route::resource(photos, PhotoController)->only(store);2、创建对应控制器 <?php namespace App\Http\Controllers; use Illuminate\Http\Request;class PhotoController extends Controller {/**** 上传图片* p…

如何实现接口

类实现接口 用关键字implements声明自己实现一个或 多个接口 实现 多个接口&#xff0c;用 逗号分隔开 重写接口中的方法 要求&#xff1a;类实现某个接口&#xff0c;类必须重写该接口的所有方法。 重写规则&#xff1a; 去掉public abstact修饰符 给出方法体&#xff08;具…

终于找到方法!多个微信同时登录一台电脑!

大家都知道&#xff0c;在手机上登录多个微信号&#xff0c;有很多工具可以实现&#xff0c;但是要想在电脑上同时登录多个微信账号&#xff0c;也是有方法可以实现的&#xff0c;下面就一起来看看吧&#xff01; 通过使用微信管理系统&#xff0c;能够让我们实现多个微信账号…

【JavaScript】JavaScript 简介 ④ ( 解释型语言 和 编译型语言 | 计算机程序本质 | 编译器 和 解释器 )

文章目录 一、 解释型语言 和 编译型语言1、计算机程序本质2、编译器 和 解释器3、编译器 分析4、解释器 分析 一、 解释型语言 和 编译型语言 1、计算机程序本质 计算机 的 程序 是在 CPU 上执行的 , CPU 上执行的只有匹配该 CPU 的机器码指令 , 不同类型的 CPU 执行的 机器码…

Milvus向量数据库检索

官方文档&#xff1a;https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离&#xff0c;并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)上篇

提供具有网页显示能力的Web组件&#xff0c;ohos.web.webview提供web控制能力。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。示例效果请以真机运行为准&#xff0c;当前IDE预览器不支持。 需要权…

【动态规划】代码随想录算法训练营第五十三天 |1143.最长公共子序列, 1035.不相交的线 ,53. 最大子序和 动态规划 (待补充)

1143.最长公共子序列 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个…

基于Python的中医药知识问答系统设计与实现

[简介] 这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言&#xff0c;结合中医药领域的知识和技术&#xff0c;实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性&#xff0c;然后提出了设计思路…

阿里通义灵码全面公测,来看看它的水平怎么样?

作者&#xff1a;颖欣 人工智能作为新一轮的技术革命&#xff0c;已经开始渗透到软件开发领域&#xff0c;改变着传统的编码模式。如何利用 AI 技术提升软件开发的效率和质量&#xff0c;成为各家研究的重点。去年 10 月阿里云正式发布的通义灵码 - 智能编码助手&#xff0c;如…

新生宿舍管理系统|基于springboot框架+ Mysql+Java+B/S架构的新生宿舍管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 学生功能模块 管理员功能 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究目的 开发环境 项目部…

【Vue2】slot 插槽全家桶

插槽-默认插槽 插槽的基本语法 组件内需要定制的结构部分&#xff0c;改用<slot></slot>占位使用组件时, <MyDialog></MyDialog>标签内部, 传入结构替换slot给插槽传入内容时&#xff0c;可以传入纯文本、html标签、组件 插槽-默认值 封装组件时&am…

在dpvs上实现ICMP的源进源出

目录 1. 缘起2. 源码分析3. 让ICMP也走源进源出1. 缘起 在网络通信中,当一个请求报文从源主机到达目标主机,并经过中间路由器或交换机进行转发时,请求报文进入主机A的路径和响应报文离开主机A的路径可能不同。这种情况下,就会出现所谓的三角路径问题。如下图: 具体来说,…