1、数据封装
首先我们来看一下数据封装的4个步骤:
对属性的封装
get和set方法的编写
构造函数的编写
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方法。
2、JDBC数据库驱动的封装
首先我们来回顾一下JDBC数据库使用的七个基本步骤:
获取驱动
创建连接
编写sql
获取prepareStatement
执行sql语句,并返回结果
处理结果集
关闭资源
下面是实现上述步骤的部分代码:
//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();
在这里我们可以发现:
获取驱动、创建连接和关闭资源这三个操作是会被经常使用的,如果每次都单独写一遍,代码量会非常多并且很繁琐,这时我们就应该进行封装操作:
首先我们创建一个工具类,我这里叫DButil
然后首先把数据库驱动名、数据库URL、用户名和密码这四大必备属性进行封装
接下来我们把获取驱动直接写成一个静态代码块,因为每次使用这个工具类都需要获取驱动,为了提高性能和避免空间浪费,我们直接将其写成一个static代码块,这样在类第一次被加载时就完成了驱动的注册
而对于创建连接和关闭资源这两个操作,我们可以将其写成静态方法,方便每次数据库操作时对其进行调用
封装好的代码块如下:
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("查询成功!");
}
}