会用简单的JDBC进行查询之后我们就要去封装代码去进行更高级的操作
1.封装select查询语句
2.JDBC工具类
1.封装select查询语句 我们在这里新建了一个数据库,下面我们将查询students里的所有数据,封装成对象,然后装载集合,返回。
- 定义students类
 - 定义方法public List<students> findAll(){ }
 - 实现方法select * from students
 
定义students类 我们新建一个包com.byzhang.domain,并在里边新建一个类students.java作为bean对象
该bean用来封装students的数据 students.java内容如下所示
package com.byzhang.domain;
public class students {
    private int id;
    private String name;
    private double score;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    @Override
    public String toString() {
        return "students{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}
定义方法public List<student> findAll(){ } 我们在JDBC中新建一个JdbcDemo4,并定义一个findAll()方法 具体代码如下:main方法是测试作用
package com.byzhang.jdbc;
import com.byzhang.domain.students;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class JdbcDemo4 {
    //查询所有students对象
    public static void main(String[] args) {
        List<students> list = new JdbcDemo4().findAll();
        System.out.println(list);
    }
    public List<students> findAll(){
        Connection conn = null;
        Statement stmt = null;
        ResultSet res = null;
        students stu = null;
        List <students> list = new ArrayList<students>();
        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取Connection对象
            conn = DriverManager.getConnection("jdbc:mysql:///test?useSSL=false","root","123456");
            //3.定义sql语句
            String sql = "select * from students";
            //4.获取执行对象
            stmt = conn.createStatement();
            //5.执行sql
            res = stmt.executeQuery(sql);
            //6.处理结果
            while(res.next()){
                //获取数值
                int id = res.getInt(1);
                String name = res.getString(2);
                double score = res.getDouble(3);
//                System.out.println(id+"->"+name+"->"+score);
                stu = new students();
                //封装对象
                stu.setId(id);
                stu.setName(name);
                stu.setScore(score);
                //装载集合
                list.add(stu);
            }
        }catch (ClassNotFoundException | SQLException e){
            e.printStackTrace();
        }finally {
            if(res != null){
                try{
                    res.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(stmt != null){
                try{
                    stmt.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try{
                    conn.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
        return list;
    }
}
2.工具类 我们在写代码的时候发现,我们代码的重复度相当的高,很多很多重复写的代码,于是我们可以抽取一个DJBCutils的工具类来简化书写 我们新建一个utils包还有JdbcUtils类
并在src目录下面新建一个jdbc.properties 目的是把url username password这些参数写到配置文件里边,方便改写
JdbcUtils.java内容如下,里边内容较多,写了注释
package com.byzhang.utils;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
    private static String url;
    private static String name;
    private static String password;
    private static String driver;
    /*
    * 文件的读取只需要读取一次就可以一直拿来用,就使用静态代码块
    * */
    static{
        //读取资源文件,获取值
        try {
            //1.创建properties集合类
            Properties pro = new Properties();
            //2.加载文件
            //获取src目录下的文件的方法ClassLoader类加载器
            ClassLoader classloader = JdbcUtils.class.getClassLoader();
            URL resource = classloader.getResource("jdbc.properties");
            String path = resource.getPath();
            pro.load(new FileReader(path));
            //3.加载数值,赋值
            url = pro.getProperty("url");
            name = pro.getProperty("name");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            //4.注册驱动
            Class.forName(driver);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        //加载数据,赋值
    }
    //获取链接
    //返回链接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,name,password);
    }
    public static void close(Statement stmt,Connection conn) {
        if(stmt != null) {
            try{
                stmt.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if(conn != null) {
            try {
                stmt.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close(ResultSet res, Statement stmt, Connection conn) {
        if(res != null) {
            try{
                res.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt != null) {
            try{
                stmt.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if(conn != null) {
            try {
                stmt.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
测试Java类如下,
package com.byzhang.jdbc;
import com.byzhang.domain.students;
import com.byzhang.utils.JdbcUtils;
import com.sun.jndi.toolkit.ctx.StringHeadTail;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class JdbcDemo5 {
    public static void main(String[] args) {
        List<students> list = new JdbcDemo5().findAll();
        System.out.println(list);
    }
    public static List<students> findAll(){
        Connection conn = null;
        Statement stmt = null;
        ResultSet res = null;
        List<students> list = new ArrayList<students>();
        students stu = new students();
        try{
            //注册驱动获取链接
            conn = JdbcUtils.getConnection();
            //获取执行对象
            stmt = conn.createStatement();
            //定义sql
            String sql = "select * from students";
            //执行sql
            res = stmt.executeQuery(sql);
            //处理结果
            while(res.next()){
                int id = res.getInt(1);
                String name = res.getString(2);
                double score = res.getDouble(3);
                stu = new students();
                stu.setId(id);
                stu.setScore(score);
                stu.setName(name);
                list.add(stu);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.close(res,stmt,conn);
        }
        return list;
    }
}
通过对比可以发现,代码不再像以前那么臃肿了
