自已动手写ORM框架(3)——封装JdbcUtil
在阐述了ORM思想后,我们就可以真正的动手写自已的简易ORM框架了,ORM层是解决类的对像的数据表中记录的映射关系问题的,本章要解决的JdbcUtil是封装底层SQL语句执行的操作的。在ORM层构建好SQL语句后直接扔给JdbcUtil层来执行。
思考一下,JdbcUtil需要提供哪些方法呢?
我们按照PreparedStatement提供的两个方法来封装出JdbcUtil的两个方法:executeUpdate和executeQuery,其中前者用于执行DML语句(insert, delete, update),后者用于查询(select)。
1. DML语句的执行接口
/**
* 执行一条需要Connection的SQL语句
* @param conn 数据库连接
* @param sql SQL语句
* @param params SQL语句的参数
* @return 执行语句后影响的记录的行数
* @throws SQLException
*/
public static int executeUpdate(Connection conn,String sql,Object...params)
throws SQLException{
PreparedStatement pstmt = null;
int rows = 0;
//重组SQL语句执行
try
{
pstmt = conn.prepareStatement(sql);
for(int i=0; i<params.length; i++){
pstmt.setObject(i+1, params[i]);
}
rows = pstmt.executeUpdate();
}finally{
IOUtil.close(pstmt);
}
return rows;
}
2. 查询语句的执行接口
/**
* 执行需要Connection的查询语句
* @param conn 数据库连接
* @param sql SQL语句
* @param params SQL语句参数列表
* @return 查询结果集
* @throws SQLException
*/
public static ResultSet executeQuery(Connection conn,String sql,Object...params)
throws SQLException{
PreparedStatement pstmt = null;
try
{
//执行SQL语句预编译
pstmt = conn.prepareStatement(sql);
//赋值参数
for(int i=0; i<params.length; i ++){
pstmt.setObject(i+1, params[i]);
}
//执行查询
return pstmt.executeQuery();
}catch(SQLException e){
IOUtil.close(pstmt);
throw new RuntimeException("SQL查询出错!",e);
}
}
3. IOUtil的封装
Connection,PreparedStatement,ResultSet对像的关闭,类似如下:
/**
* 关闭数据库连接
* @param conn 需要关闭的数据库连接对像
*/
public static void close(Connection conn)
{
if(conn != null)
{
try
{
conn.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
当然,在JdbcUtil里面还要处理从配置文件得到数据库的drivername,username,password,url等,这些放在静态初始化块里面。