waterye

使用Spring JDBC Framework简化开发

纯JDBC操作, 对某些项目来说, 也许更好, Spring JDBC Framework让你不用关心Connection, Statement, ResultSet.

定义数据源
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    
<property name="jndiName">
        
<value>java:/comp/env/jdbc/oracle</value>
    
</property>
</bean>

定义事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
<property name="dataSource" ref="dataSource" />
</bean>

定义dao
<bean id="customerDAO" class="com.waterye.dao.impl.CustomerDAOImpl">
    
<property name="dataSource" ref="dataSource" />
    
<property name="transactionManager" ref="transactionManager" />
</bean>

demo
public class CustomerDaoImpl extends JdbcDaoSupport implements CustomerDAO {
    
private DataSource dataSource; 
    pirvate TransactionManager transactionManager;

    
public void setDataSource(DataSource dataSource) {
        
this.dataSource = dataSource;
    }

    
public void setTransactionManager(DataSourceTransactionManager transactionManager) {
        
this.transactionManager = transactionManager;
    } 

    
public Map get(Integer id) throws Exception {
        String querySql 
= "select * from customer where id = ?";

        
return getJdbcTemplate().queryForMap(querySql, new Object[] { id }); 
    }

    
public void insert(final Map customer) throws Exception {
        String seqSql 
= "select customer_seql.nextval from dual"
        String insertSql 
= "insert into customer (id, code, name, status) values (?, ?, ?, ?)";
        
        TransactionTemplate transactionTemplate 
= new TransactionTemplate(transactionManager);
        transactionTemplate.execute(
new TransactionCallbackWithoutResult() { 
            
protected void doInTransactionWithoutResult(TransactionStatus status) { 
                JdbcTemplate jdbcTemplate 
= getJdbcTemplate();
                
int id = jdbcTemplate.queryForInt(seqSql);
                Object[] params 
= new Object[] { new Integer(id), customer.get("code"), customer.get("name"), map.get("status") };
                jdbcTemplate.update(insertSql, params);
            }
        }
    }

    
public void update(final Map customer) throws Exception {
        
//  
    }

    
public void delete(Integer id) throws Exception {
        String deleteSql 
= "delete from customer where id = ?";

        TransactionTemplate transactionTemplate 
= new TransactionTemplate(transactionManager);
        transactionTemplate.execute(
new TransactionCallbackWithoutResult() { 
            
protected void doInTransactionWithoutResult(TransactionStatus status) { 
                getJdbcTemplate().update(deleteSql, 
new Object[] { id });
            }
        }
    }

    
public List findValidCustomers() throws Exception {
        String querySql 
= "select * from customer where status = 'valid' order by code";

        
return getJdbcTemplate().query(querySql, new OracleColumnMapRowMapper()); 
    }

说明:
1. 没有使用声明性事务, 使用编程式事务
2. 没有使用POJO模式,使用HashMap, (ActiveMapper还在sandbax状态)
3. OracleColumnMapRowMapper implements RowMapper, 实现oracle风格到java bean风格mapping
    如: 字段customer_id 对应rowMap.get("customerId");

posted on 2005-08-21 20:13 waterye 阅读(2438) 评论(3)  编辑  收藏 所属分类: spring

Feedback

# re: 使用Spring JDBC Framework简化开发 2005-08-25 12:37 江南白衣@ITO

透明同志说,代码量控制在30%以内的文章是好文章,按这个标准.......  回复  更多评论   

# re: 使用Spring JDBC Framework简化开发 2005-08-25 13:01 Water Ye@ITO

本人语言表达能力较差  回复  更多评论   

# re: 使用Spring JDBC Framework简化开发 2005-08-25 21:38 江南白衣@ITO

又据Joel on software同志说,"影响别人的能力很重要,所以要在blog里认真锻炼写作能力阿。", so,代码挂帅的blog风格要改一下了哦。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: