第一个mySQL和入门三层架构练习-学生管理列表

1.启动mySQL

cmd命令提示符启动:用管理员权限运行命令提示符,输入net start mysql

任务管理器启动:打开任务管理器-服务 找到mySQL服务-右键启动

2.创建一个Maven项目

3.导入数据库-输入用户名和密码

 4.遇到的报错

报错1:[08s01]链接失败,经排查是之前把数据库停掉了,重启即可

 报错2:[password is expired]密码已过期

第一次设置好初始密码后,必须要在cmd登录数据库,重新设置一个新密码

重设密码命令

set password for root@localhost = password('123456');

5.链接数据库后在默认Console中配置表格样式-粘贴后全选运行

drop database if exists `demo`;
create database `demo` charset utf8mb4;
use `demo`;
CREATE TABLE `student` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`number` varchar(20) DEFAULT NULL COMMENT '学号',
 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='学生表';

6.创建git仓库,添加gitignore过滤文件

7.创建util包 pojo包 dao包 service包 controller包 test包

8.导入工具类JDBCDemo.java到util包下

运行工具类的测试方法 发现报错

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

解决方法在xml文件中添加坐标 刷新maven下载

 <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
    </dependencies>

9.创建学生类Student继承Person类

package com.warschool.manager.pojo;

import com.warschool.manager.exec.NameToLongException;

public class Person {
    /**
     * id
     */
    private Integer id;

    /**
     * 姓名
     */
    private String name;

    /**
     * 学号
     */
    private String number;

    public Person() {
    }

    public Person(Integer id, String name, String number) {
        this.id = id;
        this.name = name;
        this.number = number;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name.length() > 4) {
            throw new NameToLongException("名字太长了");
        } else {
            this.name = name;
        }

    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return id + "\t\t\t" + number + "\t\t\t" + name;
    }
}

定义三个属性 id name number 定义构造方法 成员方法 和 toString

10.创建StudentDao接口对方法进行规范。DAO类的作用是从service层接收参数成对数据库的增删改查操作,并将数据返回给service

package com.warschool.manager.dao;

import com.warschool.manager.pojo.Student;

import java.util.ArrayList;

/**
 * @author msi
 */
public interface Dao {
    /**
     * 添加学生方法
     * @param name 传入姓名
     * @param number  传入学号
     * @return 返回列表
     */
    boolean add(String name,String number);

    /**
     * 查找学生方法
     * @return 返回学生列表
     */
    ArrayList<Student> findAll();

    /**
     * 删除学生方法
     */
    void delete(Integer id);

    /**
     * 清空
     */
    void clearAll();
}

新建impl包建立实现类StudentDaoImpl,在实现类中

package com.warschool.manager.dao;

import com.warschool.manager.pojo.Student;
import com.warschool.manager.util.JDBCDemo;

import java.util.ArrayList;

public class StudentDaoImpl implements Dao {

    /**
     * 添加学生方法
     *
     * @param name   传入姓名
     * @param number 传入学号
     * @return 返回列表
     */
    @Override
    public boolean add(String name, String number) {
        return JDBCDemo.add(name, number);
    }

    /**
     * 查找学生方法
     *
     * @return 返回学生列表
     */
    @Override
    public ArrayList<Student> findAll() {
        return JDBCDemo.select();
    }

    /**
     * 删除学生方法
     *
     * @param id 索引id
     */
    @Override
    public void delete(Integer id) {
        JDBCDemo.delete(id);
    }

    /**
     * 清空
     */
    @Override
    public void clearAll() {
        JDBCDemo.clearAll();
    }

}

在实现类的重写方法中写入调用工具包的代码,将数据导入到数据库中,或者从数据库读取数据。

11.创建Service接口,Service类用于接受controller发来的数据并传递给Dao,并对数据进行判断处理。

package com.warschool.manager.service;

import com.warschool.manager.pojo.Student;

import java.util.ArrayList;

/**
 * @author msi
 */
public interface Service {
    /**
     * 添加学生方法
     * @param name 传入姓名
     * @param number  传入学号
     * @return 返回列表
     */
    boolean add(String name,String number);

    /**
     * 查找学生方法
     * @return 返回学生列表
     */
    ArrayList<Student> findAll();

    /**
     * 删除犯法
     * @param id 索引id
     */
    void delete(Integer id);

    /**
     * 判断学号是否存在
     * @param number 学号
     * @return 返回集合索引值
     */
    int yesNumber(String number);

    /**
     * 清空
     */
    void clearAll();
}

新建impl包建立实现类StudentServiceImpl

在实现类的重写方法中将数据传递给Dao。

package com.warschool.manager.service;

import com.warschool.manager.dao.Dao;
import com.warschool.manager.dao.StudentDaoImpl;
import com.warschool.manager.pojo.Student;

import java.util.ArrayList;

/**
 * @author msi
 */
public class StudentServiceImpl implements Service {

    Dao dao = new StudentDaoImpl();

    /**
     * 添加学生方法
     *
     * @param name   传入姓名
     * @param number 传入学号
     * @return 返回列表
     */
    @Override
    public boolean add(String name, String number) {
        return dao.add(name, number);
    }

    /**
     * 查找学生方法
     *
     * @return 返回学生列表
     */
    @Override
    public ArrayList<Student> findAll() {
        return dao.findAll();
    }

    /**
     * 删除犯法
     *
     * @param id 索引id
     */
    @Override
    public void delete(Integer id) {
        dao.delete(id);
    }

    /**
     * 判断学号是否存在
     *
     * @param number 学号
     * @return 返回集合索引值
     */
    @Override
    public int yesNumber(String number) {

        ArrayList<Student> all = dao.findAll();
        int index = -1;
        if (all.size() == 0) {
            return index;
        }
        for (int i = 0; i < all.size(); i++) {
            Student stu = all.get(i);
            if (stu.getNumber().equals(number)) {
                index = i;
                return index;
            }
        }
        return index;
    }

    /**
     * 清空
     */
    @Override
    public void clearAll() {
        dao.clearAll();
    }
}

12.创建Controller类 Controller类用于接收前端数据,并将数据传递传递给Service层,目前使用键盘录入

创建一个自定义异常用来判断用户输入姓名是否合法

package com.warschool.manager.exec;

public class NameToLongException extends RuntimeException {
    /**
     * Constructs a new exception with {@code null} as its detail message.
     * The cause is not initialized, and may subsequently be initialized by a
     * call to {@link #initCause}.
     */
    public NameToLongException() {
    }

    /**
     * Constructs a new exception with the specified detail message.  The
     * cause is not initialized, and may subsequently be initialized by
     * a call to {@link #initCause}.
     *
     * @param message the detail message. The detail message is saved for
     *                later retrieval by the {@link #getMessage()} method.
     */
    public NameToLongException(String message) {
        super(message);
    }
}
package com.warschool.manager.controller;

import com.warschool.manager.exec.NameToLongException;
import com.warschool.manager.pojo.Student;
import com.warschool.manager.service.Service;
import com.warschool.manager.service.StudentServiceImpl;

import java.util.ArrayList;
import java.util.Scanner;


/**
 * @author msi
 */
public class StudentController {
    static Service service = new StudentServiceImpl();
    static Scanner sc = new Scanner(System.in);

    public static void starMenu() {
       //用来停止循环的旗标
        boolean flag = true;
        while (flag) {
            System.out.println("------------学生管理系统---------------");
            System.out.println("1 添加学生 2 查看学生 3 删除学生 4 返回上级");
            System.out.println("请输入您的选择:");
            String cho = sc.next();

            switch (cho) {
                case "1":
                    add();
                    break;
                case "2":
                    findAll();
                    break;
                case "3":
                    delete();
                    break;
                case "4":
                    flag = false;
                    break;
                default:
                    System.out.println("输入错误请重新输入");
                    break;
            }
        }
    }

    public static void findAll() {
        ArrayList<Student> all = service.findAll();
        if (all.size() == 0) {
            System.out.println("找不到信息");
        } else {
            System.out.println("序号\t\t\t\t学号\t\t\t\t姓名");
             //换行打印每个索引上的学生对象
            for (int i = 0; i < all.size(); i++) {
                System.out.println(all.get(i));
            }
        }

    }

    public static void add() {

        System.out.println("请输入您要添加的学生学号");
        String number = sc.next();

        int i = service.yesNumber(number);
        try {
            if (i == -1) {
                System.out.println("请输入您要添加的学生姓名");
                String name = sc.next();
                if (name.length() > 4) {
                    //当条件达成时抛出异常
                    throw new NameToLongException("名字过长错误");
                }
                service.add(name, number);

            } else {
                System.out.println("学号已存在,请重新输入");
            }
            //捕获异常
        } catch (NameToLongException e) {
            System.out.println(e);
        }

    }


    public static void delete() {
        findAll();
        System.out.println("1 删除单个     2 删除全部");
        System.out.println("请输入您的选择");
        String cho1 = sc.next();
        switch (cho1) {
            case "1":
                //数字格式异常处理方法
                try {
                    System.out.println("请输入要删除的学生序号");
                    String str = sc.next();
                    int id = Integer.parseInt(str);
                    service.delete(id);
                } catch (NumberFormatException e) {
                    System.out.println(e);
                }
                break;
            case "2":
                service.clearAll();
                break;
            default:
                System.out.println("请重新输入");
                break;
        }

    }
}

13,创建运行用的entry类

package com.warschool.manager.entry;

import com.warschool.manager.controller.StudentController;

import java.util.Scanner;

/**菜单
 * @author msi
 */
public class InfoMangerEntry {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean flag = true;
        while (flag){
            System.out.println("-----欢迎来到战争学院管理系统-----");
            System.out.println("--1 学生管理  2老师管理  3 退出--");
            System.out.println("请输入您的选择:");
            String cho = sc.next();

            switch (cho){
                case "1":
                    StudentController.starMenu();
                    break;
                case "2":
                    System.out.println("教师管理");
                    break;
                case "3":
                    System.out.println("感谢您的使用");
                    flag =false;
                    break;
                default:
                    System.out.println("请输入正确的选择");
                    break;
            }
        }
    }
}

14.用git add .  git commit -m ""代码提交到本地仓库

付工具包 JDBCdemo

package com.warschool.manager.util;



import com.warschool.manager.pojo.Student;

import java.sql.*;
import java.util.ArrayList;

/**
 * JDBC快速入门
 */
public class JDBCDemo {


    /**
     * 创建学生表
     * CREATE TABLE `student` (
     * `id` int(11) NOT NULL AUTO_INCREMENT,
     * `name` varchar(10) DEFAULT NULL COMMENT '姓名',
     * `number` varchar(20) DEFAULT NULL COMMENT '学号',
     * PRIMARY KEY (`id`)
     * ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='学生表';
     *
     * @param args
     * @throws Exception
     */
    //TODO 先跑一下主方法
    public static void main(String[] args) throws Exception {
        //清理数据库
        clearAll();
//        // 增加
        add("刘一", "s20220315");
        add("陈二", "s20220316");
        add("张三", "s20220317");
        add("李四", "s20220318");
        add("王五", "s20220319");
        add("赵六", "s20220320");

        ArrayList<Student> list = select();
        for (Student student : list) {
            System.out.println(student);
        }
        System.out.println("执行成功");
    }

    /**
     * 增加学生
     *
     * @param name   姓名
     * @param number 学号
     * @throws Exception
     * @return
     */
    public static boolean add(String name, String number) {
        Connection conn = null;
        try {
            conn = getConnection();
            //3. 定义sql
            String sql = "INSERT INTO `student`(`name`, `number`) VALUES ('" + name + "', '" + number + "')";
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);
            //6. 处理结果
            if (count > 0) {
                System.out.println("执行成功");
            }
            //7. 释放资源
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }

    /**
     * 删除学生
     *
     * @param id id
     * @throws Exception
     */
    public static void delete(Integer id) {
        Connection conn = null;
        try {
            conn = getConnection();
            //3. 定义sql
            String sql = "DELETE FROM student WHERE id = " + id;
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);
            //6. 处理结果
            if (count > 0) {
                System.out.println("执行成功");
            }
            //7. 释放资源
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    /**
     * 修改学生
     *
     * @param id     id
     * @param name   姓名
     * @param number 学号
     * @throws Exception
     */
    public static void update(Integer id, String name, String number) {
        Connection conn = null;
        try {
            conn = getConnection();
            //3. 定义sql
            String sql = "UPDATE `student` SET `name` = '" + name + "', `number` = '" + number + "' WHERE `id` = " + id;
            System.out.println("修改sql语句:" + sql);
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);
            //6. 处理结果
            if (count > 0) {
                System.out.println("执行成功");
            }
            //7. 释放资源
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 查询所有学生
     *
     * @throws Exception
     */
    public static ArrayList<Student> select() {
        ArrayList<Student> students = new ArrayList<>();
        Connection conn = null;
        try {
            conn = getConnection();
            //3. 定义sql
            String sql = "select * from student";
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            ResultSet rs = stmt.executeQuery(sql);
            //6. 处理结果
            // 6.1 光标向下移动一行,并且判断当前行是否有数据


            while (rs.next()) {
                // 6.2获取数据  getXxx()
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String number = rs.getString("number");
                Student student = new Student(id, name, number);
                students.add(student);
            }

            //7. 释放资源
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return students;

    }

    public static void clearAll() {
        Connection conn = null;
        try {
            conn = getConnection();
            //3. 定义sql
            String sql = "delete from student where 1=1;";
            System.out.println("修改sql语句:" + sql);
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);
            //6. 处理结果
            if (count > 0) {
                System.out.println("执行成功");
            }
            //7. 释放资源
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    public static Connection getConnection() {
        Connection conn = null;
        try {
            //1. 注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2. 获取连接
            String url = "jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF8&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Hongkong";
            String username = "root";
            String password = "root";
            conn = DriverManager.getConnection(url, username, password);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值