首页 > 其他分享 >mybatis+servlet实现用户注册与登录

mybatis+servlet实现用户注册与登录

时间:2022-08-26 16:33:45浏览次数:74  
标签:username java String 用户注册 org mybatis import password servlet

环境准备

  1. 创建注册页面与登录页面
    login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="/tomcat_war/loginServlet" method="post">
    <h1 id="loginMsg">Login In</h1>
    <p>username:<input id="username" name="username" type="text"></p>
    <p>password:<input id="password" name="password" type="password"></p>
    <input type="submit" class="button" value="login up">
    <input type="reset" class="button" value="reset">
    <a href="register.html">没有账号?点击注册</a>
</form>
</body>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>register</title>
</head>
<body>
<form action="/tomcat_war/registerServlet" method="get">
    <h1>Login In</h1>
    <p>username:<input id="username" name="username" type="text"></p>
    <p>password:<input id="password" name="password" type="password"></p>
    <input type="submit" class="button" value="register">
    <input type="reset" class="button" value="reset">
    <a href="login.html">已有账号,跳转到登录</a>
</form>
</body>
</html>
  1. 在数据库中创建表与数据(数据库名为db)
create table tb_user (
    id int primary key auto_increment,
    username varchar(20) unique,
    password varchar(32)
);

insert into tb_user(username, password) values('zhangsan', '123'), ('lisi', '234');

select * from tb_user;
  1. 创建POJO类User.java(在pojo目录下)
package org.example.pojo;

public class User {
    private Integer id;
    private String username;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
  1. pom.xml导入MyBatis坐标和MySQL驱动坐标
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.10</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.30</version>
    </dependency>
  1. 创建mybatis-config.xml(resource目录下)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias type="org.example.pojo.User" alias="Brand"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///db?useSSL=false&amp;useServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="lbyuoe"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="org.example.mapper"/>
    </mappers>
</configuration>
  1. 创建UserMapper.java接口(org.example.mapper目录下)
  2. 创建UserMapper.xml(resource.org.example.mapper目录下)
<?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="org.example.mapper.UserMapper">

</mapper>


# 用户登录 1. UserMapper.java编写查询代码 ```java /** * 根据用户名和密码查找对象 * @param username * @param password * @return */ @Select("select * from tb_user where username = #{username} and password = #{password}") User select(@Param("username")String username, @Param("password")String password); ``` 2. 创建LoginServlet.java(在org.example.web目录下) ```java package org.example.web;

import jakarta.servlet.;
import jakarta.servlet.http.
;
import jakarta.servlet.annotation.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.example.mapper.UserMapper;
import org.example.pojo.User;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接受用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");

    // 调用MyBatis完成查询
    // 获取SqlSessionFactory对象
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 获取SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    // 获取Mapper
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    // 调用方法
    User user = userMapper.select(username, password);

    // 释放资源
    sqlSession.close();

    // 判断User查询结果
    response.setContentType("text/html");
    PrintWriter writer = response.getWriter();
    if (user != null) {
        // 登录成功
        writer.write("登录成功");
    } else {
        // 登录失败
        writer.write("登录失败");
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doGet(request, response);
}

}

<hr/>
# 用户注册
1. UserMapper.java添加用户名查找和添加用户名密码的代码
```java
    /**
     * 根据用户名查找对象
     * @param username
     * @return
     */
    @Select("select * from tb_user where username = #{username}")
    User selectByUsername(@Param("username")String username);

    /**
     * 添加用户名和密码
     * @param user
     */
    @Insert("insert into tb_user (id, username, password) values (null, #{username}, #{password});")
    void add(User user);
  1. 编写LoginServlet代码(org.example.web目录下)
package org.example.web;

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.example.mapper.UserMapper;
import org.example.pojo.User;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 接收用户输入的数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 封装用户对象
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);

        // 调用MyBatis完成查询
        // 获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 获取Mapper
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        // 获取字节输出流
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();

        // 查询用户名是否存在
        if (userMapper.selectByUsername(username) != null) {
            // 用户名已存在
            writer.write("用户名已存在");
        } else {
            // 不用户名不存在,添加数据
            userMapper.add(user);
            // 提交事务
            sqlSession.commit();
        }

        // 释放资源
        sqlSession.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

最后结果


github:https://github.com/ciyeye/mybatis_servlet_for_login_register
来源:https://www.bilibili.com/video/BV1Qf4y1T7Hx(P109、P110)

标签:username,java,String,用户注册,org,mybatis,import,password,servlet
From: https://www.cnblogs.com/lbyuoe/p/16607057.html

相关文章

  • mybatis-config.xml配置
    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-conf......
  • mybatis-万能Mapper
    万能Mapper假设,我们的实体类,或者//万能的MapintaddUser2(Map<String,Object>map);<!--insert万能Map--><insertid="addUser2"parameterType="map">......
  • mybatis资源扫描 插件
    <!--在build中配置resources,来防止我们资源导出失败的问题--><build><resources><resource><directory>src/main/resources</directory>......
  • Mybatis-Plus高级之LambdaQueryWrapper,Wrappers.<实体类>lambdaQuery的使用
    一、前言小编今天又来分享干货了,绝对的干净又卫生,大伙请放心食用哈!Mybatis-Plus我们经常使用,但是里面的很多功能,小编开始只是知道一点点,做个增删改查没问题。小编在新项目......
  • Java Servlet 入门: 重复注解的使用。
    刚好需要用到重复注解:下面进行示例使用:1、先正常定义一个注解:@Retention(value=RetentionPolicy.RUNTIME)@Target(value={ElementType.METHOD})@Inheritedpubl......
  • MyBatis-plus基础
    1.MyBatis-plus简介官网:https://www.mybatis-plus.com/2.快速开始(SpringBoot中使用MyBatis-plus的demo)数据库表user如下:DROPTABLEIFEXISTSuser;CREATETAB......
  • Servlet
    0.IDEA创建第一个Servlet程序创建Servlet参考:参考1.概述1.概念JavaServlet(Serverapplet)是运行在Web服务器或应用服务器上的基于HTTP协议的程序,它是作为来自Web......
  • Java Servlet 入门:问题系列:反射方法参数名获取不到问题:arg0,arg1
    问题:获取反射的方法参数名时,得到arg0,arg1,而不是定义的参数名。示例代码:Parameter[]parameters=methodInfo.getParameters();if(parameters!=null&&parame......
  • 使用mybatis的Criteria 查询、条件过滤用法
     借鉴博客:https://cloud.tencent.com/developer/article/1979972 1、如果业务查询中,有的条件要用括号()括起来达到想要的效果,如:第2个and后面的条件要括起来【此业......
  • BeanServlet抽取
    BeanServlet抽取优化Servlet减少servlet的数量现在是一个功能一个Servlet将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet在Servlet中提供不同......