自已动手写ORM框架(3)——封装JdbcUtil

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