Spring 學習其三:數據庫編程
阿新 • • 發佈:2018-10-04
最大連接數 學習 mysq 簡單 持久 employee 建立 auto ets
一、直接利用 JDBC 進行數據庫編程
雖然有 Spring 和 MyBatis 等數據持久化的利器在手,但還是有必要去了解下傳統的 JDBC 開發方式。無論哪種框架,其本質都是在傳統的 JDBC 方式上進行了封裝。
package JdbcTest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JdbcTest {public static void main(String[] args) { EmployeeModel employee = null; Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://192.168.52.129:3306/employees?serverTimezone=UTC", "root", "Root123#"); ps=con.prepareStatement("select emp_no,first_name,last_name from employees where emp_no = ?"); ps.setInt(1, 10001); rs = ps.executeQuery(); while(rs.next()) { employee = new EmployeeModel(); employee.setEmpNo(rs.getInt(1)); employee.setFirstName(rs.getString(2)); employee.setLastName(rs.getString(3)); } } catch (ClassNotFoundException e) { System.out.println("class not found"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(!(rs == null) && !rs.isClosed()) { rs.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(!(ps == null) && ps.isClosed()) { ps.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(con !=null && !con.isClosed()) { con.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(employee); } }
這段代碼的惱人的地方在於數據庫資源的使用和銷毀,這些代碼被大串的 try-catch 語句包裹。Spring 則為我們進行了一次包裝,將這些煩人的 try-catch 語句交給 Spring 去處理。
二、為 Spring 創建第三方數據庫連接池
Spring 本身也有自己的數據類,但是過於簡單,在絕大多數的項目中,我們都希望能夠用數據連接池的方式去管理連接。常用的第三方連接池是 DBCP2。
在配置 DBCP2 之前,現在 properties 文件裏存好數據庫連接所需的信息:
database.driver = com.mysql.cj.jdbc.Driver database.url = jdbc:mysql://192.168.52.129:3306/employees?serverTimezone=UTC database.username = root database.password = Root123# database.maxtotal = 255 database.maxidle = 3 database.maxwaitmillis = 10000
maxtoal 值最大連接數,maxidle 為最大等待連接數量(超出這個數量的連接資源會被釋放),maxwaitmillis 為最大等待毫秒數
然後再 spring-cfg.xml 裏引入該 peoperties 文件並且建立一個連接池對象:
<bean id = "dataSource" class = "org.apache.commons.dbcp2.BasicDataSource"> <property name = "driverClassName" value = "${database.driver}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> <property name="maxTotal" value="${database.maxtotal}"/> <property name="maxIdle" value="${database.maxidle}"/> <property name="maxWaitMillis" value="${database.maxwaitmillis}"/> </bean>
而包裝傳統 jdbc 的 Spring 的類為 JdbcTemple ,我們也配置下:
<bean id="jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref = "dataSource"/> </bean>
然後使用 JdbcTemplate 來完成上面的獲取 employee 信息的功能:
Spring 學習其三:數據庫編程