学员信息表的增删改查(有三层架构MVC)

看几个本人写的LOWER界面:

实现的框架

实现的代码

package com.hr.entity;

/**
 * @ClassName Student
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/22 0022-10:24
 * @Version V1.0
 **/
public class Student {
    /**
     * 编号
     */
    private Integer id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 性别
     */
    private String sex;
    /**
     * 出生年份
     */
    private String birth;
    /**
     * 系
     */
    private String department;
    /**
     * 地址
     */
    private String address;

    public Student() {
    }

    public Student(Integer id, String name, String sex, String birth, String department, String address) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.birth = birth;
        this.department = department;
        this.address = address;
    }

    public Student(String name, String sex, String birth, String department, String address) {
        this.name = name;
        this.sex = sex;
        this.birth = birth;
        this.department = department;
        this.address = address;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", birth='" + birth + '\'' +
                ", department='" + department + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
package com.hr.db;

import java.sql.*;

/**
 * @ClassName DBHelper
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/22 0022-10:42
 * @Version V1.0
 **/
public class DBHelper {
    protected static Connection conn;
    protected PreparedStatement pstmt;
    protected ResultSet rs;
    //
    private static final String URL = "jdbc:mysql://localhost:3306/java95?useUnicode=true&characterEncoding=utf-8&useSSL=false";
    private static final String USER_NAME = "root";
    private static final String PASSWORD = "52Java";

    public static Connection getConnection() {

        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
            System.out.println("连接数据成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }

            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }

            if (conn != null) {
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        getConnection();
    }
}
package com.hr.dao;

import com.hr.entity.Student;

import java.util.List;

/**
 * student对应的数据库操作接口
 */
public interface StudentDao {
    /**
     * 查所有
     *
     * @return 学生集合
     */
    public List<Student> findAll();

    /**
     * 查单个
     *
     * @param id 学生id
     * @return 学生
     */
    public Student findOne(Integer id);

    /**
     * 模糊查
     *
     * @param student 学生对象
     * @return 学生集合
     */
    public List<Student> findByLike(Student student);

    /**
     * 添加
     *
     * @param student 学生
     * @return 影响的行数 大于0 成功  否则失败
     */
    public int add(Student student);

    /**
     * 根据id删除学生
     *
     * @param id 学生id
     * @return 影响的行数 大于0 成功  否则失败
     */
    public int delete(Integer id);

    /**
     * 修改学生
     *
     * @param student 学生
     * @return 影响的行数 大于0 成功  否则失败
     */
    public int update(Student student);
}
package com.hr.dao.impl;

import com.hr.dao.StudentDao;
import com.hr.db.DBHelper;
import com.hr.entity.Student;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName StudentDaoImpl
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/22 0022-10:33
 * @Version V1.0
 **/
public class StudentDaoImpl extends DBHelper implements StudentDao {
    //要写昨天教的代码
    @Override
    public List<Student> findAll() {
        List<Student> lists = null;
        //1.连
        conn = getConnection();
        //2.送
        String sql = "select * from student";
        try {
            pstmt = conn.prepareStatement(sql);
            //3.执行
            rs = pstmt.executeQuery();
            //4.查出来
            if (rs != null) {
                lists = new ArrayList<>();//创建集合,用来装学生的
                while (rs.next()) {
                    //
                    Student stu = new Student();
                    stu.setId(rs.getInt("id"));
                    stu.setName(rs.getString("name"));
                    stu.setSex(rs.getString("sex"));
                    stu.setBirth(rs.getString("birth"));
                    stu.setDepartment(rs.getString("department"));
                    stu.setAddress(rs.getString("address"));
                    lists.add(stu);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(rs, pstmt, conn);
        }

        return lists; //注意是把装好学生的集合返回出去
    }

    @Override
    public Student findOne(Integer id) {
        conn = getConnection();

        try {
            String sql = "select * from student where id = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            rs = pstmt.executeQuery();
            if (rs != null) {
                while (rs.next()) {
                    Student stu = new Student();
                    stu.setId(rs.getInt("id"));
                    stu.setName(rs.getString("name"));
                    stu.setSex(rs.getString("sex"));
                    stu.setBirth(rs.getString("birth"));
                    stu.setDepartment(rs.getString("department"));
                    stu.setAddress(rs.getString("address"));
                    return stu;
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(rs, pstmt, conn);
        }
        return null;
    }

    @Override
    public List<Student> findByLike(Student student) {
        List<Student> lists = null;
        //1.连
        conn = getConnection();
        try {
            //2.送  难点:拼字符串  StringBuffer
            //2.1查所有
            StringBuffer sql = new StringBuffer("select * from student where 1 = 1 ");
            //2.1其它的
            if (student != null) {
                //按姓名模糊查
                if (student.getName() != null && !"".equals(student.getName())) {
                    //双引号+变量+双引号
                    sql.append("and name like '%" + student.getName() + "%'");
                }
                //按性别精确查
                if (student.getSex() != null && !"".equals(student.getSex())) {
                    sql.append("and sex = '" + student.getSex() + "'");
                }
                //按系精确查
                if (student.getDepartment() != null && !"".equals(student.getDepartment())) {

                    sql.append("and department = '" + student.getDepartment() + "'");
                }
                //按地址模糊查
                if (student.getAddress() != null && !"".equals(student.getAddress())) {
                    sql.append("and address like '%" + student.getAddress() + "%'");
                }
            }

            pstmt = conn.prepareStatement(sql.toString());

            System.out.println(pstmt);//就可以看到控制台拼好的sql语句
            //3.执行
            rs = pstmt.executeQuery();
            //4.查出来
            if (rs != null) {
                lists = new ArrayList<>();//创建集合,用来装学生的
                while (rs.next()) {
                    //
                    Student stu = new Student();
                    stu.setId(rs.getInt("id"));
                    stu.setName(rs.getString("name"));
                    stu.setSex(rs.getString("sex"));
                    stu.setBirth(rs.getString("birth"));
                    stu.setDepartment(rs.getString("department"));
                    stu.setAddress(rs.getString("address"));
                    lists.add(stu);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(rs, pstmt, conn);
        }

        return lists; //注意是把装好学生的集合返回出去
    }

    @Override
    public int add(Student student) {
        //1.连
        conn = getConnection();
        //2.送

        try {
            String sql = "insert into student(name,sex,birth,department,address) values (?,?,?,?,?)";
            pstmt = conn.prepareStatement(sql);
            //为问号全部赋值
            pstmt.setString(1, student.getName());
            pstmt.setString(2, student.getSex());
            pstmt.setString(3, student.getBirth());
            pstmt.setString(4, student.getDepartment());
            pstmt.setString(5, student.getAddress());
            //3.执行
            int i = pstmt.executeUpdate();
            return i;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(null, pstmt, conn);
        }
        return 0;
    }

    @Override
    public int delete(Integer id) {
        //1.连
        conn = getConnection();
        //2.送
        String sql = "delete from student where id = ?";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            //3.执行
            int i = pstmt.executeUpdate();
            return i;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(null, pstmt, conn);
        }
        return 0;
    }

    @Override
    public int update(Student student) {
        conn = getConnection();
        try {
            String sql = "update student set name=?,sex=?,birth=?,department=?,address=? where id=?";
            pstmt = conn.prepareStatement(sql);
            //为问号赋值
            pstmt.setString(1, student.getName());
            pstmt.setString(2, student.getSex());
            pstmt.setString(3, student.getBirth());
            pstmt.setString(4, student.getDepartment());
            pstmt.setString(5, student.getAddress());
            pstmt.setInt(6, student.getId());
            //执行
            int i = pstmt.executeUpdate();
            return i;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll(null, pstmt, conn);
        }
        return 0;
    }
}
package com.hr.service;

import com.hr.entity.Student;

import java.util.List;

/**
 * student对应的数据库操作接口
 */
public interface StudentService {
    /**
     * 查所有
     *
     * @return 学生集合
     */
    public List<Student> findAll();

    /**
     * 查单个
     *
     * @param id 学生id
     * @return 学生
     */
    public Student findOne(Integer id);

    /**
     * 模糊查
     *
     * @param student 学生对象
     * @return 学生集合
     */
    public List<Student> findByLike(Student student);

    /**
     * 添加
     *
     * @param student 学生
     * @return 影响的行数 大于0 成功  否则失败
     */
    public boolean add(Student student);

    /**
     * 根据id删除学生
     *
     * @param id 学生id
     * @return 影响的行数 大于0 成功  否则失败
     */
    public boolean delete(Integer id);

    /**
     * 修改学生
     *
     * @param student 学生
     * @return 影响的行数 大于0 成功  否则失败
     */
    public boolean update(Student student);
}
package com.hr.service.impl;

import com.hr.dao.StudentDao;
import com.hr.dao.impl.StudentDaoImpl;
import com.hr.entity.Student;
import com.hr.service.StudentService;

import java.util.List;

/**
 * @ClassName StudentServiceImpl
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/22 0022-10:35
 * @Version V1.0
 **/
public class StudentServiceImpl implements StudentService {
    //调dao层
    StudentDao studentDao = new StudentDaoImpl();

    @Override
    public List<Student> findAll() {
        return studentDao.findAll();
    }

    @Override
    public Student findOne(Integer id) {
        return studentDao.findOne(id);
    }

    @Override
    public List<Student> findByLike(Student student) {
        return studentDao.findByLike(student);
    }

    @Override
    public boolean add(Student student) {
        return studentDao.add(student) > 0 ? true : false;
    }

    @Override
    public boolean delete(Integer id) {
        return studentDao.delete(id) > 0 ? true : false;
    }

    @Override
    public boolean update(Student student) {
        return studentDao.update(student) > 0 ? true : false;
    }
}
package com.hr.test;

import com.hr.entity.Student;
import com.hr.service.StudentService;
import com.hr.service.impl.StudentServiceImpl;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

/**
 * @ClassName TestStudent
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/22 0022-10:37
 * @Version V1.0
 **/
public class TestStudent {
    //调服务层
    private StudentService service;

    @Before
    public void init() {
        service = new StudentServiceImpl();//要在before创建,这注意
    }

    //1.查所有 不用写main方法
    @Test
    public void findAll() {
        List<Student> lists = service.findAll();
        for (Student student : lists) {
            System.out.println(student);
        }
    }

    @Test
    public void findOne() {
        Student student = service.findOne(910);
        System.out.println(student);
    }

    @Test
    public void findByLike() {
        Student stu = new Student();
        //stu.setName("王");
        // stu.setSex("男");
        //stu.setAddress("长沙");
        stu.setDepartment("计算机系");
        List<Student> lists = service.findByLike(stu);
        for (Student list : lists) {
            System.out.println(list);
        }
    }

    @Test
    public void add() {
        Student stu = new Student();
        stu.setName("嫦娥");
        stu.setSex("女");
        stu.setAddress("天上");
        stu.setDepartment("神仙");
        stu.setBirth(2000 + "");

        boolean flag = service.add(stu);
        if (flag) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }
    }

    @Test
    public void delete() {
        boolean flag = service.delete(911);
        if (flag) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }
    }

    @Test
    public void update() {
        //1.先查单个
        Student changer = service.findOne(912);
        System.out.println(changer);
        //只改部门
        changer.setDepartment("月宫");
        //处理日期
        changer.setBirth(changer.getBirth().substring(0, 4));
        boolean flag = service.update(changer);
        if (flag) {
            System.out.println("修改成功");
        } else {
            System.out.println("修改失败");
        }

    }
}
package com.hr.ui;

import com.hr.entity.Student;
import com.hr.service.StudentService;
import com.hr.service.impl.StudentServiceImpl;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Vector;
//32.34.35

/**
 * @ClassName MainFrame
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/25 0025-9:02
 * @Version V1.0
 **/
public class MainFrame extends JFrame {
    private DefaultTableModel dtm;
    // 引入服务层
    private StudentService service = new StudentServiceImpl();

    public static void main(String[] args) {
        new MainFrame();
    }

    public MainFrame() {
        setTitle("学员管理系统主界面");
        setSize(800, 600);
        setLocationRelativeTo(null);//居中
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭
        //1.上下两部分
        JPanel panelTop = new JPanel();
        panelTop.setBackground(Color.GRAY);
        JPanel panelBottom = new JPanel();
        panelBottom.setBackground(Color.CYAN);
        //2.JFrame中的容器设置为边界布局
        getContentPane().setLayout(new BorderLayout());
        //3.上面的面板加入北边
        getContentPane().add(panelTop, BorderLayout.NORTH);
        //4.下面的面板加入中间
        getContentPane().add(panelBottom, BorderLayout.CENTER);

        //5.上面的面板分成两部分
        //5.1先要面板的宽高
        //panelTop.setPreferredSize(new Dimension(800, 150));
        //5.2先要设置为边界布局
        panelTop.setLayout(new BorderLayout());
        //5.3创建上下面板
        JPanel panelTop1 = new JPanel();
        //在设置布局的时候左对齐(流式布局默认为居中对齐)
        panelTop1.setLayout(new FlowLayout(FlowLayout.LEFT));
        //放按钮
        JButton btnAdd = new JButton("添加");
        JButton btnUpdate = new JButton("修改");
        JButton btnDelete = new JButton("删除");
        panelTop1.add(btnAdd);
        panelTop1.add(btnUpdate);
        panelTop1.add(btnDelete);
        JPanel panelTop2 = new JPanel();
        panelTop2.setLayout(new FlowLayout(FlowLayout.LEFT));
        JLabel lblName = new JLabel("按姓名查");
        panelTop2.add(lblName);
        JTextField txtName = new JTextField();
        txtName.setPreferredSize(new Dimension(120, 25));
        panelTop2.add(txtName);
        JButton btnSelect = new JButton("查找");

        panelTop2.add(btnSelect);
        //5.4 放
        panelTop.add(panelTop1, BorderLayout.NORTH);
        panelTop.add(panelTop2, BorderLayout.CENTER);
        //底部造表格,首先用边界布局
        panelBottom.setLayout(new BorderLayout());
        //选做一个滚动面板
        JScrollPane scrollPane = new JScrollPane();
        //放入底部
        panelBottom.add(scrollPane, BorderLayout.CENTER);
        //造表格
        dtm = new DefaultTableModel();
        JTable table = new JTable();
        table.setModel(dtm);//这里的意思,先给表格一个大铁门,后面再放数据
        refreshTable();//一句搞定
        //把表格放入滚动面板
        scrollPane.setViewportView(table);
        // 按钮的事件监听
        btnSelect.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //1.检查文本框有没有值
                //1.1获取文本框的值
                String name = txtName.getText();
                //1.2判断

                //1.3.如果有,就调模糊查
                Student stu = new Student();
                stu.setName(name);
                refreshTable2(stu);
            }
        });
        btnAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //弹出一个模态对话框
                StudentAddDialog dialog = new StudentAddDialog();
                dialog.setModal(true);
                dialog.setVisible(true);
                refreshTable();//刷新表格
            }
        });
        //修改
        btnUpdate.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //1. 提醒用户选择要修改的行
                int index = table.getSelectedRow();
                //1.1如果index为-1,说明没有选择行
                if (index == -1) {
                    JOptionPane.showMessageDialog(null, "请选择要修改的行" + index);
                    return;
                }
                //JOptionPane.showMessageDialog(null, "当前的行号为:" + index);

                //2.获取用户选择的行的第一列值

                String id = dtm.getValueAt(index, 0) + "";
                //JOptionPane.showMessageDialog(null, "当前行的第一列的值为:" + id);
                //3.送到修改对话框
                StudentUpdateDialog sud = new StudentUpdateDialog(id);

                //刷新表格
                refreshTable();

            }
        });
        btnDelete.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //1.提醒用得选呀
                int index = table.getSelectedRow();
                if (table.getSelectedRow() == -1) {
                    JOptionPane.showMessageDialog(null, "请选择要删除的行!");
                    return;
                }
                //2.获得选中行的id
                int id = Integer.parseInt(dtm.getValueAt(index, 0) + "");
                //先问用户是不是真的要删除?为了防止用户的误操作
                int i = JOptionPane.showConfirmDialog(null, "你确定要删除吗", "警告", JOptionPane.YES_NO_OPTION);
                if (JOptionPane.OK_OPTION == i) {//0
                    boolean flag = service.delete(id);
                    if (flag) {
                        JOptionPane.showMessageDialog(null, "删除成功");
                        refreshTable();//刷表格
                    } else {
                        JOptionPane.showMessageDialog(null, "删除失败");
                    }
                }
            }
        });
        //所有控件造出来了,再显示给用户看
        setVisible(true);
    }

    //抽成列方法
    public Vector getCols() {
        Vector cols = new Vector();
        cols.add("编号");
        cols.add("姓名");
        cols.add("性别");
        cols.add("生日");
        cols.add("院系");
        cols.add("地址");
        return cols;
    }

    //以下四个方法其实可以抽成两个方法,为何一变学生就接受不了呢?为何要写出自己看不下去的代码呢?生活所迫。
    //抽成行方法
    public Vector<Vector> getRows() {
        Vector<Vector> rows = new Vector<>();
        //查询所有学生
        List<Student> students = service.findAll();
        //把List转为Vector
        if (students != null && students.size() > 0) {
            for (Student student : students) {
                //每一行数据都放入Vector
                Vector v = new Vector();
                v.add(student.getId());
                v.add(student.getName());
                v.add(student.getSex());
                String msg = student.getBirth() != null ? student.getBirth().substring(0, 4) : student.getBirth();
                v.add(msg);
                v.add(student.getDepartment());
                v.add(student.getAddress());
                //小v放rows
                rows.add(v);
            }
        }
        return rows;
    }

    //抽成大铁门方法
    public void refreshTable() {
        Vector cols = getCols();
        Vector<Vector> rows = getRows();
        dtm.setDataVector(rows, cols);
    }

    //===================================================================================
    //抽成行方法
    public Vector<Vector> getRows2(Student stu) {
        Vector<Vector> rows = new Vector<>();
        //模糊查询所有学生
        List<Student> students = service.findByLike(stu);
        //把List转为Vector
        if (students != null && students.size() > 0) {
            for (Student student : students) {
                //每一行数据都放入Vector
                Vector v = new Vector();
                v.add(student.getId());
                v.add(student.getName());
                v.add(student.getSex());
                String msg = student.getBirth() != null ? student.getBirth().substring(0, 4) : student.getBirth();
                v.add(msg);
                v.add(student.getDepartment());
                v.add(student.getAddress());
                //小v放rows
                rows.add(v);
            }
        }
        return rows;
    }

    //抽成大铁门方法
    public void refreshTable2(Student student) {
        Vector cols = getCols();
        Vector<Vector> rows = getRows2(student);
        dtm.setDataVector(rows, cols);
    }
}
package com.hr.ui;

import com.hr.entity.Student;
import com.hr.service.StudentService;
import com.hr.service.impl.StudentServiceImpl;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @ClassName StudentAddDialog
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/25 0025-10:03
 * @Version V1.0
 **/
public class StudentAddDialog extends JDialog {
    private StudentService service = new StudentServiceImpl();

    public StudentAddDialog() {
        setTitle("添加学员信息");
        setSize(400, 600);
        setLocationRelativeTo(null);
        //用网格布局
        getContentPane().setLayout(new GridLayout(7, 2, 1, 50));
        JLabel lblId = new JLabel("编号:");
        JTextField txtId = new JTextField();
        // 编号不让编辑
        txtId.setEditable(false);
        //txtId.setEnabled(false);
        //txtId.setVisible(false);
        JLabel lblName = new JLabel("姓名:");
        JTextField txtName = new JTextField();
        JLabel lblSex = new JLabel("性别:");
        //JTextField txtSex = new JTextField();
        JPanel panelSex = new JPanel();
        ButtonGroup bg = new ButtonGroup();
        JRadioButton btnBoy = new JRadioButton("男");
        JRadioButton btnGirl = new JRadioButton("女");
        //默认选中男
        btnBoy.setSelected(true);
        //加背景色
        btnBoy.setBackground(Color.red);
        //设置字体
        btnBoy.setFont(new Font("黑体", Font.BOLD, 24));
        //设置字色
        btnBoy.setForeground(Color.YELLOW);

        bg.add(btnBoy);
        bg.add(btnGirl);
        panelSex.add(btnBoy);
        panelSex.add(btnGirl);

        //
        JLabel lblBirth = new JLabel("出生年:");
        JTextField txtBirth = new JTextField();
        JLabel lblDepartment = new JLabel("院系:");
        //JTextField txtDepartment = new JTextField();
        String names[] = {"请选择", "计算机系", "中文系", "英语系"};
        JComboBox cobDepartment = new JComboBox(names);
        JLabel lblAddress = new JLabel("地址:");
        JTextField txtAddress = new JTextField();
        JButton btnAdd = new JButton("添加");
        JButton btnCancel = new JButton("取消");
        getContentPane().add(lblId);
        getContentPane().add(txtId);
        getContentPane().add(lblName);
        getContentPane().add(txtName);
        getContentPane().add(lblSex);
        getContentPane().add(panelSex);
        getContentPane().add(lblBirth);
        getContentPane().add(txtBirth);
        getContentPane().add(lblDepartment);
        getContentPane().add(cobDepartment);
        getContentPane().add(lblAddress);
        getContentPane().add(txtAddress);
        getContentPane().add(btnAdd);
        getContentPane().add(btnCancel);
        //添加
        btnAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //1.先判断用户填写了没
                //1.1姓名
                String name = txtName.getText();
                if (name == null || "".equals(name)) {
                    JOptionPane.showMessageDialog(null, "请输入学员姓名!");
                    return;
                }
                //1.2性别
                String sex = btnBoy.isSelected() ? "男" : "女";
                //1.3生日 1900~2020年
                String birth = txtBirth.getText();
                //1.3.1判断是不是4位
                if (birth.length() != 4) {
                    JOptionPane.showMessageDialog(null, "生日 1900~2020年");
                    return;
                }
                //1.3.2强转成int
                int year = 0;
                try {
                    year = Integer.parseInt(birth);
                } catch (Exception e1) {
                    JOptionPane.showMessageDialog(null, "生日 1900~2020年");
                    return;
                }
                //1.3.3 判断范围
                if (!(year >= 1900 && year <= 2020)) {
                    JOptionPane.showMessageDialog(null, "生日 1900~2020年");
                    return;
                }
                //1.3判断下拉列表
                if (cobDepartment.getSelectedIndex() == 0) {
                    JOptionPane.showMessageDialog(null, "请选择院系!");
                    return;
                }
                //转为字符串
                String department = cobDepartment.getSelectedItem() + "";
                //1.4地址
                String address = txtAddress.getText();

                //2.收集信息
                Student student = new Student();
                student.setName(name);
                student.setSex(sex);
                student.setBirth(birth);
                student.setDepartment(department);
                student.setAddress(address);
                //3.调服务层
                boolean flag = service.add(student);
                if (flag) {
                    JOptionPane.showMessageDialog(null, "添加成功");
                    //自己关掉自己
                    dispose();

                } else {
                    JOptionPane.showMessageDialog(null, "添加失败");
                }

            }
        });
        //setVisible(true);
    }

//    public static void main(String[] args) {
//        new StudentAddDialog();
//    }
}
package com.hr.ui;

import com.hr.entity.Student;
import com.hr.service.StudentService;
import com.hr.service.impl.StudentServiceImpl;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//修改

/**
 * @ClassName StudentUpdateDialog
 * @Description: TODO
 * @Author 汤永红
 * @Date 2020/8/26 0026-8:45
 * @Version V1.0
 **/
public class StudentUpdateDialog extends JDialog {
    //1.把需要的控件全部声明
    private JLabel lblId;
    private JTextField txtId;
    private JLabel lblName;
    private JTextField txtName;
    private JLabel lblSex;
    private JPanel panelSex;
    private ButtonGroup bg;
    private JRadioButton radBoy;
    private JRadioButton radGirl;
    private JLabel lblBirth;
    private JTextField txtBirth;
    private JLabel lblDepartment;
    private JComboBox cobDepartment;
    private JLabel lblAddress;
    private JTextField txtAddress;
    private JButton btnEdit;
    private JButton btnCancel;
    //创建服务
    private StudentService service = new StudentServiceImpl();

    public StudentUpdateDialog(String id) {
        System.out.println(id);
        //根据传过来的id查单个
        Student stu = service.findOne(Integer.parseInt(id));
        System.out.println(stu);
        //2.全部初始化
        lblId = new JLabel("编号:");
        txtId = new JTextField();
        txtId.setText(id);//回显id
        lblName = new JLabel("姓名:");
        txtName = new JTextField();
        txtName.setText(stu.getName());
        lblSex = new JLabel("性别");
        panelSex = new JPanel();
        bg = new ButtonGroup();
        radBoy = new JRadioButton("男");
        radGirl = new JRadioButton("女");
        //

        if (stu.getSex().equals(radBoy.getText())) {
            radBoy.setSelected(true);
        } else {
            radGirl.setSelected(true);
        }
        //
        lblBirth = new JLabel("出生年:");
        txtBirth = new JTextField();
        txtBirth.setText(stu.getBirth() != null ? stu.getBirth().substring(0, 4) : stu.getBirth());
        lblDepartment = new JLabel("院系:");
        cobDepartment = new JComboBox();
        //给值: 类似表格的写法// 还有一个叫JList也类似这么写
        DefaultComboBoxModel cbm = new DefaultComboBoxModel();
        cobDepartment.setModel(cbm);
        cbm.addElement("请选择");
        cbm.addElement("计算机系");
        cbm.addElement("英语系");
        cbm.addElement("中文系");
        //先获得记录中的系
        String department = stu.getDepartment();
        //2.比较
        int size = cbm.getSize();
        for (int i = 0; i < size; i++) {
            if ((cbm.getElementAt(i) + "").equals(department)) {
                cbm.setSelectedItem(department);
                break;
            }
        }

        lblAddress = new JLabel("地址:");
        txtAddress = new JTextField();
        txtAddress.setText(stu.getAddress());
        btnEdit = new JButton("修改");
        btnCancel = new JButton("取消");

        //3.放
        setTitle("修改学员信息");
        setSize(400, 600);
        //3.1设置布局
        this.setLayout(new GridLayout(7, 2, 10, 50));

        //3.2放
        add(lblId);
        add(txtId);
        txtId.setEditable(false);//主键不能改
        add(lblName);
        add(txtName);
        add(lblSex);
        add(panelSex);

        bg.add(radBoy);
        bg.add(radGirl);
        panelSex.add(radBoy);
        panelSex.add(radGirl);

        add(lblBirth);
        add(txtBirth);
        add(lblDepartment);
        add(cobDepartment);
        add(lblAddress);
        add(txtAddress);
        add(btnEdit);
        add(btnCancel);
        //pack();//适合大小
        setLocationRelativeTo(null);

        //写事件监听
        btnEdit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //1.获取值
                int ids = Integer.parseInt(id);
                String name = txtName.getText();
                String sex = null;
                if (radBoy.isSelected()) {
                    sex = radBoy.getText();
                } else {
                    sex = radGirl.getText();
                }
                String birth = txtBirth.getText();
                String department = cobDepartment.getSelectedItem() + "";
                String address = txtAddress.getText();
                Student stu = new Student();
                stu.setId(ids);
                stu.setName(name);
                stu.setSex(sex);
                stu.setBirth(birth);
                stu.setDepartment(department);
                stu.setAddress(address);
                //2.封装成对象
                //3.调服务层的方法
                boolean flag = service.update(stu);
                if (flag) {
                    JOptionPane.showMessageDialog(null, "修改成功");
                    dispose();//关掉自己
                } else {
                    JOptionPane.showMessageDialog(null, "修改失败");
                }
            }
        });

        setModal(true);
        setVisible(true);
    }

//    public static void main(String[] args) {
//        new StudentUpdateDialog();
//    }
}

数据表

/*
 Navicat Premium Data Transfer

 Source Server         : java95
 Source Server Type    : MySQL
 Source Server Version : 50717
 Source Host           : localhost:3306
 Source Schema         : java95

 Target Server Type    : MySQL
 Target Server Version : 50717
 File Encoding         : 65001

 Date: 26/08/2020 14:56:13
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `sex` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `birth` year NULL DEFAULT NULL,
  `department` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `address` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `id`(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 917 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (901, '张老大', '男', 1985, '计算机系', '北京市海淀区');
INSERT INTO `student` VALUES (902, '张老二', '男', 1986, '中文系', '北京市昌平区');
INSERT INTO `student` VALUES (903, '张三', '女', 1990, '中文系', '湖南省永州市');
INSERT INTO `student` VALUES (904, '李四', '男', 1990, '英语系', '辽宁省阜新市');
INSERT INTO `student` VALUES (905, '王五', '女', 1991, '计算机系', '福建省厦门市');
INSERT INTO `student` VALUES (906, '王六', '男', 1988, '计算机系', '湖南省衡阳市');
INSERT INTO `student` VALUES (907, '零零七', '男', 1988, '计算机系', '湖南省长沙市');
INSERT INTO `student` VALUES (908, '零_七', '男', 1988, '计算机系', '湖南省长沙市');
INSERT INTO `student` VALUES (912, '嫦娥', '女', 2000, '中文系', '天上');
INSERT INTO `student` VALUES (913, '燕南天', '男', 2000, '英语系', '浏阳市');
INSERT INTO `student` VALUES (914, '测试', '女', 2010, '中文系', '娄底');
INSERT INTO `student` VALUES (915, '彭维新', '男', 2010, '计算机系', '长沙');
INSERT INTO `student` VALUES (916, '孙司空', '男', 1999, '英语系', '衡阳');

SET FOREIGN_KEY_CHECKS = 1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤永红

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值