这里主要的内容是有关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;
}
}
感谢阅读,我是啊帅和和,一位大数据专业大四学生,祝你快乐。