它来了,它来了,船新 MySQL + MyBatis 版学生管理系统来了
前言
之前寫了一篇文章,是關于 Java SE 版本的學生成績管理系統,發現反響還不錯。同時也有不少小伙伴通過評論或者私信的方式問過有沒有和數據庫交互版本的學生成績管理系統,然后自己也把這件事兒列入了自己的計劃。害,都怪自己懶,所以一直拖到了現在。不過終究是逼迫自己完成了,也算是給私信和評論的小伙伴們一個交代吧。
同樣的,本次和數據交互版本的學生成績管理系統具有增刪改查成績等功能。不過相比于之前 SE 版本的功能做了點精簡,少了兩個小的功能點。因此此次版本的學生成績管理系統主要分為如下功能:
系統演示
將我們的系統運行起來之后,應該有對應的系統菜單,然后可以根據我們的輸入進行不同的操作。
進入錄入學習成績菜單后,會提示我們依次錄入學號、年級、姓名、高數、英語、體育、Java、C++、政治、算法等科目的成績,錄入成功后進行下一次功能選擇。
該功能主要通過我們所輸入的學生學號,然后查詢對應學號學生的成績,如果查到則進行打印,如果沒查到就進行提示。但無論是查詢到成績與否,都會進入下一次的功能選擇。
該功能可以查詢當前數據庫中的所有成績,無論是否查詢到成績與否,都將進入下一次的功能選擇。
該功能通過輸入對應學號,然后如果找到對應學號的學生,則重新依次輸入各科成績,然后對數據庫中的成績進行更新。如果沒有找到對應學號的學生,則進行提示。
該功能通過對應學號,然后刪除對應學號的學生成績,如果沒有對應學號的學生,則進行提示。
功能設計與實現
與 SE 項目不同的是,本系統需要與數據庫進行交互,所以這里選擇使用 MyBatis 作為數據庫交互框架。接下來我就對本系統的搭建過程做一個記錄,留給有需要的小伙伴。
環境搭建
本項目主要采用 Maven 來構造,而 IDE 則用的是最新版的 IntelliJ IDEA。所以首要工作就是搭建一個 Maven 工程,因為之前我已經寫過相關的文章了,所以這里就不再啰嗦了,如果你還對創建 Maven 工程不太熟悉,可以參考:👉 如何使用 IDEA 創建 Maven 項目。
POM 文件
要實現本項目,主要需要以下依賴,所以我們需要在項目的 pom.xml 文件引入對應依賴。
- MyBatis
- Lombok
- MySQL 驅動
這里你可能對 Lombok 比較陌生,它主要是為了簡化我們的代碼而使用,所以也推薦大家了解下。對于 Lombok 的簡單使用,我之前特意寫了一篇相關文章,如果有感興趣的小伙伴,可以去了解一下。傳送門 👇:
Lombok 安裝及使用指南
數據庫準備
既然要把數據存入數據庫,那肯定得準備下數據庫。關于數據庫的安裝以及環境搭建,可以去網上找個教程看一下,我這里的話只提供創建表的數據腳本。
/*Navicat Premium Data TransferSource Server : mbp-mysqlSource Server Type : MySQLSource Server Version : 80028Source Host : localhost:3306Source Schema : score_management_systemTarget Server Type : MySQLTarget Server Version : 80028File Encoding : 65001Date: 05/03/2022 23:02:47 */SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` (`id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '學號',`name` varchar(255) NOT NULL COMMENT '姓名',`grade` varchar(50) NOT NULL COMMENT '年級',`math` double NOT NULL COMMENT '高數',`sport` double NOT NULL COMMENT '體育',`english` double NOT NULL COMMENT '英語',`java` double NOT NULL COMMENT 'Java',`algorithm` double NOT NULL COMMENT '算法',`polity` double NOT NULL COMMENT '政治',`average` double NOT NULL COMMENT '平均分',`score` double NOT NULL COMMENT '總分',`c_plus_plus` double NOT NULL COMMENT 'C++',PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- ---------------------------- -- Records of student -- ---------------------------- BEGIN; INSERT INTO `student` (`id`, `name`, `grade`, `math`, `sport`, `english`, `java`, `algorithm`, `polity`, `average`, `score`, `c_plus_plus`) VALUES ('101', '村雨', 'CS 1', 88, 90, 87, 98, 89, 70, 88.28571428571429, 618, 96); COMMIT;SET FOREIGN_KEY_CHECKS = 1;MyBatis 配置
既然要使用 MyBatis,那肯定少不了對它配置一番。這里呢,主要需要配置 MyBatis 的核心配置文件以及設置一個工具類。然后添加對數據庫進行增刪改查的接口,方便后邊使用。如果你對 MyBatis 不是很熟悉,建議先去了解下,關于更多 MyBatis 的使用方法,可以參考我之前寫的一些文章:MyBatis 專欄。
在項目的 main/resources 文件夾下創建一個文件,命名為 mybatis-config.xml,在這里主要是配置數據庫連接。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 駝峰命名 --><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><!-- 數據庫配置信息 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url"value="jdbc:mysql://localhost:3306/score_management_system?useUnicode=true&characterEncoding=utf-8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!-- xml 存放路徑 --><mappers><mapper resource="mapper/StudentMapper.xml"/></mappers> </configuration>為了方便后續各個方法的調用,推薦大家先配置一個 MyBatis 的工具類,免去一些重復建立連接操作。
package com.cunyu.util;import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException; import java.io.InputStream;/*** Created with IntelliJ IDEA.** @Package : com.cunyu.util* @ClassName : MyBatisUtil.java* @CreateTime : 2022/3/5 17:11* @Version : 1.0* @Author : 村雨* @Email : 747731461@qq.com* @公眾號 : 村雨遙* @Website : https://cunyu1943.github.io* @Description :*/ public class MyBatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}/*** 獲取 SqlSession 連接** @param* @return* @Author 村雨遙* @Version 1.0* @Description* @Date 17:12 2022/3/5*/public static SqlSession getSession() {return sqlSessionFactory.openSession();} }設計接口
記得上面 MyBatis 配置中的 XML 存放路徑么,那就是我們用來映射 SQL 的文件。一般我們是在 resource 下新建一個 mapper 目錄,然后在 mapper 目錄中創建用于映射接口的 SQL 文件。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cunyu.mapper.StudentMapper"><insert id="insertScore" parameterType="com.cunyu.entity.Student">INSERT INTO student (id, name, grade, math, english, sport, polity, java, c_plus_plus, algorithm, score,average)VALUES (#{id}, #{name}, #{grade}, #{math}, #{english}, #{sport}, #{polity}, #{java}, #{cPlusPlus}, #{algorithm},#{score}, #{average})</insert><update id="updateById" parameterType="com.cunyu.entity.Student">UPDATE studentSET math = #{math},english = #{english},sport = #{sport},polity = #{polity},java = #{java},c_plus_plus = #{cPlusPlus},algorithm = #{algorithm},score = #{score},average = #{average}WHERE id = #{id}</update><delete id="deleteById">DELETEFROM studentWHERE id = #{id}</delete><select id="showStudentList" resultType="com.cunyu.entity.Student">SELECT *FROM student</select><select id="queryById" resultType="com.cunyu.entity.Student">SELECT *FROM studentWHERE id = #{id}</select></mapper>主類設計
系統主要是針對學生成績信息管理,所以主要涉及的是一個學生類。
package com.cunyu.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List; import java.util.Scanner;/*** Created with IntelliJ IDEA.** @Package : com.cunyu.entity* @ClassName : Student.java* @CreateTime : 2022/3/5 14:38* @Version : 1.0* @Author : 村雨* @Email : 747731461@qq.com* @公眾號 : 村雨遙* @Website : https://cunyu1943.github.io* @Description :*/@AllArgsConstructor @NoArgsConstructor @Data public class Student {/*** 學號*/private String id;/*** 姓名*/private String name;/*** 班級*/private String grade;/*** 高數*/private Double math;/*** 體育*/private Double sport;/*** 英語*/private Double english;/*** Java*/private Double java;/*** 算法*/private Double algorithm;/*** 政治*/private Double polity;/*** C ++*/private Double cPlusPlus;/*** 總分*/private Double score;/*** 平均分*/private Double average; }主界面
主界面主要是打印出系統功能菜單,然后根據我們的指令進入不同的子功能模塊。
import com.cunyu.entity.Student;import java.util.Scanner;/*** Created with IntelliJ IDEA.** @Package : PACKAGE_NAME* @ClassName : Main.java* @CreateTime : 2022/3/5 17:13* @Version : 1.0* @Author : 村雨* @Email : 747731461@qq.com* @公眾號 : 村雨遙* @Website : https://cunyu1943.github.io* @Description :*/ public class Main {public static Scanner scanner = new Scanner(System.in);public static void main(String[] args) {while (true) {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.println("-------------【0】退出管理系統-------------");Student student = new Student();System.out.println("輸入你的選擇【0-5】");String choice = scanner.next();switch (choice) {case "1":// 錄入學生成績student.insertScore();break;case "2":// 查找對應學生成績student.queryScoreById();break;case "3":// 修改學生成績student.update();break;case "4":// 刪除學生成績student.delete();break;case "5":// 查詢所有學生成績student.queryScores();break;case "0":System.exit(0);break;default:break;}}} }錄入學生成績
首先錄入學號,判斷是否可用,不可用則重新輸入,可用則繼續輸入后續其他信息。
然后將信息賦值到學生對象,最后將該學生對象插入數據庫就可以了。
/*** 錄入學生成績** @param* @return* @Author 村雨遙* @Version 1.0* @Description* @Date 18:05 2022/3/5*/ public void insertScore() {SqlSession sqlSession = MyBatisUtil.getSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Scanner scanner = new Scanner(System.in);System.out.println("----------錄入學生數據----------");System.out.println("請依次輸入如下數據:");String id;while (true) {System.out.println("學號");id = scanner.nextLine();if (isValid(id)) {System.out.println("學號重復,請重新輸入");} else {break;}}System.out.println("年級");String grade = scanner.nextLine();System.out.println("姓名");String name = scanner.nextLine();System.out.println("數學");Double math = scanner.nextDouble();System.out.println("英語");Double english = scanner.nextDouble();System.out.println("體育");Double sport = scanner.nextDouble();System.out.println("Java");Double java = scanner.nextDouble();System.out.println("C++");Double cPlusPlus = scanner.nextDouble();System.out.println("政治");Double polity = scanner.nextDouble();System.out.println("算法");Double algorithm = scanner.nextDouble();// 創建對象,并設置屬性,并插入數據庫Student student = new Student();student.setId(id);student.setName(name);student.setGrade(grade);student.setSport(sport);student.setCPlusPlus(cPlusPlus);student.setJava(java);student.setMath(math);student.setPolity(polity);student.setEnglish(english);student.setAlgorithm(algorithm);student.setScore(math + polity + english + algorithm + cPlusPlus + java + sport);student.setAverage(student.getScore() * 1.0 / 7);int i = mapper.insertScore(student);if (i > 0) {sqlSession.commit();System.out.println("錄入成績成功");} else {System.out.println("錄入成績失敗,請重新錄入");}sqlSession.close();}查詢單個學生成績
先判斷數據庫中是否有數據,有數據則進行后續操作。通過對輸入的學號進行查詢,從數據庫中找到對應學號的學生成績。
/*** 通過學號查詢成績** @param* @return* @Author 村雨遙* @Version 1.0* @Description* @Date 18:06 2022/3/5*/ public void queryScoreById() {SqlSession sqlSession = MyBatisUtil.getSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Scanner scanner = new Scanner(System.in);System.out.println("----------查找學生成績----------");List<Student> students = mapper.showStudentList();Student result = new Student();Boolean flag = false;if (students.size() == 0) {System.out.println("當前無數據,請錄入成績后重試");} else {System.out.println("請輸入要查找成績學生的學號");String id = scanner.nextLine();for (Student student : students) {if (id.equals(student.getId())) {flag = true;result = student;}}if (flag) {System.out.println("對應學號的學生成績如下:");System.out.println("學號\t\t班級\t\t姓名\t\t數學\t\t英語\t\t體育\t\tJava\t\tC++\t\t政治\t\t算法\t\t平均分\t\t總分");System.out.format("%s\t%s\t\t%s\t\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", result.getId(), result.getGrade(), result.getName(), result.getMath(), result.getEnglish(), result.getSport(), result.getJava(), result.getCPlusPlus(), result.getPolity(), result.getAlgorithm(), result.getAverage(), result.getScore());System.out.println("查找成績成功!");} else {System.out.println("未找到對應學號學生的成績,請確認后重新輸入!");}}sqlSession.close(); }查詢所有學生成績
先判斷是否有數據,有數據再進行后續操作。從數據庫中查詢所有數據,接著打印各個學生的成績信息即可。
/*** 查詢所有學生成績** @param* @return* @Author 村雨遙* @Version 1.0* @Description* @Date 18:26 2022/3/5*/ public void queryScores() {SqlSession sqlSession = MyBatisUtil.getSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);List<Student> students = mapper.showStudentList();if (students.size() == 0) {System.out.println("數據庫當前無數據,請先添加數據");} else {System.out.println("----------所有學生成績如下----------");System.out.println("學號\t\t班級\t\t姓名\t\t數學\t\t英語\t\t體育\t\tJava\t\tC++\t\t政治\t\t算法\t\t平均分\t\t總分");for (Student student : students) {System.out.format("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", student.getId(), student.getGrade(), student.getName(), student.getMath(), student.getEnglish(), student.getSport(), student.getJava(), student.getCPlusPlus(), student.getPolity(), student.getAlgorithm(), student.getAverage(), student.getScore());}}sqlSession.close(); }修改學生成績
先判斷是否有數據,有數據再進行后續操作。通過對輸入的學號進行匹配,找到對應學號的學生,然后對其成績信息進行修改,但不修改個人其他信息。
/*** 更新對應學號學生的成績** @param* @return* @Author 村雨遙* @Version 1.0* @Description* @Date 18:40 2022/3/5*/ public void update() {SqlSession sqlSession = MyBatisUtil.getSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Scanner scanner = new Scanner(System.in);List<Student> students = mapper.showStudentList();System.out.println("----------修改學生成績----------");if (students.isEmpty()) {System.out.println("當前數據庫無數據,請添加后重試");} else {System.out.println("請輸入要修改學生的學號");String id = scanner.nextLine();Student student = mapper.queryById(id);if (student == null) {System.out.println("未找到對應學號學生信息,請確認后再刪除!");} else {System.out.println("請重新輸入該學生的成績");System.out.println("數學");Double math = scanner.nextDouble();System.out.println("英語");Double english = scanner.nextDouble();System.out.println("體育");Double sport = scanner.nextDouble();System.out.println("Java");Double java = scanner.nextDouble();System.out.println("C++");Double cPlusPlus = scanner.nextDouble();System.out.println("政治");Double polity = scanner.nextDouble();System.out.println("算法");Double algorithm = scanner.nextDouble();student.setSport(sport);student.setEnglish(english);student.setPolity(polity);student.setMath(math);student.setJava(java);student.setCPlusPlus(cPlusPlus);student.setAlgorithm(algorithm);student.setScore(sport + math + english + polity + java + cPlusPlus + algorithm);student.setAverage(student.getScore() / 7);if (mapper.updateById(student) > 0) {sqlSession.commit();System.out.println("----------更新成功----------");} else {System.out.println("----------更新失敗----------");}}}sqlSession.close(); }刪除學生成績
先判斷是否有數據,有數據再進行后續操作。然后通過對輸入的學號進行匹配,找到對應學號的學生,然后將其從數據庫中刪除即可。
/*** 刪除對應學號學生成績** @param* @return* @Author 村雨遙* @Version 1.0* @Description* @Date 18:38 2022/3/5*/ public void delete() {SqlSession sqlSession = MyBatisUtil.getSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Scanner scanner = new Scanner(System.in);List<Student> students = mapper.showStudentList();System.out.println("----------刪除學生成績----------");if (students.size() == 0) {System.out.println("當前數據庫無數據,請添加后重試");} else {System.out.println("輸入要刪除學生成績的學號");String id = scanner.nextLine();if (mapper.queryById(id) == null) {System.out.println("未找到對應學號學生信息,請確認后再刪除!");} else {if (mapper.deleteById(id) > 0) {sqlSession.commit();System.out.println("----------刪除成功----------");} else {System.out.println("----------刪除失敗----------");}}}sqlSession.close(); }總結
以上就是關于本次數據庫版本學生成績管理系統的相關設計的所有內容了,相信讀到這里的小伙伴應該也能夠順利完成本次的課程設計了。如果還是對其中的一些細節不理解,歡迎評論或者關注私信我。
代碼實例
最后,關于本文示例的代碼,我已經上傳到了 GitCode ,需要的小伙伴可以自取!
🏳??🌈 傳送門:https://gitcode.net/github_39655029/java-learning-demos
總結
以上是生活随笔為你收集整理的它来了,它来了,船新 MySQL + MyBatis 版学生管理系统来了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaCompiler
- 下一篇: c语言编辑电子实时时钟,可以调整时间的电