JavaEE经典三层模拟登陆

版权声明:转载请注明原始链接 https://blog.csdn.net/sswqzx/article/details/82750988

三层模拟登录原理如下图:

1、准备数据

-- 创建库
create database db1;

-- 创建数据表 user
create table user(
   id int primary key auto_increment,
   username varchar(20) unique not null,
   password varchar(20) not null,
   email varchar(40) not null
);

-- 插入一些数据记录
insert into user values(null,'zhangsan','333','[email protected]');
insert into user values(null,'lisi','222','[email protected]');
insert into user values(null,'wangwu','111','[email protected]');

2、新建User实体类(com.javaEE.user)

package com.javaEE.user;

public class User {
    private int id;
    private String username;
    private int password;
    private String email;

    public User(int id, String username, int password, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public int getPassword() {
        return password;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

3、创建Web层、UserWeb类(com.javaEE.web)

package com.javaEE.web;

import com.javaEE.service.UserService;
import com.javaEE.user.User;

import java.util.Scanner;

public class UserWeb {
    public static void main(String[] args) {
        // 1. 模拟数据 : (键盘录入)
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name = sc.nextLine();
        System.out.println("请输入密码:");
        int pass = Integer.parseInt(sc.nextLine());
        sc.close();

        // 2. 将数据封装为对象
        User user = new User();
        user.setUsername(name);
        user.setPassword(pass);

        //将对象数据传给sevice层
        UserService userService = new UserService();
        User login = userService.login(user);

        // 4. 判断返回的 `loginUser 对象`
        if (login == null){
            System.out.println("登录失败");
        }else {
            System.out.println("登录成功、用户名:"+login.getEmail());
        }
    }
}

运行结果:

4、创建service层、UserService类(com.javaEE.service)

package com.javaEE.service;

import com.javaEE.dao.UserDao;
import com.javaEE.user.User;
import java.util.List;

public class UserService {
    public User login(User user) {
        // 1. 创建一个 DAO 层对象
        UserDao userDao = new UserDao();
        // 2. 根据用户名和密码查询数据库中是否存在该用户
        List<User> list = userDao.findNamePass(user);

        // 3. 判断返回的 list 集合
        if (list == null || list.size() == 0){
            return  null;
        }else {
            // 返回第 0 个下标的 User 对象.
            return list.get(0);
        }
    }
}

5、创建Dao层、UserDao类(com.javaEE.dao)

package com.javaEE.dao;

import com.javaEE.Tools.JDBCUtils;
import com.javaEE.user.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;
import java.util.Objects;

public class UserDao {
    public List<User> findNamePass(User user) {
        // 1. 创建一个 JDBCTemplate 核心类对象, 并同时将数据库连接池对象作为参数传入
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

        //准备sql
        String sql = "select * from user where username = ? and password = ?";
        //准备参数
        Object[] parms = {user.getUsername(),user.getPassword()};
        // 2. 调用 jdbcTemplate 对象的 query 方法
        List<User> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),parms);
        // 3. 直接返回查询的数据
        return query;
    }
}

6、JDBCUtils工具类

package com.javaEE.Tools;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//JDBC c3p0
public class JDBCUtils {
    //加载驱动
    // 创建c3p0连接池对象、会自动加载src下c3p0-config.xml文件
    private static DataSource dataSource = new ComboPooledDataSource();

    // 提供方法得到内部私有的连接池对象
    public static DataSource getDataSource() {
        return dataSource;
    }

    //建立连接
    public static Connection getconnect() throws SQLException {
        return dataSource.getConnection();
    }

    //释放资源
    public static void release(Connection conn, Statement stat, ResultSet rs){
        if (rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        release(conn,stat);
    }
    public static void release(Connection conn,Statement stat){
        if (conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }

        if (stat != null){
            try {
                stat.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
}

7、c3p0-config.xml配置文件、在src目录下

<?xml version="1.0" encoding="UTF-8"?>

<!-- & 转换为 &amp; -->

<c3p0-config>

    <!-- 默认配置,c3p0框架默认加载这段默认配置 -->
    <default-config>
        <!-- 配置JDBC 四个基本属性 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db1?serverTimezone=UTC&amp;characterEncoding=utf-8</property>
        <property name="user">root</property>
        <property name="password">sswqzx</property>
    </default-config>

    <!-- 可以自定义配置,为这段配置起一个名字,c3p0指定名称加载配置 -->
    <named-config name="ssw">
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db2</property>
        <property name="user">root</property>
        <property name="password">sswqzx</property>
    </named-config>

</c3p0-config>

猜你喜欢

转载自blog.csdn.net/sswqzx/article/details/82750988