Java中使用MVC三层架构做登陆验证

这里主要的内容是有关Java中MVC三层架构

原始的登陆验证

原始的登陆验证写的比较麻烦,所有的逻辑代码都放在了一起,想做修改很费事

package com.LXH.demo1.task;

import com.LXH.bean.User;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

/*
这就是我们之前的代码,不管怎么样,都是从头写到尾
而且我们输出的结果是这样的:

请输入用户名
root
请输入密码
123456
用户不正确
密码正确

显示了用户不正确,但是继续了,没有在那地方中断
也非常乱
 */
//通过这个登录验证来测试spring boot的使用
public class Demo01Login {
    public static void main(String[] args) throws Exception{
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = scanner.next();
        System.out.println("请输入密码");
        String password = scanner.next();

        //登录之后,验证用户是否正确

        //验证用户是否不正确(这地方检验是否正确)
        //如果检验正确的话,比较麻烦
        //先判断用户是否正确才进入数据库进行继续验证
        if(!(username.length()>=5 && username.length()<=11)){
            System.out.println("用户不正确");
        }
        //查数据库,返回所有数据
        //匹配密码

        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://master:3306/LeetCode",
                "root",
                "123456"
        );
        String sql = "select * from user where username=?";
        PreparedStatement statement = conn.prepareStatement(sql);
        statement.setString(1,username);
        ResultSet resultSet = statement.executeQuery();//这里的数据有可能是空
        if(!resultSet.next()){
            System.out.println("用户不存在");
        }

        //有数据的时候,正常来说,用对象来接收
        User user = new User(
                resultSet.getString("username"),
                resultSet.getString("password")
        );

        //验证密码
        if(!password.equals(user.getPassword())){
            System.out.println("密码不正确");
        }
        System.out.println("密码正确");
        
    }
}

分层改进(每个代码都是登录和验证两个功能)

我们想着把数据分几层来写

  • 首先前端显示有一层,我们叫它表现层Controller,这一层是给用户用的
  • 用来做验证的业务层,主要任务就是把用户输入的内容与数据库的内容做关联来进行验证
  • 用来查数据库的持久层,返回数据,不做任何验证,正常情况下返回查询的对象
    在这里插入图片描述

使用分层想法做登陆验证

User类

在这里加上注解,就可以直接使用User中有参无参等方法,
这个注解只需要下载一个lombok包即可
我们的springboot是在maven项目中,放在pom.xml文件中即可

<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
package com.LXH.bean;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String username;
    private String password;
}

表现层

package com.LXH.mvc;

import java.util.Scanner;

//表现层   用户
public class Demo01Controller {
    Demo02Service demo02Service = new Demo02Service();

    //登录
    public String login(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = scanner.next();
        System.out.println("请输入密码");
        String password = scanner.next();

        String login = demo02Service.login(username, password);
        return login;


//        return "登陆成功";
    }

    //注册
    public String register(){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名(2-5)个字符");
        String username = scanner.next();
        System.out.println("请输入密码");
        String password = scanner.next();
        System.out.println("请再次输入密码");
        String newpassword = scanner.next();

        //注册
        String register = demo02Service.register(username, password, newpassword);
        return register;
    }


}

业务层

package com.LXH.mvc;

import com.LXH.bean.User;

//业务层,用来做验证(来和数据库中的数据进行验证)
public class Demo02Service {

    Demo03Dao demo03Dao = new Demo03Dao();

    //数据验证,那这里就需要两个变量
    public String login(String username,String password){
        if(!(username.length()>=2&&username.length()<=5)){
            return "用户格式不正确";
        }

        //查数据库
        User user = demo03Dao.login(username);
        if (user==null){
            return "没有这个用户";
        }else {
            if (!password.equals(user.getPassword())){
                return "密码不正确";
            }else {
                return "登陆成功";
            }
        }

//        if(user==null){
//            return "没有这个用户";
//        }
//        if (!password.equals(user.getPassword())){
//            return "密码不正确";
//        }
//        return "登陆成功";

    }

    public String register(String username,String password,String newpassword){
        if(!(username.length()>=2&&username.length()<=5)){
            return "用户格式不正确";
        }else {
            if(!(password.equals(newpassword))){
                return "两次密码不一样";
            }
            else {
                //插入数据库
                User user = demo03Dao.login(username);
                if(user!=null){
                    System.out.println("用户已经存在");
                }else {
                    int i = demo03Dao.register(username, password);
                    if(i==0){
                        return "注册失败";
                    }else {
                        return "注册成功";
                    }
                }
            }
        }
        return "注册结束";
    }


}

持久层

package com.LXH.mvc;

import com.LXH.bean.User;

import java.sql.*;

//持久层,查数据库 返回数据(不做任何验证) 正常情况下返回查询的对象
public class Demo03Dao {
    static Connection conn = null;
    int i=0;

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            try {
                conn=DriverManager.getConnection(
                        "jdbc:mysql://master:3306/LeetCode",
                        "root",
                        "123456"
                );
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //去数据库中查询数据的时候,只需要一个字段就可以查到数据
    public User login(String username){
        User user=null;
        try {
            String sql = "select * from user where username=?";
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setString(1,username);
            ResultSet resultSet = statement.executeQuery();
            if(!resultSet.next()){
                return user;//如果这里没有数据,就直接返回一个空
            }
            user= new User(resultSet.getString("username"),
                    resultSet.getString("password"));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return user;
    }

    //这里做注册,也就是数据插入的时候,是需要两个字段
    public int register(String username,String password){
        String sql = "insert into user values(?,?)";

        try {
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setString(1,username);
            statement.setString(2,password);
            i = statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return i;

    }

}

感谢阅读,我是啊帅和和,一位大数据专业大四学生,祝你快乐。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊帅和和。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值