宁波中软国际实习日记(二):JDBC数据库的封装与分层

文章目录

    • 1、数据封装
    • 2、JDBC数据库驱动的封装
    • 3、数据库操作的封装

1、数据封装

首先我们来看一下数据封装的4个步骤:

  1. 对属性的封装
  2. get和set方法的编写
  3. 构造函数的编写
  4. toString函数的重写

好的,现在我们对实体类按照上述步骤进行一下封装:

package com.bean;
/*
 * 实体类User
 */
public class User {
    private int id; //用户id
    private String username; //用户名
    private String password; //用户密码

    //get and set
    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    //构造方法

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public User() {
    }

    //toString

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

在进行封装的时候有一个小技巧,那就是在写完实体类属性之后,直接利用IDEA的generate功能生成get和set方法、构造方法以及toString方法。
宁波中软国际实习日记(二):JDBC数据库的封装与分层_第1张图片

2、JDBC数据库驱动的封装

首先我们来回顾一下JDBC数据库使用的七个基本步骤:

  1. 获取驱动
  2. 创建连接
  3. 编写sql
  4. 获取prepareStatement
  5. 执行sql语句,并返回结果
  6. 处理结果集
  7. 关闭资源

下面是实现上述步骤的部分代码:

            //1.获取驱动
            Class.forName(driver);
            //2.创建连接
            conn = DriverManager.getConnection(url, user, pwd);
            //3.编写sql语句
            String sql = "select * from user"
            //4.获取对象
            pstm = conn.prepareStatement(sql);
            //5.执行并返回结果
            rs = pstm.executeQuery();
            //6.处理结果
            while (rs.next())
            {
                System.out.println("id: " + rs.getInt(1));
                System.out.println("用户名: " + rs.getString(2));
                System.out.println("密码: " + rs.getString(3));
            }
            //7.关闭资源
            rs.close();
            pstm.close();
            conn.close();

在这里我们可以发现:
获取驱动、创建连接和关闭资源这三个操作是会被经常使用的,如果每次都单独写一遍,代码量会非常多并且很繁琐,这时我们就应该进行封装操作:

  1. 首先我们创建一个工具类,我这里叫DButil
  2. 然后首先把数据库驱动名、数据库URL、用户名和密码这四大必备属性进行封装
  3. 接下来我们把获取驱动直接写成一个静态代码块,因为每次使用这个工具类都需要获取驱动,为了提高性能和避免空间浪费,我们直接将其写成一个static代码块,这样在类第一次被加载时就完成了驱动的注册
  4. 而对于创建连接和关闭资源这两个操作,我们可以将其写成静态方法,方便每次数据库操作时对其进行调用

封装好的代码块如下:

package util;

import java.sql.*;

public class DBUtil {
    private static String driver = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/java3?userSSL=true&characterEncoding=utf-8";
    private static String user = "root";
    private static String pwd = "123456";

    static {
        try {
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection get_Conn() throws SQLException {
        Connection conn = DriverManager.getConnection(url, user, pwd);
        return conn;
    }

    public static void get_CloseConn(ResultSet rs, PreparedStatement pstm, Connection conn) throws SQLException {
        if (rs != null) {
            rs.close();
        }
        if (pstm != null) {
            pstm.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
}

3、数据库操作的封装

我们都知道,数据库有四大操作:增删改查,我们不可能每次操作都单独把所有语句写出来,所以针对不同的数据库操作,我们应该对其单独进行封装,之前的代码编写中,我已经对其进行了封装,在加上对JDBC数据库驱动的封装之后,代码量变得更加少也更加简洁,具体代码块如下:

package dao;

import bean.User;
import util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
    private static Connection connection = null;
    private static PreparedStatement preparedStatement = null;
    private static ResultSet resultSet = null;

    public static List<User> getAllUser() {
        List<User> userList = new ArrayList<User>();
        try {
            connection = DBUtil.get_Conn();
            String sql="select * from tb_user";
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                User user = new User();
                user.setId(resultSet.getInt(1));
                user.setUserame(resultSet.getString(2));
                user.setPassword(resultSet.getString(3));
                userList.add(user);
                System.out.println(user);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                DBUtil.get_CloseConn(resultSet,preparedStatement,connection);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return userList;
    }
    public static void main(String args[]) {
        getAllUser();
        System.out.println("查询成功!");
    }
}

你可能感兴趣的:(宁波中软国际实习日记(二):JDBC数据库的封装与分层)