正常狀況,咱們會調用存儲過程用hibernate提供的鏈接池代理鏈接類來調用存儲過程,而用新建鏈接給存儲過程組拼STRUCT。spring
可是這樣感受能夠再一步的優化:調用存儲過程與構建STRUCT用hibernate提供的同一個代理connection,可是這裏須要用到一個connection的類型轉換。由於struct不能用代理類組拼。優化
1 public Connection getConnection(Connection conn) { 2 C3P0NativeJdbcExtractor cp30NativeJdbcExtractor = new C3P0NativeJdbcExtractor(); 3 Connection con = null; 4 try { 5 con = cp30NativeJdbcExtractor 6 .getNativeConnection(conn); 7 } catch (SQLException e) { 8 e.printStackTrace(); 9 } 10 return con; 11 }
這樣,實際上是使用了spring提供的一個轉換類方法 C3P0NativeJdbcExtractor,他能夠把代理類轉化爲原始類。 這樣就能夠節省新建鏈接所用的資源了。
而且,在組拼STRUCT時,不須要再關閉conn了,而是交由hibernate統一關閉。spa
在這個過程當中遇到一個代碼異常:Unhandled exception type SQLException。 說明該代碼有可能拋出異常,而且你沒有經過try。。catch捕捉。 添加try。。catch就正常了hibernate