java操作mysql的三层架构,草稿。

java操作mysql的三层架构 代码 以学生类为案例, 学生类有 sid name age birthday

2024/10/11 18:15:16

下面是一个基于Java的三层架构示例,使用学生类作为案例。该示例实现了对MySQL数据库中学生信息的基本操作,包括添加学生、获取所有学生等功能。

1. 数据库配置

首先,确保你的MySQL数据库中有一个学生表。你可以使用以下SQL语句创建表:

复制代码

sqlCopy Code

CREATE TABLE students ( sid INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), age INT, birthday DATE );

2. 学生实体类

复制代码

javaCopy Code

public class Student { private int sid; private String name; private int age; private java.sql.Date birthday; public Student(String name, int age, java.sql.Date birthday) { this.name = name; this.age = age; this.birthday = birthday; } public Student(int sid, String name, int age, java.sql.Date birthday) { this.sid = sid; this.name = name; this.age = age; this.birthday = birthday; } // Getters and setters public int getSid() { return sid; } public String getName() { return name; } public int getAge() { return age; } public java.sql.Date getBirthday() { return birthday; } @Override public String toString() { return "Student{" + "sid=" + sid + ", name='" + name + '\'' + ", age=" + age + ", birthday=" + birthday + '}'; } }

3. 数据访问层 (DAO)

复制代码

javaCopy Code

import java.sql.*; import java.util.ArrayList; import java.util.List; public class StudentDao { private String jdbcURL = "jdbc:mysql://localhost:3306/your_database"; private String jdbcUsername = "your_username"; private String jdbcPassword = "your_password"; public Connection getConnection() { Connection connection = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } return connection; } public void addStudent(Student student) { String sql = "INSERT INTO students (name, age, birthday) VALUES (?, ?, ?)"; try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, student.getName()); statement.setInt(2, student.getAge()); statement.setDate(3, student.getBirthday()); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public List<Student> getAllStudents() { List<Student> students = new ArrayList<>(); String sql = "SELECT * FROM students"; try (Connection connection = getConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) { while (resultSet.next()) { int sid = resultSet.getInt("sid"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); java.sql.Date birthday = resultSet.getDate("birthday"); students.add(new Student(sid, name, age, birthday)); } } catch (SQLException e) { e.printStackTrace(); } return students; } }

4. 业务层

复制代码

javaCopy Code

import java.util.List; public class StudentService { private StudentDao studentDao = new StudentDao(); public void registerStudent(Student student) { studentDao.addStudent(student); } public List<Student> getAllStudents() { return studentDao.getAllStudents(); } }

5. 表示层 (控制器)

复制代码

javaCopy Code

import java.sql.Date; import java.util.List; public class StudentController { private StudentService studentService = new StudentService(); public void addStudent(String name, int age, Date birthday) { Student student = new Student(name, age, birthday); studentService.registerStudent(student); } public void displayStudents() { List<Student> students = studentService.getAllStudents(); for (Student student : students) { System.out.println(student); } } }

6. 主程序

复制代码

javaCopy Code

import java.sql.Date; public class Main { public static void main(String[] args) { StudentController studentController = new StudentController(); // 添加学生 studentController.addStudent("Alice", 20, Date.valueOf("2003-01-15")); studentController.addStudent("Bob", 22, Date.valueOf("2001-05-20")); // 显示所有学生 studentController.displayStudents(); } }

7. Maven依赖

如果你使用Maven,请在pom.xml中添加MySQL驱动依赖:

复制代码

xmlCopy Code

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> <!-- 请根据需要更新版本 --> </dependency>

总结

以上代码展示了如何在Java中实现一个简单的三层架构来操作MySQL数据库中的学生信息。你可以根据项目需求扩展功能,例如增加异常处理、输入验证等。

2024/10/11 18:28:31

再加一个修改学生和删除学生

2024/10/11 18:28:38

当然可以!我们可以在上面的示例中添加修改和删除学生的功能。以下是对 StudentDaoStudentService 类的扩展,以实现这些操作。

1. 更新数据访问层 (DAO)

StudentDao 中添加 updateStudentdeleteStudent 方法。

复制代码

javaCopy Code

public class StudentDao { // ... 现有代码 ... public void updateStudent(Student student) { String sql = "UPDATE students SET name = ?, age = ?, birthday = ? WHERE sid = ?"; try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, student.getName()); statement.setInt(2, student.getAge()); statement.setDate(3, student.getBirthday()); statement.setInt(4, student.getSid()); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public void deleteStudent(int sid) { String sql = "DELETE FROM students WHERE sid = ?"; try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { statement.setInt(1, sid); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } }

2. 更新业务层

StudentService 中添加对应的方法。

复制代码

javaCopy Code

public class StudentService { private StudentDao studentDao = new StudentDao(); // ... 现有代码 ... public void updateStudent(Student student) { studentDao.updateStudent(student); } public void deleteStudent(int sid) { studentDao.deleteStudent(sid); } }

3. 更新表示层 (控制器)

StudentController 中添加新的方法来处理更新和删除请求。

复制代码

javaCopy Code

public class StudentController { private StudentService studentService = new StudentService(); // ... 现有代码 ... public void updateStudent(int sid, String name, int age, Date birthday) { Student student = new Student(sid, name, age, birthday); studentService.updateStudent(student); } public void deleteStudent(int sid) { studentService.deleteStudent(sid); } }

4. 更新主程序

Main 类中添加修改和删除学生的示例。

复制代码

javaCopy Code

public class Main { public static void main(String[] args) { StudentController studentController = new StudentController(); // 添加学生 studentController.addStudent("Alice", 20, Date.valueOf("2003-01-15")); studentController.addStudent("Bob", 22, Date.valueOf("2001-05-20")); // 显示所有学生 studentController.displayStudents(); // 修改学生信息 studentController.updateStudent(1, "Alice Smith", 21, Date.valueOf("2003-01-15")); // 删除学生 studentController.deleteStudent(2); // 显示所有学生 studentController.displayStudents(); } }

总结

现在,程序中已经实现了添加、修改和删除学生的功能。你可以根据需要调整和扩展这些功能,例如添加输入验证和异常处理。这样,程序就更加健壮且易于维护。

2024/10/11 18:30:45

主程序位置通过私循环,显示菜单的方式,根据输入的选项完成 增,删,改,查,全显示,和退出功能。

2024/10/11 18:30:52

当然可以!我们可以通过一个简单的菜单循环来实现用户界面,以便用户根据输入选择不同的操作。下面是更新后的 Main 类,它使用循环和菜单选项来执行增、删、改、查和退出功能。

更新后的主程序

复制代码

javaCopy Code

import java.sql.Date; import java.util.Scanner; public class Main { public static void main(String[] args) { StudentController studentController = new StudentController(); Scanner scanner = new Scanner(System.in); int choice; do { System.out.println("欢迎使用学生管理系统"); System.out.println("1. 添加学生"); System.out.println("2. 修改学生"); System.out.println("3. 删除学生"); System.out.println("4. 显示所有学生"); System.out.println("5. 退出"); System.out.print("请输入你的选择: "); choice = scanner.nextInt(); scanner.nextLine(); // 清除换行符 switch (choice) { case 1: // 添加学生 System.out.print("请输入学生姓名: "); String name = scanner.nextLine(); System.out.print("请输入学生年龄: "); int age = scanner.nextInt(); System.out.print("请输入学生生日 (yyyy-mm-dd): "); String birthdayInput = scanner.next(); Date birthday = Date.valueOf(birthdayInput); studentController.addStudent(name, age, birthday); System.out.println("学生添加成功!"); break; case 2: // 修改学生 System.out.print("请输入要修改的学生ID: "); int sidToUpdate = scanner.nextInt(); scanner.nextLine(); // 清除换行符 System.out.print("请输入新的学生姓名: "); String newName = scanner.nextLine(); System.out.print("请输入新的学生年龄: "); int newAge = scanner.nextInt(); System.out.print("请输入新的学生生日 (yyyy-mm-dd): "); String newBirthdayInput = scanner.next(); Date newBirthday = Date.valueOf(newBirthdayInput); studentController.updateStudent(sidToUpdate, newName, newAge, newBirthday); System.out.println("学生信息修改成功!"); break; case 3: // 删除学生 System.out.print("请输入要删除的学生ID: "); int sidToDelete = scanner.nextInt(); studentController.deleteStudent(sidToDelete); System.out.println("学生删除成功!"); break; case 4: // 显示所有学生 System.out.println("所有学生信息:"); studentController.displayStudents(); break; case 5: // 退出 System.out.println("感谢使用学生管理系统,再见!"); break; default: System.out.println("无效的选择,请重新输入!"); } System.out.println(); } while (choice != 5); scanner.close(); } }

代码解释

  1. 菜单循环 :使用 do-while 循环来持续显示菜单,直到用户选择退出。
  2. 用户输入 :使用 Scanner 获取用户输入,并根据输入的选项调用相应的方法。
  3. 各个操作
    • 添加学生 :提示用户输入学生的姓名、年龄和生日,然后调用 addStudent 方法。
    • 修改学生 :提示用户输入要修改的学生 ID 和新的信息,调用 updateStudent 方法。
    • 删除学生 :提示用户输入要删除的学生 ID,调用 deleteStudent 方法。
    • 显示所有学生 :调用 displayStudents 方法显示所有学生的信息。
  4. 退出:用户选择退出时,显示感谢信息并结束程序。

总结

这个简单的控制台应用程序实现了一个基本的学生管理系统,用户可以通过菜单交互进行增、删、改、查和退出操作。你可以根据需要进一步扩展功能,例如添加输入检查和异常处理。

相关推荐
qq_4419960524 分钟前
Mybatis官方生成器使用示例
java·mybatis
巨大八爪鱼30 分钟前
XP系统下用mod_jk 1.2.40整合apache2.2.16和tomcat 6.0.29,让apache可以同时访问php和jsp页面
java·tomcat·apache·mod_jk
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
计算机-秋大田2 小时前
基于微信小程序的养老院管理系统的设计与实现,LW+源码+讲解
java·spring boot·微信小程序·小程序·vue
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
失落的香蕉4 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
wclass-zhengge4 小时前
SpringCloud篇(配置中心 - Nacos)
java·spring·spring cloud
路在脚下@4 小时前
Springboot 的Servlet Web 应用、响应式 Web 应用(Reactive)以及非 Web 应用(None)的特点和适用场景
java·spring boot·servlet
黑马师兄4 小时前
SpringBoot
java·spring