使用Java书写,运用数据访问层、业务逻辑层、UI层三层架构设计完成用户管理模块,完成用户登录业务设计

时间: 2024-01-24 15:05:17 浏览: 27
好的,以下是一个简单的Java三层架构设计完成用户管理模块和用户登录业务: 1. 数据库设计 我们假设需要设计一个用户表,包括用户ID、用户名、密码、角色等字段。可以使用如下的SQL语句创建用户表: ```sql CREATE TABLE user ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, role VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); ``` 2. 数据访问层 在数据访问层,我们使用JDBC连接数据库,实现对用户表的CRUD操作。我们可以创建一个名为UserDAO的类,包含如下方法: ```java public class UserDAO { // 数据库连接信息 private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:3306/test"; private static final String USER = "root"; private static final String PASS = "password"; // 查询所有用户 public List<User> findAll() { List<User> users = new ArrayList<>(); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); stmt = conn.createStatement(); String sql = "SELECT id, username, password, role FROM user"; rs = stmt.executeQuery(sql); while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setRole(rs.getString("role")); users.add(user); } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } return users; } // 根据ID查询用户 public User findById(int id) { User user = null; Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); String sql = "SELECT id, username, password, role FROM user WHERE id=?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, id); rs = stmt.executeQuery(); if (rs.next()) { user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setRole(rs.getString("role")); } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } return user; } // 添加用户 public void add(User user) { Connection conn = null; PreparedStatement stmt = null; try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); String sql = "INSERT INTO user (username, password, role) VALUES (?, ?, ?)"; stmt = conn.prepareStatement(sql); stmt.setString(1, user.getUsername()); stmt.setString(2, user.getPassword()); stmt.setString(3, user.getRole()); stmt.executeUpdate(); } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } // 修改用户 public void update(User user) { Connection conn = null; PreparedStatement stmt = null; try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); String sql = "UPDATE user SET username=?, password=?, role=? WHERE id=?"; stmt = conn.prepareStatement(sql); stmt.setString(1, user.getUsername()); stmt.setString(2, user.getPassword()); stmt.setString(3, user.getRole()); stmt.setInt(4, user.getId()); stmt.executeUpdate(); } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } // 删除用户 public void delete(int id) { Connection conn = null; PreparedStatement stmt = null; try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(DB_URL, USER, PASS); String sql = "DELETE FROM user WHERE id=?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, id); stmt.executeUpdate(); } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } } ``` 3. 业务逻辑层 在业务逻辑层,我们使用数据访问层提供的方法,实现对用户表的业务逻辑处理。我们可以创建一个名为UserService的类,包含如下方法: ```java public class UserService { private UserDAO userDAO; public UserService() { userDAO = new UserDAO(); } // 查询所有用户 public List<User> findAll() { return userDAO.findAll(); } // 根据ID查询用户 public User findById(int id) { return userDAO.findById(id); } // 添加用户 public void add(User user) { userDAO.add(user); } // 修改用户 public void update(User user) { userDAO.update(user); } // 删除用户 public void delete(int id) { userDAO.delete(id); } // 验证用户登录信息 public boolean login(String username, String password) { User user = userDAO.findByUsername(username); if (user != null && user.getPassword().equals(password)) { return true; } return false; } } ``` 4. UI层 在UI层,我们使用Swing框架实现用户管理模块的用户界面和登录界面。我们可以创建一个名为UserFrame的类,包含如下界面: ```java public class UserFrame extends JFrame { private UserService userService; private JTable userTable; private DefaultTableModel tableModel; private JTextField idField; private JTextField usernameField; private JTextField passwordField; private JTextField roleField; public UserFrame() { userService = new UserService(); setTitle("用户管理"); setSize(600, 400); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 用户列表 userTable = new JTable(); tableModel = new DefaultTableModel(new Object[][]{}, new Object[]{"ID", "用户名", "角色"}); userTable.setModel(tableModel); JScrollPane scrollPane = new JScrollPane(userTable); // 用户表单 JPanel userPanel = new JPanel(new GridLayout(4, 2, 5, 5)); idField = new JTextField(10); usernameField = new JTextField(10); passwordField = new JTextField(10); roleField = new JTextField(10); userPanel.add(new JLabel("ID:")); userPanel.add(idField); userPanel.add(new JLabel("用户名:")); userPanel.add(usernameField); userPanel.add(new JLabel("密码:")); userPanel.add(passwordField); userPanel.add(new JLabel("角色:")); userPanel.add(roleField); // 按钮 JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); JButton addButton = new JButton("添加"); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { User user = new User(); user.setUsername(usernameField.getText()); user.setPassword(passwordField.getText()); user.setRole(roleField.getText()); userService.add(user); refreshTable(); } }); JButton updateButton = new JButton("修改"); updateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { User user = new User(); user.setId(Integer.parseInt(idField.getText())); user.setUsername(usernameField.getText()); user.setPassword(passwordField.getText()); user.setRole(roleField.getText()); userService.update(user); refreshTable(); } }); JButton deleteButton = new JButton("删除"); deleteButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int id = Integer.parseInt(idField.getText()); userService.delete(id); refreshTable(); } }); buttonPanel.add(addButton); buttonPanel.add(updateButton); buttonPanel.add(deleteButton); // 窗口布局 setLayout(new BorderLayout()); add(scrollPane, BorderLayout.CENTER); add(userPanel, BorderLayout.NORTH); add(buttonPanel, BorderLayout.SOUTH); // 刷新用户列表 refreshTable(); } // 刷新用户列表 private void refreshTable() { List<User> users = userService.findAll(); tableModel.setRowCount(0); for (User user : users) { Object[] rowData = new Object[]{ user.getId(), user.getUsername(), user.getRole() }; tableModel.addRow(rowData); } } public static void main(String[] args) { // 显示用户管理界面 UserFrame userFrame = new UserFrame(); userFrame.setVisible(true); // 显示登录界面 LoginFrame loginFrame = new LoginFrame(userFrame); loginFrame.setVisible(true); } } ``` 其中,登录界面可以创建一个名为LoginFrame的类,包含如下界面: ```java public class LoginFrame extends JFrame { private UserService userService; private UserFrame userFrame; private JTextField usernameField; private JPasswordField passwordField; public LoginFrame(UserFrame userFrame) { userService = new UserService(); this.userFrame = userFrame; setTitle("用户登录"); setSize(300, 150); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 登录表单 JPanel loginPanel = new JPanel(new GridLayout(2, 2, 5, 5)); usernameField = new JTextField(10); passwordField = new JPasswordField(10); loginPanel.add(new JLabel("用户名:")); loginPanel.add(usernameField); loginPanel.add(new JLabel("密码:")); loginPanel.add(passwordField); // 按钮 JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); JButton loginButton = new JButton("登录"); loginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String username = usernameField.getText(); String password = new String(passwordField.getPassword()); if (userService.login(username, password)) { userFrame.setVisible(true); setVisible(false); } else { JOptionPane.showMessageDialog(LoginFrame.this, "用户名或密码错误", "错误", JOptionPane.ERROR_MESSAGE); } } }); buttonPanel.add(loginButton); // 窗口布局 setLayout(new BorderLayout()); add(loginPanel, BorderLayout.CENTER); add(buttonPanel, BorderLayout.SOUTH); } } ``` 5. 运行测试 我们可以在main方法中先创建登录界面,当用户登录成功后再创建用户管理界面,代码如下: ```java public static void main(String[] args) { // 显示用户管理界面 UserFrame userFrame = new UserFrame(); userFrame.setVisible(false); // 显示登录界面 LoginFrame loginFrame = new LoginFrame(userFrame); loginFrame.setVisible(true); } ``` 6. 总结 以上是一个简单的Java三层架构设计完成用户管理模块和用户登录业务的例子。在实际开发中,还需要考虑错误处理、异常处理、性能优化、安全性等方面的问题。

相关推荐

最新推荐

recommend-type

什么是三层架构_表现层/业务逻辑层/数据访问层

三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
recommend-type

使用BootStrap实现用户登录界面UI

本文给大家介绍使用BootStrap实现用户登录界面UI,布局风格采用左右各一半的风格设计,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
recommend-type

vue 实现用户登录方式的切换功能

主要介绍了vue 实现用户登录方式的切换功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

常见UI设计模式及国内三大B2C网站首页的信息架构

交互设计师在设计线框图原型时,熟知常见的web设计模式很有帮助,做到“心中有数”才能创造出符合需求,用户易学易用的界面来。所谓“没有必要重复发明轮子”,模式往往容易解决常见问题,正确的模式能帮用户熟悉...
recommend-type

ansys maxwell

ansys maxwell
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。