自已动手写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等,这些放在静态初始化块里面。