up:: JDBC实现事务

首先声明一点,本篇博客内容不是新内容,以前遇到过N次,只是这儿再重复说明一下。

对员工数据进行分页查询,分页获取的数据进行封装,包装成一个一个的员工实体对象(JavaBean),然后将这些对象放入一个集合中,方便java程序后续的读取和处理。

本篇博客就两点:(1)JavaBean;(2)LIMIT分页(仅适用于MySQL);


首先,先编写Employee实体类:

开始执行:

Employee类:

这个类的属性仅仅要求需要和数据库表的字段对应,没有要求一定名字一定相同。。。。。但是还是强烈建议相同啦!!!(因为这样可以避免很多后续的无头绪的问题)

    package com.imooc.jdbc.command.entity;
 
    public class Employee {
        /**
         * 一个JavaBean应该具备的条件
         * 1.具备默认构造函数;
         * 2.属性私有;
         * 3.存在getter与setter方法;
         */
        public Employee(){}
 
        private Integer eno;
        private String ename;
        private Float salary;
        private String dname;
 
        public Integer getEno() {
            return eno;
        }
 
        public void setEno(Integer eno) {
            this.eno = eno;
        }
 
        public String getEname() {
            return ename;
        }
 
        public void setEname(String ename) {
            this.ename = ename;
        }
 
        public Float getSalary() {
            return salary;
        }
 
        public void setSalary(Float salary) {
            this.salary = salary;
        }
 
        public String getDname() {
            return dname;
        }
 
        public void setDname(String dname) {
            this.dname = dname;
        }
    }
 

然后,编写分页查询类: PaginationCommand类:

PaginationCommand类:

    package com.imooc.jdbc.hrapp.command;
 
    import com.imooc.jdbc.common.DbUtils;
    import com.imooc.jdbc.hrapp.entity.Employee;
 
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
 
    /**
     * 分页查询员工数据
     */
    public class PaginationCommand implements Command{
        @Override
        public void execute() {
            Scanner in = new Scanner(System.in);
            System.out.println("请输入页号:");
            int page = in.nextInt();
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
                conn = DbUtils.getConnection();
                String sql = "select * from employee limit ?,10";
                pstmt = conn.prepareStatement(sql);
                pstmt.setInt(1,(page-1)*10);  // mysql在LIMIT关键字中:开始位置是0;
                rs = pstmt.executeQuery();
                List<Employee> list = new ArrayList<>();//
                while (rs.next()) {
                    // 推荐使用字段名来获取字段值,而不要使用列的索引获取字段值;
                    Integer eno = rs.getInt("eno");
                    String ename = rs.getString("ename");
                    Float salary = rs.getFloat("salary");
                    String dname = rs.getString("dname");
                    Employee employee = new Employee();
                    employee.setEno(eno);
                    employee.setEname(ename);
                    employee.setSalary(salary);
                    employee.setDname(dname);
                    list.add(employee);//将结果集中的数据保存到集合中;即使这个结果集后来被close了,数据已经保存到list中了,数据也不会丢失。
                }
                System.out.println(list.size());
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }finally {
                DbUtils.closeConnection(rs,pstmt,conn);
            }
        }
    }

说明: (1)分页查询在MySQL中使用LIMIT关键字。 LIMIT关键字并不是标准SQL中有的,LIMIT关键字仅仅是MySQL独有的专用于分页的关键字,是MySQL的方言;Oracle和SQLserver也有对应的方言来实现数据的分页处理。

(2)MySQL的LIMIT关键字,起始位置是0;

(3)推荐使用列名的方式来获取字段值,(不推荐使用列的索引值来获取),因为数据表的表结构可能在以后发生变化;比如,以后在employee表原本第一个列前有增加了一列,那么此时这儿就会匹配混乱了;

最后,在HumanResourceApplication入口类中编写分页的部分:

然后,在入口类中添加上分页的部分: HumanResourceApplication类:

    package com.imooc.jdbc.hrapp;
 
    import com.imooc.jdbc.hrapp.command.*;
 
    import java.util.Scanner;
 
    public class HumanResourceApplication {
        public static void main(String[] args) {
            System.out.println("1-查询部门员工");
            System.out.println("2-办理员工入职");
            System.out.println("3-调整薪资");
            System.out.println("4-员工离职");
            System.out.println("5-员工分页查询");
            System.out.println("请选择功能:");
            Scanner in = new Scanner(System.in);
            Integer cmd = in.nextInt();
            Command command = null;// 将接口变量定义在外边,并初始化为null;在内部遇到不同操作的时候,再去实例化与之对应的类;
            switch (cmd){
                case 1: //查询部门员工
                    command = new PstmtQueryCommand();
                    command.execute();
                    break;
                case 2: //办理员工入职
                    command = new InsertCommand();
                    command.execute();
                    break;
                case 3: //调整薪资
                    command = new UpdateCommand();
                    command.execute();
                    break;
                case 4: //员工离职
                    command = new DeleteCommand();
                    command.execute();
                case 5:
                    command = new PaginationCommand();
                    command.execute();
                default:
            }
        }
    }
 

这篇博客的核心就是:知道LIMIT关键字在实际中的用法。其他内容都还好……