[1]封装数据库连接工具类(JDBCUtils):
a.满足重用性方案:
-
将加载驱动和获得连接对象的操作封装在方法中。
/** * 获取数据库连接对象 * * @return conn 数据库连接对象 */ public static Connection getConn() { Connection conn = null; try { // 1.加载驱动 Class.forName("oracle.jdbc.OracleDriver"); // 2.创建连接 String url = "jdbc:oracle:thin:@192.168.230.10:1521:orcl"; Connection conn = DriverManager.getConnection(url, "username", "password"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } return conn; }
-
将释放多个资源的操作封装在方法中。
/** * 释放资源 * * @param rs 执行结果集 * @param stm sql操作对象 * @param conn 数据库连接 */ public static void release(ResultSet rs, Statement stm, Connection conn) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } if (stm != null) { try { stm.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } }
b.满足跨平台性方案[重点]
由于数据库连接随着业务的变更是有变更需求的,因此我们遵循开闭原则,以配置文件的形式加载数据库配置信息
package cn.net.trimmer.jdbc.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* jdbc 工具类简单抽取
*
* @author wl
*
*/
public class JdbcUtils {
private static final Properties prop = new Properties();
// 类加载时读取配置文件,保证读取配置文件只执行一次
static {
InputStream in = null;
try {
// 1. 从类路径加载配置文件
in = JdbcUtils.class.getResourceAsStream("/cn/net/trimmer/jdbc/conf/db.properties");
// 2. 解析配置文件
prop.load(in);
System.out.println("数据库配置文件加载完成...");
} catch (IOException e) {
e.printStackTrace();
if (in != null) {
try {
in.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
/**
* 获取数据库连接对象
*
* @return conn 数据库连接对象
*/
public static Connection getConn() {
Connection conn = null;
try {
String driver = prop.getProperty("jdbc.driver");
String url = prop.getProperty("jdbc.url");
String username = prop.getProperty("jdbc.username");
String password = prop.getProperty("jdbc.password");
//加载驱动
Class.forName(driver);
//获得连接对象
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return conn;
}
/**
* 释放资源
*
* @param rs 执行结果集
* @param stm sql操作对象
* @param conn 数据库连接
*/
public static void release(ResultSet rs, Statement stm, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (stm != null) {
try {
stm.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
[2]ORM(Object Relationship Mapping)【重点】:对象关系映射
-
将一行中多个零散数据进行整理。
-
通过Entity的规则(私有属性、公共访问方法、无参构造方法),将表中的数据进行对象的封装。
-
表名 —— 类名; 列名 —— 属性名。
[3]数据访问对象DAO(Data Access Object)【重点】:
-
将所有对同一张表的操作封装在一个XXXDaoImpl的对象中。
-
根据增删改查的不同功能实现具体的方法(insertXXX、updateXXX、deleteXXX、selectXXX、selectAllXXX)。
-
经验:对于任何一张表中的数据进行操作时,无非就是增删改查。应将所有对于某一张表的操作同一封装在一个数据访问对象中。
[4]junit的使用:单元测试
-
引入Jar包。
-
在方法中添加@Test注解
-
注意:类名不能使用Test