使用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三层架构设计完成用户管理模块和用户登录业务的例子。在实际开发中,还需要考虑错误处理、异常处理、性能优化、安全性等方面的问题。