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
当然可以!我们可以在上面的示例中添加修改和删除学生的功能。以下是对
StudentDao
和StudentService
类的扩展,以实现这些操作。1. 更新数据访问层 (DAO)
在
StudentDao
中添加updateStudent
和deleteStudent
方法。
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(); } }
代码解释
- 菜单循环 :使用
do-while
循环来持续显示菜单,直到用户选择退出。- 用户输入 :使用
Scanner
获取用户输入,并根据输入的选项调用相应的方法。- 各个操作 :
- 添加学生 :提示用户输入学生的姓名、年龄和生日,然后调用
addStudent
方法。- 修改学生 :提示用户输入要修改的学生 ID 和新的信息,调用
updateStudent
方法。- 删除学生 :提示用户输入要删除的学生 ID,调用
deleteStudent
方法。- 显示所有学生 :调用
displayStudents
方法显示所有学生的信息。- 退出:用户选择退出时,显示感谢信息并结束程序。
总结
这个简单的控制台应用程序实现了一个基本的学生管理系统,用户可以通过菜单交互进行增、删、改、查和退出操作。你可以根据需要进一步扩展功能,例如添加输入检查和异常处理。
java操作mysql的三层架构,草稿。
laocooon5238578862024-10-12 11:27
相关推荐
Java学长-kirito8 分钟前
springboot/ssm图书大厦图书管理系统Java代码编写web图书借阅项目V+zmm1013416 分钟前
基于微信小程序的在线选课系统springboot+论文源码调试讲解罗政19 分钟前
PDF书籍《手写调用链监控APM系统-Java版》第10章 插件与链路的结合:SpringBoot环境插件获取应用名simple_ssn21 分钟前
【蓝桥杯】走迷宫simple_ssn21 分钟前
【蓝桥杯】奇怪的捐赠huipeng92626 分钟前
第三章线性表+第四章ArrayList与顺序表ThetaarSofVenice34 分钟前
带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)酷讯网络_24087016038 分钟前
【全开源】Java多语言tiktok跨境商城TikTok内嵌商城送搭建教程蓝天星空1 小时前
spring cloud gateway 3罗政1 小时前
PDF书籍《手写调用链监控APM系统-Java版》第9章 插件与链路的结合:Mysql插件实现