JAVA学习笔记(五十三)- 经典三层架构实例

UserDAO接口

/*
 * UserDAO接口
 */
public interface UserDAO {
    //插入用户
    public void insert(User user);

    //删除用户
    public void delete(int id);

    //更新用户
    public void update(User user);

    //查询所有用户
    public List<User> getAllUsers();

    //根据用户名或密码查询用户
    public boolean checkUser(User user);

    //根据编号查询用户
    public User getUserById(int id);
}

UserDAOImpl实现类

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/*
 * UserDAOImpl实现类
 */
public class UserDAOImpl implements UserDAO{
    Connection conn=null;
    PreparedStatement pstmt=null;
    ResultSet rs=null;

    @Override
    public void insert(User user) {
        // TODO Auto-generated method stub

    }

    @Override
    public void delete(int id) {
        // TODO Auto-generated method stub

    }

    @Override
    public void update(User user) {
        // TODO Auto-generated method stub

    }

    @Override
    public List<User> getAllUsers() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean checkUser(User user) {
        boolean flag=false;
        String sql="select * from user where username=? and password=?";
        try {
            conn=DBUtil.getConnection();
            pstmt=conn.prepareStatement(sql);
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            rs=pstmt.executeQuery();
            if(rs.next()){
                flag=true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            DBUtil.closeAll(rs, pstmt, conn);
        }
        return flag;
    }

    @Override
    public User getUserById(int id) {
        // TODO Auto-generated method stub
        return null;
    }

}

UserService接口

/*
 * UserService接口
 */
public interface UserService {
    //用户注册
    public void register(User user);

    //用户登陆
    public boolean login(User user);
}

UserServiceImpl实现类,调用DAO完成相应的功能

/*
 * UserServiceImpl实现类,调用DAO完成相应的功能
 */
public class UserServiceImpl implements UserService {

    //创建UserDAO实例
    UserDAO ud=new UserDAOImpl();

    @Override
    public void register(User user) {
        ud.insert(user);
    }

    @Override
    public boolean login(User user) {
        return ud.checkUser(user);
    }

}

数据库工具类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/*
 * 数据库工具类
 */
public class DBUtil {
    //获取数据库连接
    public static Connection getConnection(){
        Connection conn=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    //关闭所有资源
    public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
        try {
            if(rs!=null)
                rs.close();
            if(stmt!=null)
                stmt.close();
            if(conn!=null)
                conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

登陆窗体


/*
 * 登陆窗体
 */
public class Login implements ActionListener {

    //定义一个UserService实例
    UserService us=new UserServiceImpl();

    // 登陆窗体组件
    private JFrame frmLogin = new JFrame("登陆");
    private JPanel[] pnls = new JPanel[4]; // 4行面板

    private JLabel lblWelcome = new JLabel("欢迎使用小型超市管理系统!");
    private JLabel lblUsername = new JLabel("用户名:");
    private JTextField txtUsername = new JTextField(20);
    private JLabel lblPassword = new JLabel("密  码:");
    private JPasswordField txtPassword = new JPasswordField(20);
    private JButton btnLogin = new JButton("登陆");
    private JButton btnExit = new JButton("退出");

    // 初始化组件
    public Login() {
        // 初始化4行面板,并添加到窗体中
        for (int i = 0; i < pnls.length; i++) {
            pnls[i] = new JPanel();
            pnls[i].setOpaque(false);// 设置面板透明
            frmLogin.add(pnls[i]);// 将面板添加到组件中
        }

        // 初始化JLabel和文本框,并添加载面板中
        lblWelcome.setFont(new Font("黑体", Font.BOLD, 20));
        lblWelcome.setForeground(Color.red);
        pnls[0].add(lblWelcome);

        pnls[1].setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0));
        pnls[1].add(lblUsername);
        pnls[1].add(txtUsername);

        pnls[2].setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0));
        pnls[2].add(lblPassword);
        pnls[2].add(txtPassword);

        pnls[3].setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0));
        pnls[3].add(btnLogin);
        pnls[3].add(btnExit);

        // 添加监听
        btnLogin.addActionListener(this);
        btnExit.addActionListener(this);

        //设置窗体背景图片
        ImageIcon iconBg=new ImageIcon("images/bg.jpg");
        JLabel lblBg=new JLabel(iconBg);
        lblBg.setSize(iconBg.getIconWidth(), iconBg.getIconHeight());
        JLayeredPane layeredPane=frmLogin.getLayeredPane();
        layeredPane.add(lblBg, new Integer(Integer.MIN_VALUE));
        JPanel contentPane=(JPanel) frmLogin.getContentPane();
        contentPane.setOpaque(false);

        //初始化窗体
        frmLogin.setLayout(new GridLayout(4, 1));
        frmLogin.setSize(400,300);
        frmLogin.setResizable(false);
        frmLogin.setLocationRelativeTo(null);
        frmLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmLogin.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand(); // 获取按钮上的文字
        if (cmd.equals("登陆")) {
            String username=txtUsername.getText();
            String password=new String(txtPassword.getPassword());
            User user=new User(username,password);
            if(us.login(user)){
                frmLogin.dispose();//隐藏登陆窗体
                new JFrame().setVisible(true);
            }else{
                JOptionPane.showMessageDialog(frmLogin, "用户名或密码不正确!");
            }
        } else {
            int choice=JOptionPane.showConfirmDialog(frmLogin, "确定要退出吗?", "提示",
                    JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
            if(choice==0){ //如果选择是,则退出程序
                System.exit(0);
            }
        }

    }

    public static void main(String[] args) {
        new Login();
    }
}

数据库设计

create table user
(
    id int primary key auto_increment,
    username varchar(20) not null,
    password varchar(20) not null
);

insert into user values (null,‘admin‘,‘123‘);
insert into user values (null,‘tom‘,‘456‘);
时间: 2024-09-29 23:45:15

JAVA学习笔记(五十三)- 经典三层架构实例的相关文章

JAVA学习笔记(五十二)- 开发DAO层的经典实现

StudentDAO接口,定义学生相关的操作 /* * StudentDAO接口,定义学生相关的操作 */ public interface StudentDAO { //添加学生 public void addStudent(Student stu); //删除学生 public void deleteStudent(int id); //修改学生 public void updateStudent(Student stu); //查询所有学生 public List<Student> ge

Java学习笔记—第十三章 数据库编程入门

第十三章 数据库编程入门 了解JDBC Java中对数据库的访问主要是通过JDBC进行的.JDBC是Java数据库连接技术(Java Database Connectivity)的简称,是用于执行SQL语句的API,可以为多种关系数据库提供统一访问.由一组用Java语言编写的类和接口组成.(SQL是Structure Query Language的缩写,意义为结构化查询语言,是一种标准的关系数据库访问语言.) JDBC的工作机制 使用JDBC完成对数据库的访问主要包括以下五个层次:Java应用程

Java学习笔记五(多线程)

1.介绍 线程能够使程序具有两条和两条以上的可执行的路径,尤其对多核CPU特别的重要. 2.创建线程 1.继承Thread类 一个类直接的继承Thread类的话,此类就具有了线程的能力,接下来只需要重写继承的run()即可. <span style="font-size:18px;">package com.Thread; //定义实现Runnable接口的类 class MyThread11 extends Thread { //实现run方法,指定线程执行的任务 pub

JAVA学习第五十三课 — IO流(七)File对象练习 &amp; Properties集合

一.练习 深度遍历文件夹 深度遍历很自然而然想到递归,而递归就很自然的想到其实现的底层算法是栈 对指定目录下列出所有内容(包含子目录的内容) PS:建议不要遍历C盘 import java.io.*; public class Main { public static void main(String[] args) throws IOException { File dir = new File("D:\\ACM集训"); ListAllDemo(dir,0); } public s

Java学习笔记五——流程控制

分支结构 Java提供了两种常见的分支控制结构:if语句和switch语句. if语句 if语句使用布尔值或布尔表达式(表达式结果为布尔值),if语句有3中形式: 第一种形式: if (5 > 3) { System.out.println("5 > 3"); } 第二种形式: if (5 > 3) { System.out.println("5 > 3"); } else{ System.out.println("5 < 3

JAVA学习笔记(五十)- JDBC Java数据库连接

JDBC操作步骤 /* * JDBC操作步骤 * */ public class Test01 { public static void main(String[] args) { try { //1.加载并注册驱动 Class.forName("com.mysql.jdbc.Driver"); //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); System.out.println("注册驱动成功!&qu

JAVA学习笔记(五十一)- DBUtil 封装数据库工具类

数据库工具类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 数据库工具类 */ public class DBUtil { // 获取数据库连接 public static Connection getConnection() { String dr

JAVA学习笔记(三十三)- 字节流转换为字符流

将字节流转换为字符流 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; /* * InputStreamRead

JAVA学习笔记(五十九)- Socket编程

客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; /* * 客户端 */ public class Client { public static void main(String[] args) throws IOExcep