Spring JdbcTemplate+JdbcDaoSupport範例


在Spring JDBC開發中,可以使用 JdbcTemplate 和 JdbcDaoSupport 類來簡化整個資料庫的操作過程。
在本教學中,我們將重複上一篇文章 Spring+JDBC例子,看之前(無JdbcTemplate支援)和之後(含JdbcTemplate的支援)之間不同的例子。

1. 不使用JdbcTemplate範例

如果不用JdbcTemplate,必須建立大量的冗餘程式碼(建立連線,關閉連線,處理異常)中的所有DAO資料庫的操作方法 - 插入,更新和刪除。它的效率並不是很高,容易出錯和乏味。
private DataSource dataSource;
		
	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}
		
	public void insert(Customer customer){
			
		String sql = "INSERT INTO CUSTOMER " +
				"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
		Connection conn = null;
			
		try {
			conn = dataSource.getConnection();
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, customer.getCustId());
			ps.setString(2, customer.getName());
			ps.setInt(3, customer.getAge());
			ps.executeUpdate();
			ps.close();
				
		} catch (SQLException e) {
			throw new RuntimeException(e);
				
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {}
			}
		}
	}

2. 使用JdbcTemplate範例

使用JdbcTemplate可節省大量的冗餘程式碼,因為JdbcTemplate類會自動處理它。
private DataSource dataSource;
	private JdbcTemplate jdbcTemplate;
		
	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	public void insert(Customer customer){
			
		String sql = "INSERT INTO CUSTOMER " +
			"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
				 
		jdbcTemplate = new JdbcTemplate(dataSource);
				
		jdbcTemplate.update(sql, new Object[] { customer.getCustId(),
			customer.getName(),customer.getAge()  
		});
				
	}
看看有什麼不同?

3. 使用JdbcDaoSupport範例

通過擴充套件 JdbcDaoSupport,設定資料源,並且 JdbcTemplate 在你的類中不再是必需的,只需要正確的資料源注入JdbcCustomerDAO。可以使用 getJdbcTemplate()方法得到 JdbcTemplate。

public class JdbcCustomerDAO extends JdbcDaoSupport implements CustomerDAO
	{
	   //no need to set datasource here
	   public void insert(Customer customer){
			
		String sql = "INSERT INTO CUSTOMER " +
			"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
				 
		getJdbcTemplate().update(sql, new Object[] { customer.getCustId(),
				customer.getName(),customer.getAge()  
		});
				
	}
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	
	<bean id="dataSource" 
         class="org.springframework.jdbc.datasource.DriverManagerDataSource">

		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/yiibaijava" />
		<property name="username" value="root" />
		<property name="password" value="password" />
	</bean>
	
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="customerDAO" class="com.yiibai.customer.dao.impl.JdbcCustomerDAO">
		<property name="dataSource" ref="dataSource" />
	</bean>
	
</beans>
註: 在Spring JDBC開發,它總是建議使用,總是建議使用 JdbcTemplate和JdbcDaoSupport,而不使用自己的JDBC程式設計程式碼。

下載程式碼  – http://pan.baidu.com/s/1bnIGdiR